import { GetCustomerInvoiceByIdResponseDTO } from "@erp/customer-invoices/common/dto"; import { toEmptyString } from "@repo/rdx-ddd"; import { CustomerInvoice } from "../../../domain"; import { GetCustomerInvoiceItemsAssembler } from "./get-invoice-items.assembler"; export class GetCustomerInvoiceAssembler { private _itemsAssembler!: GetCustomerInvoiceItemsAssembler; constructor() { this._itemsAssembler = new GetCustomerInvoiceItemsAssembler(); } public toDTO(invoice: CustomerInvoice): GetCustomerInvoiceByIdResponseDTO { const items = this._itemsAssembler.toDTO(invoice); return { id: invoice.id.toPrimitive(), company_id: invoice.companyId.toPrimitive(), invoice_number: invoice.invoiceNumber.toString(), status: invoice.status.toPrimitive(), series: invoice.series.toString(), issue_date: invoice.issueDate.toDateString(), 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(), 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", }, //subtotal: customerInvoice.calculateSubtotal().toPrimitive(), //total: customerInvoice.calculateTotal().toPrimitive(), /*items: customerInvoice.items.size() > 0 ? customerInvoice.items.map((item: CustomerInvoiceItem) => ({ description: item.description.toString(), quantity: item.quantity.toPrimitive(), unit_measure: "", unit_price: item.unitPrice.toPrimitive(), subtotal: item.calculateSubtotal().toPrimitive(), //tax_amount: item.calculateTaxAmount().toPrimitive(), total: item.calculateTotal().toPrimitive(), })) : [],*/ //sender: {}, //await CustomerInvoiceParticipantAssembler(customerInvoice.senderId, context), /*recipient: await CustomerInvoiceParticipantAssembler(customerInvoice.recipient, context), items: customerInvoiceItemAssembler(customerInvoice.items, context), payment_term: { payment_type: "", due_date: "", }, due_amount: { currency: customerInvoice.currency.toString(), precision: 2, amount: 0, }, custom_fields: [], metadata: { create_time: "", last_updated_time: "", delete_time: "", },*/ }; } }