Uecko_ERP/modules/customer-invoices/src/api/application/get-customer-invoice/assembler/get-invoice.assembler.ts

71 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-09-04 10:42:11 +00:00
import { UpdateCustomerInvoiceByIdResponseDTO } from "@erp/customer-invoices/common/dto";
2025-09-03 18:04:09 +00:00
import { toEmptyString } from "@repo/rdx-ddd";
import { CustomerInvoice } from "../../../domain";
2025-09-04 10:02:24 +00:00
import { GetCustomerInvoiceItemsAssembler } from "./get-invoice-items.assembler";
export class GetCustomerInvoiceAssembler {
2025-09-04 10:02:24 +00:00
private _itemsAssembler!: GetCustomerInvoiceItemsAssembler;
constructor() {
this._itemsAssembler = new GetCustomerInvoiceItemsAssembler();
}
2025-09-03 18:04:09 +00:00
2025-09-04 10:42:11 +00:00
public toDTO(invoice: CustomerInvoice): UpdateCustomerInvoiceByIdResponseDTO {
2025-09-04 10:02:24 +00:00
const items = this._itemsAssembler.toDTO(invoice);
2025-09-03 18:04:09 +00:00
return {
2025-09-03 18:04:09 +00:00
id: invoice.id.toPrimitive(),
company_id: invoice.companyId.toPrimitive(),
invoice_number: invoice.invoiceNumber.toString(),
status: invoice.status.toPrimitive(),
series: invoice.series.toString(),
2025-09-04 17:57:04 +00:00
invoice_date: invoice.invoiceDate.toDateString(),
2025-09-03 18:04:09 +00:00
operation_date: toEmptyString(invoice.operationDate, (value) => value.toDateString()),
notes: toEmptyString(invoice.notes, (value) => value.toPrimitive()),
language_code: invoice.languageCode.toPrimitive(),
currency_code: invoice.currencyCode.toPrimitive(),
2025-09-04 10:02:24 +00:00
subtotal_amount: {
value: invoice.subtotalAmount.value.toString(),
scale: invoice.subtotalAmount.scale.toString(),
},
discount_percentage: {
value: invoice.discountPercentage.value.toString(),
scale: invoice.discountPercentage.scale.toString(),
},
discount_amount: {
value: invoice.discountAmount.value.toString(),
scale: invoice.discountAmount.scale.toString(),
},
taxable_amount: {
value: invoice.taxableAmount.value.toString(),
scale: invoice.taxableAmount.scale.toString(),
},
tax_amount: {
value: invoice.taxAmount.value.toString(),
scale: invoice.taxAmount.scale.toString(),
},
total_amount: {
value: invoice.totalAmount.value.toString(),
scale: invoice.totalAmount.scale.toString(),
},
items,
metadata: {
entity: "customer-invoices",
},
};
}
}