import { Injectable } from '@nestjs/common';
import { DatabaseService } from '../../../infrastructure/database/database.service';
@Injectable()
export class CashOverviewService {
constructor(private readonly database: DatabaseService) {}
async get(input: {
organizationId: string;
locationId: string;
businessDate: string;
}) {
const tills = await this.database.query<any>(
`select
t.id,
t.code,
t.display_name,
t.status,
cs.id as cash_shift_id,
cs.status as cash_shift_status,
cs.expected_cash_minor,
cs.counted_cash_minor,
cs.variance_minor,
cs.currency_code,
cs.opened_at,
cs.closed_at
from tills t
left join cash_shifts cs
on cs.till_id=t.id
and cs.business_date=$3::date
and cs.status in ('open','counting')
where t.organization_id=$1 and t.location_id=$2
order by t.display_name, t.id`,
[input.organizationId, input.locationId, input.businessDate],
);
return {
businessDate: input.businessDate,
tills: tills.map((row) => ({
id: row.id,
code: row.code,
displayName: row.display_name,
status: row.status,
shift: row.cash_shift_id
? {
id: row.cash_shift_id,
status: row.cash_shift_status,
expectedCashMinor: row.expected_cash_minor,
countedCashMinor: row.counted_cash_minor,
varianceMinor: row.variance_minor,
currencyCode: row.currency_code,
openedAt: row.opened_at,
closedAt: row.closed_at,
}
: null,
})),
};
}
}
