From d7a604d5b0b28719a7b9df35dbff4c699cb83374 Mon Sep 17 00:00:00 2001 From: nedelcho-delchev-tues Date: Thu, 26 Mar 2026 13:58:53 +0200 Subject: [PATCH] Initial refactor of events and APIs --- .../PurchaseInvoiceItemHandler.ts | 66 ++++++++------ .../PurchaseInvoicePaymentHandler.ts | 71 ++++++++++------ .../SalesInvoiceItemHandler.ts | 66 ++++++++------ .../SalesInvoicePaymentHandler.ts | 69 +++++++++------ .../api/GenerateCreditNoteService.ts | 8 +- .../DebitNote/api/GenerateDebitNoteService.ts | 7 +- .../api/PurchaseInvoiceService.ts | 69 ++++++++++----- .../SalesInvoice/api/SalesInvoiceService.ts | 85 ++++++++++++------- codbex-invoices/widgets/api/InvoiceService.ts | 8 +- 9 files changed, 287 insertions(+), 162 deletions(-) diff --git a/codbex-invoices/events/PurchaseInvoiceItem/PurchaseInvoiceItemHandler.ts b/codbex-invoices/events/PurchaseInvoiceItem/PurchaseInvoiceItemHandler.ts index 9233103..33b0078 100644 --- a/codbex-invoices/events/PurchaseInvoiceItem/PurchaseInvoiceItemHandler.ts +++ b/codbex-invoices/events/PurchaseInvoiceItem/PurchaseInvoiceItemHandler.ts @@ -1,43 +1,59 @@ -import { PurchaseInvoiceRepository } from "../../gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceRepository"; -import { PurchaseInvoiceItemRepository } from "../../gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceItemRepository"; +import { PurchaseInvoiceRepository } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceRepository"; +import { PurchaseInvoiceItemRepository } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceItemRepository"; +import { PurchaseInvoiceItemEntity } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceItemEntity"; +import { EntityEvent, Operator } from "@aerokit/sdk/db"; -export const trigger = (event) => { - const PurchaseInvoiceDao = new PurchaseInvoiceRepository(); - const PurchaseInvoiceItemDao = new PurchaseInvoiceItemRepository(); +const validate = () => { }; + +export const trigger = (event: EntityEvent): void => { + const purchaseInvoiceDao = new PurchaseInvoiceRepository(); + const purchaseInvoiceItemDao = new PurchaseInvoiceItemRepository(); const item = event.entity; - const items = PurchaseInvoiceItemDao.findAll({ - $filter: { - equals: { - PurchaseInvoice: item.PurchaseInvoice + if (!item.PurchaseInvoice) { + return; + } + + const items = purchaseInvoiceItemDao.findAll({ + conditions: [ + { + propertyName: "PurchaseInvoice", + operator: Operator.EQ, + value: item.PurchaseInvoice } - } + ] }); let net = 0; let vat = 0; let gross = 0; - let total = 0; - for (let i = 0; i < items.length; i++) { - if (items[i].Net) { - net += items[i].Net; - vat += items[i].VAT; - gross += items[i].Gross; - } + for (const row of items) { + net += row.Net ?? 0; + vat += row.VAT ?? 0; + gross += row.Gross ?? 0; } - const header = PurchaseInvoiceDao.findById(item.PurchaseInvoice); + const header = purchaseInvoiceDao.findById(item.PurchaseInvoice); + + if (!header) { + return; + } + + const discount = header.Discount ?? 0; + const taxes = header.Taxes ?? 0; - header.Total ??= 0; header.Net = net; header.VAT = vat; header.Gross = gross; + header.Total = gross - (gross * discount / 100) + (gross * taxes / 100) + vat; - total = header.Gross - (header.Gross * header.Discount / 100) + (header.Gross * header.Taxes / 100) + header.VAT; - header.Total = total; - - header.Name = header.Name.substring(0, header.Name.lastIndexOf("/") + 1) + header.Total; + if (header.Name) { + const index = header.Name.lastIndexOf("/"); + if (index >= 0) { + header.Name = header.Name.substring(0, index + 1) + header.Total; + } + } - PurchaseInvoiceDao.update(header); -} \ No newline at end of file + purchaseInvoiceDao.update(header); +}; diff --git a/codbex-invoices/events/PurchaseInvoicePayment/PurchaseInvoicePaymentHandler.ts b/codbex-invoices/events/PurchaseInvoicePayment/PurchaseInvoicePaymentHandler.ts index d8b7fb1..bc0f246 100644 --- a/codbex-invoices/events/PurchaseInvoicePayment/PurchaseInvoicePaymentHandler.ts +++ b/codbex-invoices/events/PurchaseInvoicePayment/PurchaseInvoicePaymentHandler.ts @@ -1,40 +1,59 @@ -import { PurchaseInvoiceRepository } from "../../gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceRepository"; -import { PurchaseInvoicePaymentRepository } from "../../gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoicePaymentRepository"; -import { SupplierPaymentRepository } from "codbex-payments/gen/codbex-payments/dao/SupplierPayment/SupplierPaymentRepository"; - -export const trigger = (event) => { - - const PurchaseInvoiceDao = new PurchaseInvoiceRepository(); - const PurchaseInvoicePaymentDao = new PurchaseInvoicePaymentRepository(); - const SupplierPaymentDao = new SupplierPaymentRepository(); - - let item = event.entity; +import { PurchaseInvoiceRepository } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceRepository"; +import { PurchaseInvoicePaymentRepository } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoicePaymentRepository"; +import { PurchaseInvoicePaymentEntity } from "../../gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoicePaymentEntity"; +import { SupplierPaymentRepository } from "codbex-payments/gen/codbex-payments/data/SupplierPayment/SupplierPaymentRepository"; +import { EntityEvent, Operator } from "@aerokit/sdk/db"; + +export const trigger = (event: EntityEvent): void => { + const purchaseInvoiceDao = new PurchaseInvoiceRepository(); + const purchaseInvoicePaymentDao = new PurchaseInvoicePaymentRepository(); + const supplierPaymentDao = new SupplierPaymentRepository(); + + const item = event.entity; const operation = event.operation; - if (operation == "create") { + if (!item.PurchaseInvoice) { + return; + } - const supplierPayment = SupplierPaymentDao.findById(item.SupplierPayment); + if (operation === "create" && item.SupplierPayment && item.Id) { + const dbItem = purchaseInvoicePaymentDao.findById(item.Id); + if (!dbItem) { + return; + } - item.Amount = Math.min(supplierPayment.Amount, item.Amount); + const supplierPayment = supplierPaymentDao.findById(item.SupplierPayment); + if (!supplierPayment) { + return; + } - PurchaseInvoicePaymentDao.update(item); + dbItem.Amount = Math.min(supplierPayment.Amount ?? 0, dbItem.Amount ?? 0); + purchaseInvoicePaymentDao.update(dbItem); } - const items = PurchaseInvoicePaymentDao.findAll({ - $filter: { - equals: { - PurchaseInvoice: item.PurchaseInvoice + + const items = purchaseInvoicePaymentDao.findAll({ + conditions: [ + { + propertyName: "PurchaseInvoice", + operator: Operator.EQ, + value: item.PurchaseInvoice } - } + ] }); let amount = 0; - items.forEach(item => amount += item.Amount); + for (const row of items) { + amount += row.Amount ?? 0; + } - const purchaseInvoice = PurchaseInvoiceDao.findById(item.PurchaseInvoice); - purchaseInvoice.Paid = amount; - purchaseInvoice.Status = purchaseInvoice.Paid >= purchaseInvoice.Total ? 6 : 5; + const purchaseInvoice = purchaseInvoiceDao.findById(item.PurchaseInvoice); + if (!purchaseInvoice) { + return; + } + purchaseInvoice.Paid = amount; + purchaseInvoice.Status = amount >= (purchaseInvoice.Total ?? 0) ? 6 : 5; - PurchaseInvoiceDao.update(purchaseInvoice); -} + purchaseInvoiceDao.update(purchaseInvoice); +}; diff --git a/codbex-invoices/events/SalesInvoiceItem/SalesInvoiceItemHandler.ts b/codbex-invoices/events/SalesInvoiceItem/SalesInvoiceItemHandler.ts index 9457e5a..6439e81 100644 --- a/codbex-invoices/events/SalesInvoiceItem/SalesInvoiceItemHandler.ts +++ b/codbex-invoices/events/SalesInvoiceItem/SalesInvoiceItemHandler.ts @@ -1,43 +1,57 @@ -import { SalesInvoiceRepository } from "../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { SalesInvoiceItemRepository } from "../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceItemRepository"; - -export const trigger = (event) => { - const SalesInvoiceDao = new SalesInvoiceRepository(); - const SalesInvoiceItemDao = new SalesInvoiceItemRepository(); +import { SalesInvoiceRepository } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; +import { SalesInvoiceItemRepository } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceItemRepository"; +import { SalesInvoiceItemEntity } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceItemEntity"; +import { EntityEvent, Operator } from "@aerokit/sdk/db"; + +export const trigger = (event: EntityEvent): void => { + const salesInvoiceDao = new SalesInvoiceRepository(); + const salesInvoiceItemDao = new SalesInvoiceItemRepository(); const item = event.entity; - const items = SalesInvoiceItemDao.findAll({ - $filter: { - equals: { - SalesInvoice: item.SalesInvoice + if (!item.SalesInvoice) { + return; + } + + const items = salesInvoiceItemDao.findAll({ + conditions: [ + { + propertyName: "SalesInvoice", + operator: Operator.EQ, + value: item.SalesInvoice } - } + ] }); let net = 0; let vat = 0; let gross = 0; - let total = 0; - for (let i = 0; i < items.length; i++) { - if (items[i].Net) { - net += items[i].Net; - vat += items[i].VAT; - gross += items[i].Gross; - } + for (const row of items) { + net += row.Net ?? 0; + vat += row.VAT ?? 0; + gross += row.Gross ?? 0; } - const header = SalesInvoiceDao.findById(item.SalesInvoice); + const header = salesInvoiceDao.findById(item.SalesInvoice); + + if (!header) { + return; + } + + const discount = header.Discount ?? 0; + const taxes = header.Taxes ?? 0; - header.Total ??= 0; header.Net = net; header.VAT = vat; header.Gross = gross; + header.Total = gross - (gross * discount / 100) + (gross * taxes / 100) + vat; - total = header.Gross - (header.Gross * header.Discount / 100) + (header.Gross * header.Taxes / 100) + header.VAT; - header.Total = total; - - header.Name = header.Name.substring(0, header.Name.lastIndexOf("/") + 1) + header.Total; + if (header.Name) { + const index = header.Name.lastIndexOf("/"); + if (index >= 0) { + header.Name = header.Name.substring(0, index + 1) + header.Total; + } + } - SalesInvoiceDao.update(header); -} \ No newline at end of file + salesInvoiceDao.update(header); +}; diff --git a/codbex-invoices/events/SalesInvoicePayment/SalesInvoicePaymentHandler.ts b/codbex-invoices/events/SalesInvoicePayment/SalesInvoicePaymentHandler.ts index e8c4694..8e82346 100644 --- a/codbex-invoices/events/SalesInvoicePayment/SalesInvoicePaymentHandler.ts +++ b/codbex-invoices/events/SalesInvoicePayment/SalesInvoicePaymentHandler.ts @@ -1,39 +1,58 @@ -import { SalesInvoiceRepository } from "../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { SalesInvoicePaymentRepository } from "../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoicePaymentRepository"; -import { CustomerPaymentRepository } from "codbex-payments/gen/codbex-payments/dao/CustomerPayment/CustomerPaymentRepository"; - -export const trigger = (event) => { - - const SalesInvoiceDao = new SalesInvoiceRepository(); - const SalesInvoicePaymentDao = new SalesInvoicePaymentRepository(); - const CustomerPaymentDao = new CustomerPaymentRepository(); - - let item = event.entity; +import { SalesInvoiceRepository } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; +import { SalesInvoicePaymentRepository } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoicePaymentRepository"; +import { SalesInvoicePaymentEntity } from "../../gen/codbex-invoices/data/SalesInvoice/SalesInvoicePaymentEntity"; +import { CustomerPaymentRepository } from "codbex-payments/gen/codbex-payments/data/CustomerPayment/CustomerPaymentRepository"; +import { EntityEvent, Operator } from "@aerokit/sdk/db"; + +export const trigger = (event: EntityEvent): void => { + const salesInvoiceDao = new SalesInvoiceRepository(); + const salesInvoicePaymentDao = new SalesInvoicePaymentRepository(); + const customerPaymentDao = new CustomerPaymentRepository(); + + const item = event.entity; const operation = event.operation; - if (operation == "create") { + if (!item.SalesInvoice) { + return; + } + + if (operation === "create" && item.CustomerPayment) { + const customerPayment = customerPaymentDao.findById(item.CustomerPayment); - const customerPayment = CustomerPaymentDao.findById(item.CustomerPayment); + if (customerPayment && item.Id) { + const dbItem = salesInvoicePaymentDao.findById(item.Id); - item.Amount = Math.min(customerPayment.Amount, item.Amount); + if (!dbItem) { + return; + } - SalesInvoicePaymentDao.update(item); + dbItem.Amount = Math.min(customerPayment.Amount ?? 0, dbItem.Amount ?? 0); + salesInvoicePaymentDao.update(dbItem); + } } - const items = SalesInvoicePaymentDao.findAll({ - $filter: { - equals: { - SalesInvoice: item.SalesInvoice + const items = salesInvoicePaymentDao.findAll({ + conditions: [ + { + propertyName: "SalesInvoice", + operator: Operator.EQ, + value: item.SalesInvoice } - } + ] }); let amount = 0; - items.forEach(item => amount += item.Amount); + for (const row of items) { + amount += row.Amount ?? 0; + } + + const salesInvoice = salesInvoiceDao.findById(item.SalesInvoice); + if (!salesInvoice) { + return; + } - const salesInvoice = SalesInvoiceDao.findById(item.SalesInvoice); salesInvoice.Paid = amount; - salesInvoice.Status = salesInvoice.Paid >= salesInvoice.Total ? 6 : 5; + salesInvoice.Status = amount >= (salesInvoice.Total ?? 0) ? 6 : 5; - SalesInvoiceDao.update(salesInvoice); -} + salesInvoiceDao.update(salesInvoice); +}; diff --git a/codbex-invoices/events/generate/CreditNote/api/GenerateCreditNoteService.ts b/codbex-invoices/events/generate/CreditNote/api/GenerateCreditNoteService.ts index b6ab1dd..3d29181 100644 --- a/codbex-invoices/events/generate/CreditNote/api/GenerateCreditNoteService.ts +++ b/codbex-invoices/events/generate/CreditNote/api/GenerateCreditNoteService.ts @@ -1,9 +1,10 @@ -import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { Controller, Get } from "sdk/http"; +import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; + +import { Controller, Get, Documentation } from "@aerokit/sdk/http"; @Controller +@Documentation("codbex-invoices - Generate Credit Note") class GenerateCreditNoteService { - private readonly salesInvoiceDao; constructor() { @@ -11,6 +12,7 @@ class GenerateCreditNoteService { } @Get("/salesInvoiceData/:salesInvoiceId") + @Documentation("Get Sales Invoice Data") public salesInvoiceData(_: any, ctx: any) { const salesInvoiceId = ctx.pathParameters.salesInvoiceId; const salesInvoice = this.salesInvoiceDao.findById(salesInvoiceId); diff --git a/codbex-invoices/events/generate/DebitNote/api/GenerateDebitNoteService.ts b/codbex-invoices/events/generate/DebitNote/api/GenerateDebitNoteService.ts index fea1b17..715a887 100644 --- a/codbex-invoices/events/generate/DebitNote/api/GenerateDebitNoteService.ts +++ b/codbex-invoices/events/generate/DebitNote/api/GenerateDebitNoteService.ts @@ -1,7 +1,9 @@ -import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { Controller, Get } from "sdk/http"; +import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; + +import { Controller, Get, Documentation } from "@aerokit/sdk/http"; @Controller +@Documentation("codbex-invoices - Generate Debit Note") class GenerateDebitNoteService { private readonly salesInvoiceDao; @@ -10,6 +12,7 @@ class GenerateDebitNoteService { } @Get("/salesInvoiceData/:salesInvoiceId") + @Documentation("Get Sales Invoice Data") public salesInvoiceData(_: any, ctx: any) { const salesInvoiceId = ctx.pathParameters.salesInvoiceId; const salesInvoice = this.salesInvoiceDao.findById(salesInvoiceId); diff --git a/codbex-invoices/print/PurchaseInvoice/api/PurchaseInvoiceService.ts b/codbex-invoices/print/PurchaseInvoice/api/PurchaseInvoiceService.ts index b0274cd..3ca29ea 100644 --- a/codbex-invoices/print/PurchaseInvoice/api/PurchaseInvoiceService.ts +++ b/codbex-invoices/print/PurchaseInvoice/api/PurchaseInvoiceService.ts @@ -1,15 +1,17 @@ -import { PurchaseInvoiceRepository as PurchaseInvoiceDao } from "../../../../codbex-invoices/gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceRepository"; -import { PurchaseInvoiceItemRepository as PurchaseInvoiceItemDao } from "../../../../codbex-invoices/gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceItemRepository"; -import { SupplierRepository as SupplierDao } from "../../../../codbex-partners/gen/codbex-partners/dao/Suppliers/SupplierRepository"; -import { CompanyRepository as CompanyDao } from "../../../../codbex-companies/gen/codbex-companies/dao/Companies/CompanyRepository"; -import { CityRepository as CityDao } from "../../../../codbex-cities/gen/codbex-cities/dao/Settings/CityRepository"; -import { CountryRepository as CountryDao } from "../../../../codbex-countries/gen/codbex-countries/dao/Settings/CountryRepository"; -import { PaymentMethodRepository as PaymentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/dao/Settings/PaymentMethodRepository"; -import { SentMethodRepository as SentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/dao/Settings/SentMethodRepository"; +import { PurchaseInvoiceRepository as PurchaseInvoiceDao } from "../../../../codbex-invoices/gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceRepository"; +import { PurchaseInvoiceItemRepository as PurchaseInvoiceItemDao } from "../../../../codbex-invoices/gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceItemRepository"; +import { SupplierRepository as SupplierDao } from "../../../../codbex-partners/gen/codbex-partners/data/Suppliers/SupplierRepository"; +import { CompanyRepository as CompanyDao } from "../../../../codbex-companies/gen/codbex-companies/data/Companies/CompanyRepository"; +import { CityRepository as CityDao } from "../../../../codbex-cities/gen/codbex-cities/data/Settings/CityRepository"; +import { CountryRepository as CountryDao } from "../../../../codbex-countries/gen/codbex-countries/data/Settings/CountryRepository"; +import { PaymentMethodRepository as PaymentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/data/Settings/PaymentMethodRepository"; +import { SentMethodRepository as SentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/data/Settings/SentMethodRepository"; -import { Controller, Get } from "sdk/http"; +import { Controller, Get, Documentation } from "@aerokit/sdk/http"; +import { Operator } from "@aerokit/sdk/db"; @Controller +@Documentation("codbex-invoices - Print Purchase Invoice") class PurchaseInvoiceService { private readonly purchaseInvoiceDao; @@ -33,36 +35,57 @@ class PurchaseInvoiceService { } @Get("/:purchaseInvoiceId") + @Documentation("Get purchase invoice data for printing") public purchaseInvoiceData(_: any, ctx: any) { const purchaseInvoiceId = ctx.pathParameters.purchaseInvoiceId; - let purchaseInvoice = this.purchaseInvoiceDao.findById(purchaseInvoiceId); + const purchaseInvoice = this.purchaseInvoiceDao.findById(purchaseInvoiceId); + if (!purchaseInvoice) { + return {}; + } - console.log(JSON.stringify(purchaseInvoice)); + const paymentMethod = purchaseInvoice.PaymentMethod + ? this.paymentMethodDao.findById(purchaseInvoice.PaymentMethod) + : undefined; + const sentMethod = purchaseInvoice.SentMethod + ? this.sentMethodDao.findById(purchaseInvoice.SentMethod) + : undefined; - const paymentMethod = this.paymentMethodDao.findById(purchaseInvoice.PaymentMethod); - const sentMethod = this.sentMethodDao.findById(purchaseInvoice.SentMethod); + if (paymentMethod) { + purchaseInvoice.PaymentMethod = paymentMethod.Name; + } - purchaseInvoice.PaymentMethod = paymentMethod.Name; - purchaseInvoice.SentMethod = sentMethod.Name; + if (sentMethod) { + purchaseInvoice.SentMethod = sentMethod.Name; + } const purchaseInvoiceItems = this.purchaseInvoiceItemDao.findAll({ - $filter: { - equals: { - PurchaseInvoice: purchaseInvoice.Id + conditions: [ + { + propertyName: "PurchaseInvoice", + operator: Operator.EQ, + value: purchaseInvoice.Id } - } + ] }); let company; if (purchaseInvoice.Company) { company = this.companyDao.findById(purchaseInvoice.Company); - const city = this.cityDao.findById(company.City); - const country = this.countryDao.findById(company.Country); - company.City = city.Name; - company.Country = country.Name; + if (company) { + const city = company.City ? this.cityDao.findById(company.City) : undefined; + const country = company.Country ? this.countryDao.findById(company.Country) : undefined; + + if (city) { + company.City = city.Name; + } + + if (country) { + company.Country = country.Name; + } + } } const supplier = this.supplierDao.findById(purchaseInvoice.Supplier); diff --git a/codbex-invoices/print/SalesInvoice/api/SalesInvoiceService.ts b/codbex-invoices/print/SalesInvoice/api/SalesInvoiceService.ts index 30b615b..03372c4 100644 --- a/codbex-invoices/print/SalesInvoice/api/SalesInvoiceService.ts +++ b/codbex-invoices/print/SalesInvoice/api/SalesInvoiceService.ts @@ -1,15 +1,17 @@ -import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../codbex-invoices/gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { SalesInvoiceItemRepository as SalesInvoiceItemDao } from "../../../../codbex-invoices/gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceItemRepository"; -import { CustomerRepository as CustomerDao } from "../../../../codbex-partners/gen/codbex-partners/dao/Customers/CustomerRepository"; -import { CompanyRepository as CompanyDao } from "../../../../codbex-companies/gen/codbex-companies/dao/Companies/CompanyRepository"; -import { CityRepository as CityDao } from "../../../../codbex-cities/gen/codbex-cities/dao/Settings/CityRepository"; -import { CountryRepository as CountryDao } from "../../../../codbex-countries/gen/codbex-countries/dao/Settings/CountryRepository"; -import { PaymentMethodRepository as PaymentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/dao/Settings/PaymentMethodRepository"; -import { SentMethodRepository as SentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/dao/Settings/SentMethodRepository"; +import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../../codbex-invoices/gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; +import { SalesInvoiceItemRepository as SalesInvoiceItemDao } from "../../../../codbex-invoices/gen/codbex-invoices/data/SalesInvoice/SalesInvoiceItemRepository"; +import { CustomerRepository as CustomerDao } from "../../../../codbex-partners/gen/codbex-partners/data/Customers/CustomerRepository"; +import { CompanyRepository as CompanyDao } from "../../../../codbex-companies/gen/codbex-companies/data/Companies/CompanyRepository"; +import { CityRepository as CityDao } from "../../../../codbex-cities/gen/codbex-cities/data/Settings/CityRepository"; +import { CountryRepository as CountryDao } from "../../../../codbex-countries/gen/codbex-countries/data/Settings/CountryRepository"; +import { PaymentMethodRepository as PaymentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/data/Settings/PaymentMethodRepository"; +import { SentMethodRepository as SentMethodDao } from "../../../../codbex-methods/gen/codbex-methods/data/Settings/SentMethodRepository"; -import { Controller, Get } from "sdk/http"; +import { Controller, Get, Documentation } from "@aerokit/sdk/http"; +import { Operator } from "@aerokit/sdk/db"; @Controller +@Documentation("codbex-invoices - Print Sales Invoice") class SalesInvoiceService { private readonly salesInvoiceDao; @@ -33,43 +35,68 @@ class SalesInvoiceService { } @Get("/:salesInvoiceId") + @Documentation("Get sales invoice data for printing") public salesInvoiceData(_: any, ctx: any) { const salesInvoiceId = ctx.pathParameters.salesInvoiceId; - let salesInvoice = this.salesInvoiceDao.findById(salesInvoiceId); + const salesInvoice = this.salesInvoiceDao.findById(salesInvoiceId); + if (!salesInvoice) { + return {}; + } + + const paymentMethod = salesInvoice.PaymentMethod + ? this.paymentMethodDao.findById(salesInvoice.PaymentMethod) + : undefined; + const sentMethod = salesInvoice.SentMethod + ? this.sentMethodDao.findById(salesInvoice.SentMethod) + : undefined; - const paymentMethod = this.paymentMethodDao.findById(salesInvoice.PaymentMethod); - const sentMethod = this.sentMethodDao.findById(salesInvoice.SentMethod); + if (paymentMethod) { + salesInvoice.PaymentMethod = paymentMethod.Name; + } - salesInvoice.PaymentMethod = paymentMethod.Name; - salesInvoice.SentMethod = sentMethod.Name; + if (sentMethod) { + salesInvoice.SentMethod = sentMethod.Name; + } const salesInvoiceItems = this.salesInvoiceItemDao.findAll({ - $filter: { - equals: { - SalesInvoice: salesInvoice.Id + conditions: [ + { + propertyName: "SalesInvoice", + operator: Operator.EQ, + value: salesInvoice.Id } - } + ] }); let company; if (salesInvoice.Company) { company = this.companyDao.findById(salesInvoice.Company); - const city = this.cityDao.findById(company.City); - const country = this.countryDao.findById(company.Country); - company.City = city.Name; - company.Country = country.Name; + if (company) { + const city = company.City ? this.cityDao.findById(company.City) : undefined; + const country = company.Country ? this.countryDao.findById(company.Country) : undefined; + + if (city) { + company.City = city.Name; + } + + if (country) { + company.Country = country.Name; + } + } } - const customer = this.customerDao.findById(salesInvoice.Customer); + const customer = salesInvoice.Customer + ? this.customerDao.findById(salesInvoice.Customer) + : undefined; return { - salesInvoice: salesInvoice, - salesInvoiceItems: salesInvoiceItems, - customer: customer, - company: company - } + salesInvoice, + salesInvoiceItems, + customer, + company + }; } -} \ No newline at end of file +} diff --git a/codbex-invoices/widgets/api/InvoiceService.ts b/codbex-invoices/widgets/api/InvoiceService.ts index 203872c..b669131 100644 --- a/codbex-invoices/widgets/api/InvoiceService.ts +++ b/codbex-invoices/widgets/api/InvoiceService.ts @@ -1,9 +1,10 @@ -import { SalesInvoiceRepository as SalesInvoiceDao } from "../../gen/codbex-invoices/dao/SalesInvoice/SalesInvoiceRepository"; -import { PurchaseInvoiceRepository as PurchaseInvoiceDao } from "../../gen/codbex-invoices/dao/PurchaseInvoice/PurchaseInvoiceRepository"; +import { SalesInvoiceRepository as SalesInvoiceDao } from "../../../codbex-invoices/gen/codbex-invoices/data/SalesInvoice/SalesInvoiceRepository"; +import { PurchaseInvoiceRepository as PurchaseInvoiceDao } from "../../../codbex-invoices/gen/codbex-invoices/data/PurchaseInvoice/PurchaseInvoiceRepository"; -import { Controller, Get } from "sdk/http"; +import { Controller, Get, Documentation } from "@aerokit/sdk/http"; @Controller +@Documentation("codbex-invoices - Widgets API") class InvoiceService { private readonly salesInvoiceDao; @@ -15,6 +16,7 @@ class InvoiceService { } @Get("/invoiceData") + @Documentation("Invoice data for widgets") public invoiceData() { let salesInvoiceTotal: number = 0.0;