72 lines
3.4 KiB
TypeScript
72 lines
3.4 KiB
TypeScript
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
|
|
`);
|
|
}
|
|
}
|