Let cheques be received or paid without an invoice, and remind staff three days before due date.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-11 11:34:49 +03:30
co-authored by Cursor
parent 9a991fc1f1
commit 9beaed96e8
18 changed files with 982 additions and 61 deletions
+17 -3
View File
@@ -446,7 +446,14 @@ export class InvoicesService {
): Promise<InvoiceDto> {
const invoice = await this.prisma.invoice.findFirst({
where: { id: invoiceId, organizationId, ...ownerWhere(actor) },
select: { id: true, status: true, currency: true, organizationId: true },
select: {
id: true,
status: true,
currency: true,
organizationId: true,
personId: true,
ownerId: true,
},
});
if (!invoice) throw new NotFoundException('فاکتور پیدا نشد');
if (invoice.status === 'canceled') {
@@ -493,9 +500,14 @@ export class InvoicesService {
organizationId: invoice.organizationId,
paymentId: payment.id,
invoiceId,
personId: invoice.personId,
ownerId: invoice.ownerId,
amount: new Prisma.Decimal(dto.amount),
currency: (dto.currency ?? invoice.currency).trim() || 'IRR',
number: dto.cheque.number.trim(),
bank: dto.cheque.bank.trim(),
dueDate: new Date(dto.cheque.dueDate),
direction: 'in',
status: dto.cheque.status === 'cleared' || dto.cheque.status === 'bounced'
? dto.cheque.status
: 'pending',
@@ -765,15 +777,17 @@ export class InvoicesService {
invoiceId: row.id,
invoiceNumber: row.number,
invoiceTitle: row.title,
personId: row.person?.id ?? p.cheque.personId ?? null,
personName: row.person
? `${row.person.firstName} ${row.person.lastName}`.trim()
: row.company?.name ?? null,
amount: Number(p.amount),
currency: p.currency,
amount: Number(p.cheque.amount ?? p.amount),
currency: p.cheque.currency || p.currency,
number: p.cheque.number,
bank: p.cheque.bank,
dueDate: p.cheque.dueDate.toISOString(),
status: p.cheque.status,
direction: p.cheque.direction === 'out' ? 'out' : 'in',
notes: p.cheque.notes,
paidAt: p.paidAt.toISOString(),
createdAt: p.cheque.createdAt.toISOString(),