import { Inject, Injectable, Scope } from '@nestjs/common'; import { BaseReportService } from '../shared/services/base-report.service'; import { UserProvider } from 'src/core/sessions'; import { InjectDataSource } from '@nestjs/typeorm'; import { DataSource } from 'typeorm'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; import { GetSummaryReportDto } from '../shared/dto/summary-report.get.dto'; @Injectable({ scope: Scope.REQUEST }) export class ReportSummaryService extends BaseReportService { @Inject() protected userProvider: UserProvider; constructor( @InjectDataSource(CONNECTION_NAME.DEFAULT) private dataSource: DataSource, ) { super(); } async getReportItem(query: GetSummaryReportDto) { return this.dataSource.query(` select to_char(main.payment_date, 'DD-MM-YYYY') AS main__payment_date, CASE WHEN tenant.name is not null THEN tenant.name ELSE 'Company' END AS item_owner, tr_item.item_name AS tr_item__item_name, SUM(tr_item.qty) AS tr_item__qty, SUM(tr_item.total_net_price) AS tr_item__total_net_price from transactions main LEFT JOIN transaction_items tr_item ON tr_item.transaction_id = main.id LEFT JOIN items item ON item.id::text = tr_item.item_id::text LEFT JOIN users tenant ON tenant.id::text = item.tenant_id::text where main.status = 'settled' and tr_item.item_name is not null and main.is_recap_transaction = false and to_char(main.payment_date, 'DD-MM-YYYY') = '${query.date}' group by to_char(main.payment_date, 'DD-MM-YYYY'), CASE WHEN tenant.name is not null THEN tenant.name ELSE 'Company' END, tr_item.item_name `); } async getReportItemMaster(query: GetSummaryReportDto) { return this.dataSource.query(` select to_char(main.payment_date, 'DD-MM-YYYY') AS main__payment_date, CASE WHEN tenant.name is not null THEN tenant.name ELSE 'Company' END AS item_owner, CASE WHEN tr_item.item_type = 'bundling' THEN tr_item.item_name ELSE tr_item_bundling.item_name END AS tr_item_bundling__item_name, CASE WHEN tr_item.item_type = 'bundling' THEN tr_item_bundling.item_name ELSE tr_item.item_name END AS tr_item__item_name, SUM(tr_item.qty) AS tr_item__qty, SUM(CASE WHEN tr_item.item_type != 'bundling' THEN tr_item.total_net_price ELSE tr_item_bundling.total_net_price END) AS tr_item_bundling__total_net_price from transactions main LEFT JOIN transaction_items tr_item ON tr_item.transaction_id = main.id LEFT JOIN transaction_item_breakdowns tr_item_bundling ON tr_item_bundling.transaction_item_id = tr_item.id LEFT JOIN items item ON item.id::text = tr_item.item_id::text LEFT JOIN users tenant ON tenant.id::text = item.tenant_id::text where main.status = 'settled' and tr_item.item_name is not null and main.is_recap_transaction = false and to_char(main.payment_date, 'DD-MM-YYYY') = '${query.date}' group by to_char(main.payment_date, 'DD-MM-YYYY'), CASE WHEN tenant.name is not null THEN tenant.name ELSE 'Company' END, CASE WHEN tr_item.item_type = 'bundling' THEN tr_item.item_name ELSE tr_item_bundling.item_name END, CASE WHEN tr_item.item_type = 'bundling' THEN tr_item_bundling.item_name ELSE tr_item.item_name END `); } }