refactor: migrate the warehouse invoice to use the central one

This commit is contained in:
Nathnael
2026-06-30 12:54:04 +00:00
parent 5ad4efd7eb
commit fa3138f2ac
11 changed files with 744 additions and 391 deletions

View File

@@ -1,3 +1,4 @@
import { Freight, PaymentReferenceType } from "@edr/types";
import {
BadRequestException,
forwardRef,
@@ -7,22 +8,21 @@ import {
NotFoundException,
} from "@nestjs/common";
import { EventEmitter2 } from "@nestjs/event-emitter";
import { Freight, PaymentReferenceType } from "@edr/types";
import { DataSource, EntityManager, In } from "typeorm";
import { Invoice, InvoicePayment } from "./entities/invoice.entity";
import { InvoiceLine } from "./entities/invoice-line.entity";
import { InvoiceRepository } from "./invoice.repository";
import { InvoiceLineRepository } from "./invoice-line.repository";
import { nextDailyInvoiceNumber } from "./invoice-numbering.util";
import { applySettlement, round2 } from "./invoice-settlement.util";
import { CompaniesService } from "../companies/companies.service";
import { PaymentService } from "../payment/payment.service";
import { InitiateResponseDto } from "../payment/payments.dto";
import {
InvoiceDocumentModel,
InvoiceDocumentService,
} from "./documents/invoice-document.service";
import { PaymentService } from "../payment/payment.service";
import { InitiateResponseDto } from "../payment/payments.dto";
import { CompaniesService } from "../companies/companies.service";
import { InvoiceLine } from "./entities/invoice-line.entity";
import { Invoice, InvoicePayment } from "./entities/invoice.entity";
import { InvoiceLineRepository } from "./invoice-line.repository";
import { nextDailyInvoiceNumber } from "./invoice-numbering.util";
import { applySettlement, round2 } from "./invoice-settlement.util";
import { InvoiceRepository } from "./invoice.repository";
/** Options forwarded to the payment gateway when settling an invoice. */
export interface PayInvoiceOptions {
@@ -96,6 +96,11 @@ export interface GenerateInvoiceInput {
* (default PENDING) stamps `issuedAt`.
*/
status?: Freight.InvoiceStatus;
/**
* Document number prefix for this source (e.g. `WHF` for warehouse fees);
* defaults to `FRT`. The daily sequence is allocated per prefix.
*/
numberCode?: string;
}
/** Payload broadcast on `${source}.invoice.<event>`. */
@@ -269,9 +274,9 @@ export class BillingService {
// ── Generation ───────────────────────────────────────────────────────────────
/** `FRT-YYYYMMDD-00001` — sequential per day, within the active transaction. */
/** `<CODE>-YYYYMMDD-00001` — sequential per day & prefix, within the active transaction. */
private nextInvoiceNumber(mg: EntityManager): Promise<string> {
return nextDailyInvoiceNumber(mg, { table: "freight.invoices", code: "FRT" });
return nextDailyInvoiceNumber(mg, { table: "freight.invoices", code:"INV" });
}
/**