diff --git a/.vscode/launch.json b/.vscode/launch.json index 2adefbe7..16595628 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,5 +1,5 @@ { - "version": "0.5.0", + "version": "0.6.0", "configurations": [ { "name": "WEB: Vite (Chrome)", diff --git a/apps/server/package.json b/apps/server/package.json index 6a4df230..10677686 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -1,6 +1,6 @@ { "name": "@erp/factuges-server", - "version": "0.5.0", + "version": "0.6.0", "private": true, "scripts": { "build": "tsup src/index.ts --config tsup.config.ts", @@ -37,8 +37,6 @@ "@erp/core": "workspace:*", "@erp/customer-invoices": "workspace:*", "@erp/customers": "workspace:*", - "@erp/factuges": "workspace:*", - "@erp/suppliers": "workspace:*", "@repo/rdx-logger": "workspace:*", "@repo/rdx-utils": "workspace:*", "bcrypt": "^6.0.0", diff --git a/apps/server/src/register-modules.ts b/apps/server/src/register-modules.ts index 4edc28b5..8c899c52 100644 --- a/apps/server/src/register-modules.ts +++ b/apps/server/src/register-modules.ts @@ -1,7 +1,7 @@ import customerInvoicesAPIModule from "@erp/customer-invoices/api"; import customersAPIModule from "@erp/customers/api"; -import factuGESAPIModule from "@erp/factuges/api"; -import suppliersAPIModule from "@erp/suppliers/api"; + +//import suppliersAPIModule from "@erp/suppliers/api"; import { registerModule } from "./lib"; @@ -9,6 +9,5 @@ export const registerModules = () => { //registerModule(authAPIModule); registerModule(customersAPIModule); registerModule(customerInvoicesAPIModule); - registerModule(factuGESAPIModule); - registerModule(suppliersAPIModule); + //registerModule(suppliersAPIModule); }; diff --git a/apps/web/package.json b/apps/web/package.json index 06c51be4..e04675ec 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,7 +1,7 @@ { "name": "@erp/factuges-web", "private": true, - "version": "0.5.0", + "version": "0.6.0", "type": "module", "scripts": { "dev": "vite --host --clearScreen false", diff --git a/apps/web/tsconfig.app.json b/apps/web/tsconfig.app.json index 560c0385..565b8632 100644 --- a/apps/web/tsconfig.app.json +++ b/apps/web/tsconfig.app.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": ".", "paths": { "@/*": ["./src/*"] }, diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 3acc7c41..19c9df7a 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -4,7 +4,6 @@ "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true, - "baseUrl": ".", "paths": { "@/*": ["./src/*"] } diff --git a/modules/auth/package.json b/modules/auth/package.json index 68a5ad32..6032b898 100644 --- a/modules/auth/package.json +++ b/modules/auth/package.json @@ -1,6 +1,6 @@ { "name": "@erp/auth", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/auth/tsconfig.json b/modules/auth/tsconfig.json index 38385361..58f8d90a 100644 --- a/modules/auth/tsconfig.json +++ b/modules/auth/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/auth/*": ["./src/*"] }, diff --git a/modules/core/package.json b/modules/core/package.json index 9b75d424..626b13f0 100644 --- a/modules/core/package.json +++ b/modules/core/package.json @@ -1,6 +1,6 @@ { "name": "@erp/core", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/core/src/web/lib/helpers/date-func.ts b/modules/core/src/web/lib/helpers/date-func.ts deleted file mode 100644 index 918d6a8e..00000000 --- a/modules/core/src/web/lib/helpers/date-func.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const formatDate = (value: string) => { - return new Date(value).toLocaleDateString(); -}; diff --git a/modules/core/src/web/lib/helpers/index.ts b/modules/core/src/web/lib/helpers/index.ts index 3634925d..17e42d8e 100644 --- a/modules/core/src/web/lib/helpers/index.ts +++ b/modules/core/src/web/lib/helpers/index.ts @@ -1,3 +1,2 @@ -export * from "./date-func"; export * from "./form-utils"; export * from "./http-url-utils"; diff --git a/modules/core/tsconfig.json b/modules/core/tsconfig.json index 00dfcb5e..0c4ef2ea 100644 --- a/modules/core/tsconfig.json +++ b/modules/core/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/core/*": ["./src/*"] }, diff --git a/modules/customer-invoices/package.json b/modules/customer-invoices/package.json index 05c9105b..aa94c4fd 100644 --- a/modules/customer-invoices/package.json +++ b/modules/customer-invoices/package.json @@ -1,6 +1,6 @@ { "name": "@erp/customer-invoices", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/customer-invoices/src/api/application/issued-invoices/services/issued-invoice-number-generator.interface.ts b/modules/customer-invoices/src/api/application/issued-invoices/services/issued-invoice-number-generator.interface.ts index d2deb316..5b51c592 100644 --- a/modules/customer-invoices/src/api/application/issued-invoices/services/issued-invoice-number-generator.interface.ts +++ b/modules/customer-invoices/src/api/application/issued-invoices/services/issued-invoice-number-generator.interface.ts @@ -1,5 +1,5 @@ import type { UniqueID } from "@repo/rdx-ddd"; -import type { Maybe, Result } from "@repo/rdx-utils"; +import type { Result } from "@repo/rdx-utils"; import type { InvoiceNumber, InvoiceSerie } from "../../../domain"; @@ -13,7 +13,7 @@ export interface IIssuedInvoiceNumberGenerator { */ getNextForCompany( companyId: UniqueID, - series: Maybe, + series: InvoiceSerie, transaction: unknown ): Promise>; } diff --git a/modules/customer-invoices/src/api/application/issued-invoices/services/proforma-to-issued-invoice-props-converter.ts b/modules/customer-invoices/src/api/application/issued-invoices/services/proforma-to-issued-invoice-props-converter.ts index e229e5d2..21b8c7e8 100644 --- a/modules/customer-invoices/src/api/application/issued-invoices/services/proforma-to-issued-invoice-props-converter.ts +++ b/modules/customer-invoices/src/api/application/issued-invoices/services/proforma-to-issued-invoice-props-converter.ts @@ -98,15 +98,15 @@ export class ProformaToIssuedInvoiceConverter implements IProformaToIssuedInvoic companyId: proforma.companyId, status: InvoiceStatus.issued(), - series: proforma.series, - proformaId: proforma.id, + series: proforma.series.getOrUndefined()!, + linkedProformaId: proforma.id, invoiceNumber: proforma.invoiceNumber, invoiceDate: UtcDate.today(), // La fecha de la factura es la fecha de emisión, no la de la proforma operationDate: proforma.operationDate, - description: proforma.description, + description: proforma.description.getOrUndefined()!, languageCode: proforma.languageCode, currencyCode: proforma.currencyCode, @@ -116,7 +116,7 @@ export class ProformaToIssuedInvoiceConverter implements IProformaToIssuedInvoic paymentMethod: proforma.paymentMethod, customerId: proforma.customerId, - recipient: proforma.recipient, + recipient: proforma.recipient.getOrUndefined()!, items: issuedItems, diff --git a/modules/customer-invoices/src/api/application/issued-invoices/snapshot-builders/full/issued-invoice-full-snapshot-builder.ts b/modules/customer-invoices/src/api/application/issued-invoices/snapshot-builders/full/issued-invoice-full-snapshot-builder.ts index db13b6c9..7b906d65 100644 --- a/modules/customer-invoices/src/api/application/issued-invoices/snapshot-builders/full/issued-invoice-full-snapshot-builder.ts +++ b/modules/customer-invoices/src/api/application/issued-invoices/snapshot-builders/full/issued-invoice-full-snapshot-builder.ts @@ -53,9 +53,7 @@ export class IssuedInvoiceFullSnapshotBuilder implements IIssuedInvoiceFullSnaps customer_id: invoice.customerId.toString(), recipient, - linked_proforma_id: maybeToNullable(invoice.linkedProformaId, (linkedId) => - linkedId.toString() - ), + linked_proforma_id: invoice.linkedProformaId.toString(), taxes, diff --git a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/index.ts b/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/index.ts index 82158c8d..0e8d775a 100644 --- a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/index.ts +++ b/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/index.ts @@ -1,2 +1 @@ -export * from "./proforma-summary-snapshot.interface"; export * from "./proforma-summary-snapshot-builder"; diff --git a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot-builder.ts b/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot-builder.ts index 530aae43..bc836a80 100644 --- a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot-builder.ts +++ b/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot-builder.ts @@ -1,15 +1,14 @@ import type { ISnapshotBuilder } from "@erp/core/api"; import { maybeToEmptyString, maybeToNullable } from "@repo/rdx-ddd"; +import type { ProformaSummaryDTO } from "../../../../../common"; import type { ProformaSummary } from "../../models"; -import type { IProformaSummarySnapshot } from "./proforma-summary-snapshot.interface"; - export interface IProformaSummarySnapshotBuilder - extends ISnapshotBuilder {} + extends ISnapshotBuilder {} export class ProformaSummarySnapshotBuilder implements IProformaSummarySnapshotBuilder { - toOutput(proforma: ProformaSummary): IProformaSummarySnapshot { + toOutput(proforma: ProformaSummary): ProformaSummaryDTO { const recipient = proforma.recipient.toObjectString(); return { @@ -18,7 +17,7 @@ export class ProformaSummarySnapshotBuilder implements IProformaSummarySnapshotB is_proforma: proforma.isProforma, invoice_number: proforma.invoiceNumber.toString(), - status: proforma.status.toPrimitive(), + status: proforma.status.toPrimitive() as ProformaSummaryDTO["status"], series: maybeToNullable(proforma.series, (value) => value.toString()), invoice_date: proforma.invoiceDate.toDateString(), diff --git a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot.interface.ts b/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot.interface.ts deleted file mode 100644 index 4bf481a1..00000000 --- a/modules/customer-invoices/src/api/application/proformas/snapshot-builders/summary/proforma-summary-snapshot.interface.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Fijarse en ListProformasResponseDTO["items"] - */ -export interface IProformaSummarySnapshot { - id: string; - company_id: string; - is_proforma: boolean; - - invoice_number: string; - status: string; - series: string | null; - - invoice_date: string; - operation_date: string | null; - - language_code: string; - currency_code: string; - - reference: string | null; - description: string | null; - - customer_id: string; - recipient: { - id: string; - tin: string; - name: string; - street: string | null; - street2: string | null; - city: string | null; - postal_code: string | null; - province: string | null; - country: string | null; - }; - - subtotal_amount: { value: string; scale: string; currency_code: string }; - total_discount_amount: { value: string; scale: string; currency_code: string }; - taxable_amount: { value: string; scale: string; currency_code: string }; - taxes_amount: { value: string; scale: string; currency_code: string }; - total_amount: { value: string; scale: string; currency_code: string }; - - linked_invoice_id: string | null; -} diff --git a/modules/customer-invoices/src/api/domain/issued-invoices/aggregates/issued-invoice.aggregate.ts b/modules/customer-invoices/src/api/domain/issued-invoices/aggregates/issued-invoice.aggregate.ts index 9443f84b..4a7854a5 100644 --- a/modules/customer-invoices/src/api/domain/issued-invoices/aggregates/issued-invoice.aggregate.ts +++ b/modules/customer-invoices/src/api/domain/issued-invoices/aggregates/issued-invoice.aggregate.ts @@ -32,7 +32,7 @@ export interface IIssuedInvoiceCreateProps { companyId: UniqueID; status: InvoiceStatus; - linkedProformaId: Maybe; // <- id de la proforma padre en caso de issue + linkedProformaId: UniqueID; // <- id de la proforma padre en caso de issue series: InvoiceSerie; invoiceNumber: InvoiceNumber; @@ -178,7 +178,7 @@ export class IssuedInvoice return this.props.customerId; } - public get linkedProformaId(): Maybe { + public get linkedProformaId(): UniqueID { return this.props.linkedProformaId; } diff --git a/modules/customer-invoices/src/api/domain/proformas/aggregates/proforma.aggregate.ts b/modules/customer-invoices/src/api/domain/proformas/aggregates/proforma.aggregate.ts index 33ac50ae..c7adc930 100644 --- a/modules/customer-invoices/src/api/domain/proformas/aggregates/proforma.aggregate.ts +++ b/modules/customer-invoices/src/api/domain/proformas/aggregates/proforma.aggregate.ts @@ -304,6 +304,97 @@ export class Proforma extends AggregateRoot implements IP ); } + if (this.series.isNone()) { + return Result.fail( + new DomainValidationError( + "MISSING_SERIES", + "series", + "Series is required to issue the proforma" + ) + ); + } + + if (this.description.isNone()) { + return Result.fail( + new DomainValidationError( + "MISSING_DESCRIPTION", + "description", + "Description is required to issue the proforma" + ) + ); + } + + if (this.recipient.isNone()) { + return Result.fail( + new DomainValidationError( + "MISSING_RECIPIENT", + "recipient", + "Recipient is required to issue the proforma" + ) + ); + } + + if (this.items.size() === 0) { + return Result.fail( + new DomainValidationError( + "NO_ITEMS", + "items", + "At least one item is required to issue the proforma" + ) + ); + } + + const invalidItem = this.items.find((item) => !item.isValued()); + if (invalidItem) { + return Result.fail( + new DomainValidationError( + "INVALID_ITEM", + "items", + `Item at position ${invalidItem.id} is not valid for invoicing` + ) + ); + } + + if (this.paymentMethod.isNone()) { + return Result.fail( + new DomainValidationError( + "MISSING_PAYMENT_METHOD", + "paymentMethod", + "Payment method is required to issue the proforma" + ) + ); + } + + /*if (this.operationDate.isSome() && this.operationDate.unwrap() > new Date()) { + return Result.fail( + new DomainValidationError( + "INVALID_OPERATION_DATE", + "operationDate", + "Operation date cannot be in the future" + ) + ); + } + + if (this.operationDate.isSome() && this.operationDate.unwrap() < this.invoiceDate) { + return Result.fail( + new DomainValidationError( + "INVALID_OPERATION_DATE", + "operationDate", + "Operation date cannot be before invoice date" + ) + ); + }*/ + + if (this.linkedInvoiceId.isSome()) { + return Result.fail( + new DomainValidationError( + "LINKED_INVOICE_NOT_ALLOWED", + "linkedInvoiceId", + "Proforma cannot be linked to an invoice" + ) + ); + } + this.props.status = InvoiceStatus.issued(); return Result.ok(); } diff --git a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-domain.mapper.ts b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-domain.mapper.ts index d9df9f9e..b75c4705 100644 --- a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-domain.mapper.ts +++ b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-domain.mapper.ts @@ -64,7 +64,7 @@ export class SequelizeIssuedInvoiceDomainMapper extends SequelizeDomainMapper< const customerId = extractOrPushError(UniqueID.create(raw.customer_id), "customer_id", errors); const linkedProformaId = extractOrPushError( - maybeFromNullableResult(raw.proforma_id, (v) => UniqueID.create(String(v))), + UniqueID.create(String(raw.proforma_id)), "proforma_id", errors ); @@ -435,6 +435,7 @@ export class SequelizeIssuedInvoiceDomainMapper extends SequelizeDomainMapper< } // 3) Cliente + console.debug(source.recipient); const recipient = this._recipientMapper.mapToPersistence(source.recipient, { errors, parent: source, @@ -450,6 +451,7 @@ export class SequelizeIssuedInvoiceDomainMapper extends SequelizeDomainMapper< // 5) Si hubo errores de mapeo, devolvemos colección de validación if (errors.length > 0) { + console.error("Errors mapping issued invoice to persistence:", errors); return Result.fail( new ValidationErrorCollection("Customer invoice mapping to persistence failed", errors) ); @@ -467,7 +469,7 @@ export class SequelizeIssuedInvoiceDomainMapper extends SequelizeDomainMapper< // Flags / estado / serie / número is_proforma: false, status: source.status.toPrimitive(), - proforma_id: maybeToNullable(source.linkedProformaId, (v) => v.toPrimitive()), + proforma_id: source.linkedProformaId.toPrimitive(), series: source.series.toPrimitive(), invoice_number: source.invoiceNumber.toPrimitive(), diff --git a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-recipient-domain.mapper.ts b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-recipient-domain.mapper.ts index 78f5d1d2..6d216c54 100644 --- a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-recipient-domain.mapper.ts +++ b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/mappers/domain/sequelize-issued-invoice-recipient-domain.mapper.ts @@ -15,11 +15,7 @@ import { } from "@repo/rdx-ddd"; import { Result } from "@repo/rdx-utils"; -import { - type IIssuedInvoiceCreateProps, - InvoiceRecipient, - type IssuedInvoice, -} from "../../../../../../domain"; +import { type IIssuedInvoiceCreateProps, InvoiceRecipient } from "../../../../../../domain"; import type { CustomerInvoiceModel } from "../../../../../common"; export class SequelizeIssuedInvoiceRecipientDomainMapper { @@ -118,27 +114,10 @@ export class SequelizeIssuedInvoiceRecipientDomainMapper { * En caso contrario, se agrega un error de validación. */ mapToPersistence(source: InvoiceRecipient, params?: MapperParamsType) { - const { errors, parent } = params as { + /*const { errors, parent } = params as { parent: IssuedInvoice; errors: ValidationErrorDetail[]; - }; - - const { hasRecipient } = parent; - - // Validación: facturas emitidas deben tener destinatario. - if (!hasRecipient) { - errors.push({ - path: "recipient", - message: "[InvoiceRecipientDomainMapper] Issued customer invoice without recipient data", - }); - } - - // Si hay errores previos, devolvemos fallo de validación inmediatamente. - if (errors.length > 0) { - return Result.fail( - new ValidationErrorCollection("Customer invoice mapping to persistence failed", errors) - ); - } + };*/ const recipient = source; diff --git a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/services/sequelize-issued-invoice-number-generator.service.ts b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/services/sequelize-issued-invoice-number-generator.service.ts index 77bfb192..1bbb7428 100644 --- a/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/services/sequelize-issued-invoice-number-generator.service.ts +++ b/modules/customer-invoices/src/api/infrastructure/issued-invoices/persistence/sequelize/services/sequelize-issued-invoice-number-generator.service.ts @@ -1,5 +1,5 @@ import type { UniqueID } from "@repo/rdx-ddd"; -import { type Maybe, Result } from "@repo/rdx-utils"; +import { Result } from "@repo/rdx-utils"; import { type Transaction, type WhereOptions, literal } from "sequelize"; import type { IIssuedInvoiceNumberGenerator } from "../../../../../application/issued-invoices"; @@ -12,7 +12,7 @@ import { CustomerInvoiceModel } from "../../../../common/persistence"; export class SequelizeIssuedInvoiceNumberGenerator implements IIssuedInvoiceNumberGenerator { public async getNextForCompany( companyId: UniqueID, - series: Maybe, + series: InvoiceSerie, transaction: Transaction ): Promise> { const where: WhereOptions = { @@ -20,14 +20,7 @@ export class SequelizeIssuedInvoiceNumberGenerator implements IIssuedInvoiceNumb is_proforma: false, }; - series.match( - (serieVO) => { - where.series = serieVO.toString(); - }, - () => { - where.series = null; - } - ); + where.series = series.toString(); try { const lastInvoice = await CustomerInvoiceModel.findOne({ diff --git a/modules/customer-invoices/src/common/dto/response/proformas/list-proformas.response.dto.ts b/modules/customer-invoices/src/common/dto/response/proformas/list-proformas.response.dto.ts index a44fb5db..6b1d611b 100644 --- a/modules/customer-invoices/src/common/dto/response/proformas/list-proformas.response.dto.ts +++ b/modules/customer-invoices/src/common/dto/response/proformas/list-proformas.response.dto.ts @@ -1,46 +1,8 @@ -import { - CurrencyCodeSchema, - IsoDateSchema, - LanguageCodeSchema, - MoneySchema, - PercentageSchema, - createPaginatedListSchema, -} from "@erp/core"; -import { z } from "zod/v4"; +import { createPaginatedListSchema } from "@erp/core"; +import type { z } from "zod/v4"; -import { ProformaRecipientSummarySchema, ProformaStatusSchema } from "../../shared/proforma"; +import { ProformaSummarySchema } from "../../shared/proforma"; -export const ListProformasResponseSchema = createPaginatedListSchema( - z.object({ - id: z.uuid(), - company_id: z.uuid(), - is_proforma: z.boolean(), - - invoice_number: z.string(), - status: ProformaStatusSchema, - series: z.string().nullable(), - - invoice_date: IsoDateSchema, - operation_date: IsoDateSchema.nullable(), - - language_code: LanguageCodeSchema, - currency_code: CurrencyCodeSchema, - - reference: z.string().nullable(), - description: z.string().nullable(), - - customer_id: z.uuid(), - recipient: ProformaRecipientSummarySchema, - - subtotal_amount: MoneySchema, - discount_percentage: PercentageSchema, - discount_amount: MoneySchema, - taxable_amount: MoneySchema, - taxes_amount: MoneySchema, - total_amount: MoneySchema, - - linked_invoice_id: z.uuid().nullable(), - }) -); +export const ListProformasResponseSchema = createPaginatedListSchema(ProformaSummarySchema); export type ListProformasResponseDTO = z.infer; diff --git a/modules/customer-invoices/src/common/dto/shared/proforma/index.ts b/modules/customer-invoices/src/common/dto/shared/proforma/index.ts index 5e4f6629..b444fefd 100644 --- a/modules/customer-invoices/src/common/dto/shared/proforma/index.ts +++ b/modules/customer-invoices/src/common/dto/shared/proforma/index.ts @@ -1,3 +1,4 @@ export * from "./proforma-item-detail.dto"; export * from "./proforma-recipient-summary.dto"; export * from "./proforma-status.dto"; +export * from "./proforma-summary.dto"; diff --git a/modules/customer-invoices/src/common/dto/shared/proforma/proforma-summary.dto.ts b/modules/customer-invoices/src/common/dto/shared/proforma/proforma-summary.dto.ts new file mode 100644 index 00000000..7e3c670a --- /dev/null +++ b/modules/customer-invoices/src/common/dto/shared/proforma/proforma-summary.dto.ts @@ -0,0 +1,37 @@ +import { CurrencyCodeSchema, IsoDateSchema, LanguageCodeSchema, MoneySchema } from "@erp/core"; +import { z } from "zod/v4"; + +import { ProformaRecipientSummarySchema } from "./proforma-recipient-summary.dto"; +import { ProformaStatusSchema } from "./proforma-status.dto"; + +export const ProformaSummarySchema = z.object({ + id: z.uuid(), + company_id: z.uuid(), + is_proforma: z.boolean(), + + invoice_number: z.string(), + status: ProformaStatusSchema, + series: z.string().nullable(), + + invoice_date: IsoDateSchema, + operation_date: IsoDateSchema.nullable(), + + language_code: LanguageCodeSchema, + currency_code: CurrencyCodeSchema, + + reference: z.string().nullable(), + description: z.string().nullable(), + + customer_id: z.uuid(), + recipient: ProformaRecipientSummarySchema, + + subtotal_amount: MoneySchema, + total_discount_amount: MoneySchema, + taxable_amount: MoneySchema, + taxes_amount: MoneySchema, + total_amount: MoneySchema, + + linked_invoice_id: z.uuid().nullable(), +}); + +export type ProformaSummaryDTO = z.infer; diff --git a/modules/customer-invoices/src/web/issued-invoices/list/ui/blocks/issued-invoices-grid/use-issued-invoices-grid-columns.tsx b/modules/customer-invoices/src/web/issued-invoices/list/ui/blocks/issued-invoices-grid/use-issued-invoices-grid-columns.tsx index cf1ebd32..be44b406 100644 --- a/modules/customer-invoices/src/web/issued-invoices/list/ui/blocks/issued-invoices-grid/use-issued-invoices-grid-columns.tsx +++ b/modules/customer-invoices/src/web/issued-invoices/list/ui/blocks/issued-invoices-grid/use-issued-invoices-grid-columns.tsx @@ -1,4 +1,4 @@ -import { formatDate } from "@erp/core/client"; +import { DateHelper } from "@erp/core"; import { ReactQRCode } from "@lglab/react-qr-code"; import { DataTableColumnHeader } from "@repo/rdx-ui/components"; import { @@ -205,7 +205,7 @@ export function useIssuedInvoicesGridColumns( ), cell: ({ row }) => (
- {formatDate(row.original.invoiceDate)} + {DateHelper.format(row.original.invoiceDate)}
), enableSorting: false, @@ -227,7 +227,7 @@ export function useIssuedInvoicesGridColumns( ), cell: ({ row }) => (
- {formatDate(row.original.operationDate)} + {DateHelper.format(row.original.operationDate)}
), enableSorting: false, @@ -284,6 +284,27 @@ export function useIssuedInvoicesGridColumns( }, }, + // Taxable amount + { + accessorKey: "taxableAmountFmt", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( +
{row.original.taxableAmountFmt}
+ ), + enableSorting: false, + size: 120, + minSize: 100, + meta: { + title: t("pages.issued_invoices.list.grid_columns.taxable_amount"), + }, + }, + // Taxes amount { accessorKey: "taxes_amount_fmt", diff --git a/modules/customer-invoices/src/web/proformas/list/ui/blocks/proformas-grid/use-proforma-grid-columns.tsx b/modules/customer-invoices/src/web/proformas/list/ui/blocks/proformas-grid/use-proforma-grid-columns.tsx index 3f2149cd..faef8e99 100644 --- a/modules/customer-invoices/src/web/proformas/list/ui/blocks/proformas-grid/use-proforma-grid-columns.tsx +++ b/modules/customer-invoices/src/web/proformas/list/ui/blocks/proformas-grid/use-proforma-grid-columns.tsx @@ -1,3 +1,4 @@ +import { DateHelper } from "@erp/core"; import { Button, Tooltip, @@ -159,6 +160,10 @@ export function useProformasGridColumns( accessorKey: "series", header: "Serie", }, + { + accessorKey: "reference", + header: "Referencia", + }, { accessorKey: "invoiceDate", header: ({ column }) => { @@ -173,6 +178,17 @@ export function useProformasGridColumns( ); }, + cell: ({ row }) => ( +
+ {DateHelper.format(row.original.invoiceDate)} +
+ ), + enableSorting: false, + size: 140, + minSize: 120, + meta: { + title: t("pages.issued_invoices.list.grid_columns.invoice_date"), + }, }, { accessorKey: "operationDate", @@ -193,30 +209,43 @@ export function useProformasGridColumns( accessorKey: "subtotalAmountFmt", header: () =>
Subtotal
, cell: ({ row }) => ( -
{row.getValue("subtotalAmountFmt")}
+
+ {row.getValue("subtotalAmountFmt")} +
), }, { - accessorKey: "discountAmountFmt", + accessorKey: "totalDiscountAmountFmt", header: () =>
Descuentos
, cell: ({ row }) => ( -
{row.getValue("discountAmountFmt")}
+
+ {row.getValue("totalDiscountAmountFmt")} +
+ ), + }, + { + accessorKey: "taxableAmountFmt", + header: () =>
Base imponible
, + cell: ({ row }) => ( +
+ {row.getValue("taxableAmountFmt")} +
), }, { accessorKey: "taxesAmountFmt", header: () =>
Impuestos
, cell: ({ row }) => ( -
{row.getValue("taxesAmountFmt")}
+
+ {row.getValue("taxesAmountFmt")} +
), }, { accessorKey: "totalAmountFmt", header: () =>
Importe total
, cell: ({ row }) => ( -
- {row.getValue("totalAmountFmt")} -
+
{row.getValue("totalAmountFmt")}
), }, { diff --git a/modules/customer-invoices/src/web/proformas/shared/adapters/list-proformas.adapter.ts b/modules/customer-invoices/src/web/proformas/shared/adapters/list-proformas.adapter.ts index f7367269..8cd9e349 100644 --- a/modules/customer-invoices/src/web/proformas/shared/adapters/list-proformas.adapter.ts +++ b/modules/customer-invoices/src/web/proformas/shared/adapters/list-proformas.adapter.ts @@ -1,28 +1,52 @@ -import { MoneyDTOHelper, PercentageDTOHelper, formatCurrency } from "@erp/core"; +import { MoneyDTOHelper, formatCurrency } from "@erp/core"; import type { ListProformasResponseDTO } from "../../../../common"; +import type { ListProformasResult } from "../api"; import type { ProformaList, ProformaListRow, ProformaStatus } from "../entities"; +/** + * Adaptador para transformar los datos de la API de ListProformasResponseDTO + * a la entidad ProformaList utilizada en la aplicación. + * Reglas de adaptación: + * - page, per_page, total_pages, total_items se asignan directamente. + * - items se transforma utilizando ProformaListRowAdapter para cada elemento. + * + * @param pageDto - lista de proformas desde la API. + * @param context - Contexto adicional opcional para la adaptación. + * @returns {ProformaList} Objeto adaptado a ProformaList. + */ + export const ListProformasAdapter = { - fromDto(dto: ListProformasResponseDTO): ProformaList { + fromDto(dto: ListProformasResult, context?: unknown): ProformaList { return { - items: dto.items.map(ProformaListRowAdapter.fromDto), page: dto.page, perPage: dto.per_page, totalPages: dto.total_pages, totalItems: dto.total_items, + items: dto.items.map((rowDto) => ProformaListRowAdapter.fromDto(rowDto, context)), }; }, }; -type ListProformasItemDTO = ListProformasResponseDTO["items"][number]; +/** + * Adaptador para transformar los items de la API de ListProformasResult a la entidad ProformaListRow. + * Reglas de adaptación: + * - id, company_id, status, reference se asignan directamente. + * - is_proforma se convierte a booleano (true si es "1", false si es "0"). + * + * @param rowDto - item de proforma desde la API. + * @param context - Contexto adicional opcional para la adaptación. + * @returns {ProformaListRow} Objeto adaptado a ProformaListRow. + */ + +type ListProformasItemOutput = ListProformasResponseDTO["items"][number]; const ProformaListRowAdapter = { - fromDto(dto: ListProformasItemDTO): ProformaListRow { + fromDto(dto: ListProformasItemOutput, context?: unknown): ProformaListRow { return { id: dto.id, companyId: dto.company_id, - isProforma: dto.is_proforma === "1", + isProforma: dto.is_proforma, invoiceNumber: dto.invoice_number, status: dto.status as ProformaStatus, @@ -57,12 +81,9 @@ const ProformaListRowAdapter = { dto.language_code ), - discountPercentage: PercentageDTOHelper.toNumber(dto.discount_percentage), - discountPercentageFmt: PercentageDTOHelper.toNumericString(dto.discount_percentage), - - discountAmount: MoneyDTOHelper.toNumber(dto.discount_amount), - discountAmountFmt: formatCurrency( - MoneyDTOHelper.toNumber(dto.discount_amount), + totalDiscountAmount: MoneyDTOHelper.toNumber(dto.total_discount_amount), + totalDiscountAmountFmt: formatCurrency( + MoneyDTOHelper.toNumber(dto.total_discount_amount), Number(dto.total_amount.scale || 2), dto.currency_code, dto.language_code diff --git a/modules/customer-invoices/src/web/proformas/shared/entities/proforma-list-row.entity.ts b/modules/customer-invoices/src/web/proformas/shared/entities/proforma-list-row.entity.ts index 2ae04919..cafaa4d7 100644 --- a/modules/customer-invoices/src/web/proformas/shared/entities/proforma-list-row.entity.ts +++ b/modules/customer-invoices/src/web/proformas/shared/entities/proforma-list-row.entity.ts @@ -15,27 +15,24 @@ export interface ProformaListRow { invoiceNumber: string; status: ProformaStatus; - series: string; + series: string | null; invoiceDate: string; - operationDate: string; + operationDate: string | null; languageCode: string; currencyCode: string; - reference: string; - description: string; + reference: string | null; + description: string | null; recipient: ProformaRecipient; subtotalAmount: number; subtotalAmountFmt: string; - discountPercentage: number; - discountPercentageFmt: string; - - discountAmount: number; - discountAmountFmt: string; + totalDiscountAmount: number; + totalDiscountAmountFmt: string; taxableAmount: number; taxableAmountFmt: string; @@ -46,5 +43,5 @@ export interface ProformaListRow { totalAmount: number; totalAmountFmt: string; - linkedInvoiceId: string; + linkedInvoiceId: string | null; } diff --git a/modules/customer-invoices/src/web/proformas/shared/entities/proforma-recipient.entity.ts b/modules/customer-invoices/src/web/proformas/shared/entities/proforma-recipient.entity.ts index 6293fa14..8b772092 100644 --- a/modules/customer-invoices/src/web/proformas/shared/entities/proforma-recipient.entity.ts +++ b/modules/customer-invoices/src/web/proformas/shared/entities/proforma-recipient.entity.ts @@ -5,14 +5,14 @@ export interface ProformaRecipient { id: string; - name: string; - tin: string; + name: string | null; + tin: string | null; - street: string; - street2: string; + street: string | null; + street2: string | null; - city: string; - province: string; - postalCode: string; - country: string; + city: string | null; + province: string | null; + postalCode: string | null; + country: string | null; } diff --git a/modules/customer-invoices/src/web/proformas/update/ui/editors/proforma-update-recipient-editor.tsx b/modules/customer-invoices/src/web/proformas/update/ui/editors/proforma-update-recipient-editor.tsx index 1c65aaff..c7465971 100644 --- a/modules/customer-invoices/src/web/proformas/update/ui/editors/proforma-update-recipient-editor.tsx +++ b/modules/customer-invoices/src/web/proformas/update/ui/editors/proforma-update-recipient-editor.tsx @@ -1,7 +1,8 @@ import type { CustomerSelectionOption } from "@erp/customers"; +import { FormSectionCard } from "@repo/rdx-ui/components"; import { useTranslation } from "../../../../i18n"; -import { FormSectionCard, SelectedRecipientSummary } from "../blocks"; +import { SelectedRecipientSummary } from "../blocks"; interface ProformaUpdateRecipientEditorProps { disabled?: boolean; diff --git a/modules/customer-invoices/tsconfig.json b/modules/customer-invoices/tsconfig.json index b4a95fde..65a9250e 100644 --- a/modules/customer-invoices/tsconfig.json +++ b/modules/customer-invoices/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/customer-invoices/*": ["./src/*"] }, diff --git a/modules/customers/package.json b/modules/customers/package.json index 5e10a8a5..ba8117e8 100644 --- a/modules/customers/package.json +++ b/modules/customers/package.json @@ -1,7 +1,7 @@ { "name": "@erp/customers", "description": "Customers", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/customers/src/web/list/ui/blocks/customer-summary-panel/customer-proformas-section.tsx b/modules/customers/src/web/list/ui/blocks/customer-summary-panel/customer-proformas-section.tsx index cb4da1fb..32cc18e2 100644 --- a/modules/customers/src/web/list/ui/blocks/customer-summary-panel/customer-proformas-section.tsx +++ b/modules/customers/src/web/list/ui/blocks/customer-summary-panel/customer-proformas-section.tsx @@ -1,3 +1,4 @@ +import { DateHelper } from "@erp/core"; import { Badge, Button } from "@repo/shadcn-ui/components"; import { FileTextIcon } from "lucide-react"; @@ -69,7 +70,7 @@ export const CustomerProformasSection = ({ >

{pro.number}

-

{formatDate(pro.date)}

+

{DateHelper.format(pro.date)}

{formatCurrency(pro.amount)} diff --git a/modules/customers/tsconfig.json b/modules/customers/tsconfig.json index 733bf13f..dcaa2f64 100644 --- a/modules/customers/tsconfig.json +++ b/modules/customers/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/customers/*": ["./src/*"] }, @@ -28,11 +27,6 @@ "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true }, - "include": [ - "src", - "../customer-invoices/src/web/proformas/update/ui/blocks/selected-recipient/customer-view-dialog.tsx", - "../customer-invoices/src/web/proformas/update/ui/blocks/selected-recipient/customer-card.tsx", - "../customer-invoices/src/web/proformas/update/ui/blocks/selected-recipient/selected-recipient-empty-card.tsx" - ], + "include": ["src"], "exclude": ["node_modules"] } diff --git a/modules/factuges/package.json b/modules/factuges/package.json index aea31429..592e3428 100644 --- a/modules/factuges/package.json +++ b/modules/factuges/package.json @@ -1,6 +1,6 @@ { "name": "@erp/factuges", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/factuges/src/api/infraestructure/express/controllers/create-proforma-from-factuges.controller.ts b/modules/factuges/src/api/infraestructure/express/controllers/create-proforma-from-factuges.controller.ts index d8d63c1e..a1782108 100644 --- a/modules/factuges/src/api/infraestructure/express/controllers/create-proforma-from-factuges.controller.ts +++ b/modules/factuges/src/api/infraestructure/express/controllers/create-proforma-from-factuges.controller.ts @@ -4,10 +4,10 @@ import { requireAuthenticatedGuard, requireCompanyContextGuard, } from "@erp/core/api"; +import type { CreateProformaFromFactugesUseCase } from "@erp/factuges/api/application"; +import type { CreateProformaFromFactugesRequestDTO } from "@erp/factuges/common"; -import type { CreateProformaFromFactugesRequestDTO } from "../../../../common/dto/request/create-proforma-from-factuges.request.dto.js"; -import type { CreateProformaFromFactugesUseCase } from "../../../application/use-cases/create-proforma-from-factuges.use-case.js"; -import { factugesApiErrorMapper } from "../factuges-api-error-mapper.js"; +import { factugesApiErrorMapper } from "../factuges-api-error-mapper"; export class CreateProformaFromFactugesController extends ExpressController { public constructor(private readonly useCase: CreateProformaFromFactugesUseCase) { diff --git a/modules/factuges/tsconfig.json b/modules/factuges/tsconfig.json index b209f7ca..76415a29 100644 --- a/modules/factuges/tsconfig.json +++ b/modules/factuges/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/factuges/*": ["./src/*"] }, diff --git a/modules/supplier-invoices/package.json b/modules/supplier-invoices/package.json index f98cb385..baaafad8 100644 --- a/modules/supplier-invoices/package.json +++ b/modules/supplier-invoices/package.json @@ -1,7 +1,7 @@ { "name": "@erp/supplier-invoices", "description": "Supplier invoices", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/supplier-invoices/tsconfig.json b/modules/supplier-invoices/tsconfig.json index 6f0dd460..271c02d4 100644 --- a/modules/supplier-invoices/tsconfig.json +++ b/modules/supplier-invoices/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/supplier-invoices/*": ["./src/*"] }, diff --git a/modules/supplier/package.json b/modules/supplier/package.json index cf6fb7b5..8c835141 100644 --- a/modules/supplier/package.json +++ b/modules/supplier/package.json @@ -1,7 +1,7 @@ { "name": "@erp/suppliers", "description": "Suppliers", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/modules/supplier/tsconfig.json b/modules/supplier/tsconfig.json index 4b17fbe2..a055379d 100644 --- a/modules/supplier/tsconfig.json +++ b/modules/supplier/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@erp/suppliers/*": ["./src/*"] }, diff --git a/packages/rdx-criteria/package.json b/packages/rdx-criteria/package.json index 917b644e..695fab4f 100644 --- a/packages/rdx-criteria/package.json +++ b/packages/rdx-criteria/package.json @@ -1,6 +1,6 @@ { "name": "@repo/rdx-criteria", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/packages/rdx-ddd/package.json b/packages/rdx-ddd/package.json index f0865103..c93f34de 100644 --- a/packages/rdx-ddd/package.json +++ b/packages/rdx-ddd/package.json @@ -1,6 +1,6 @@ { "name": "@repo/rdx-ddd", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/packages/rdx-ddd/src/helpers/zod-validator-error-traslator.ts b/packages/rdx-ddd/src/helpers/zod-validator-error-traslator.ts index 2c584b69..5215cde5 100644 --- a/packages/rdx-ddd/src/helpers/zod-validator-error-traslator.ts +++ b/packages/rdx-ddd/src/helpers/zod-validator-error-traslator.ts @@ -1,5 +1,6 @@ -import { ZodError } from "zod/v4"; -import { ValidationErrorCollection, ValidationErrorDetail } from "../errors"; +import type { ZodError } from "zod/v4"; + +import { ValidationErrorCollection, type ValidationErrorDetail } from "../errors"; export function translateZodValidationError( message: string, diff --git a/packages/rdx-ddd/src/value-objects/utc-date.ts b/packages/rdx-ddd/src/value-objects/utc-date.ts index 8d8cdcb8..0d92e431 100644 --- a/packages/rdx-ddd/src/value-objects/utc-date.ts +++ b/packages/rdx-ddd/src/value-objects/utc-date.ts @@ -1,6 +1,8 @@ import { Result } from "@repo/rdx-utils"; import { z } from "zod/v4"; + import { translateZodValidationError } from "../helpers"; + import { ValueObject } from "./value-object"; interface UtcDateProps { @@ -101,4 +103,15 @@ export class UtcDate extends ValueObject { equals(other: UtcDate): boolean { return this.toISOString() === other.toISOString(); } + + /** + * Determina si la fecha representada + * es una fecha futura en comparación con la fecha actual. + * @returns + */ + + isFuture(currentDate?: UtcDate): boolean { + const now = currentDate ? currentDate : UtcDate.today(); + return this.date.getTime() > now.getTime(); + } } diff --git a/packages/rdx-logger/package.json b/packages/rdx-logger/package.json index 8ab6d215..33bcc913 100644 --- a/packages/rdx-logger/package.json +++ b/packages/rdx-logger/package.json @@ -1,6 +1,6 @@ { "name": "@repo/rdx-logger", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/packages/rdx-ui/tsconfig.json b/packages/rdx-ui/tsconfig.json index bd86d0df..466f5d9a 100644 --- a/packages/rdx-ui/tsconfig.json +++ b/packages/rdx-ui/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "@repo/typescript-config/react-library.json", "compilerOptions": { - "baseUrl": ".", "paths": { "@repo/rdx-ui/*": ["./src/*"] }, diff --git a/packages/rdx-utils/package.json b/packages/rdx-utils/package.json index cce5676f..c78ab353 100644 --- a/packages/rdx-utils/package.json +++ b/packages/rdx-utils/package.json @@ -1,6 +1,6 @@ { "name": "@repo/rdx-utils", - "version": "0.5.0", + "version": "0.6.0", "private": true, "type": "module", "sideEffects": false, diff --git a/packages/rdx-utils/tsconfig.json b/packages/rdx-utils/tsconfig.json index 6cb61051..15a3bc11 100644 --- a/packages/rdx-utils/tsconfig.json +++ b/packages/rdx-utils/tsconfig.json @@ -1,8 +1,9 @@ { "extends": "@repo/typescript-config/buildless.json", "compilerOptions": { + "types": ["node"], "rootDir": "src" }, - "include": ["src", "../../modules/core/src/api/application/mappers/patch-collector.ts"], + "include": ["src"], "exclude": ["node_modules", "dist", "**/*.test.ts"] } diff --git a/packages/typescript-config/root.json b/packages/typescript-config/root.json index 68aa804c..0035a314 100644 --- a/packages/typescript-config/root.json +++ b/packages/typescript-config/root.json @@ -1,16 +1,21 @@ { "$schema": "https://json.schemastore.org/tsconfig", "display": "Root", - "compilerOptions": { - "baseUrl": ".", "paths": { - "@erp/core/*": ["modules/core/src/*"], - "@erp/auth/*": ["modules/auth/src/*"], - "@erp/customers/*": ["modules/customers/src/*"], - "@erp/customer-invoices/*": ["modules/customer-invoices/src/*"] + "@erp/core/*": [ + "modules/core/src/*" + ], + "@erp/auth/*": [ + "modules/auth/src/*" + ], + "@erp/customers/*": [ + "modules/customers/src/*" + ], + "@erp/customer-invoices/*": [ + "modules/customer-invoices/src/*" + ] }, - "target": "ES2021", "module": "CommonJS", "moduleResolution": "Node", @@ -20,4 +25,4 @@ "skipLibCheck": true, "allowUnreachableCode": true } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c52e935..7c414ea6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,12 +65,6 @@ importers: '@erp/customers': specifier: workspace:* version: link:../../modules/customers - '@erp/factuges': - specifier: workspace:* - version: link:../../modules/factuges - '@erp/suppliers': - specifier: workspace:* - version: link:../../modules/supplier '@repo/rdx-logger': specifier: workspace:* version: link:../../packages/rdx-logger diff --git a/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/linux/FastReportCliGenerator b/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/linux/FastReportCliGenerator index aeb45cd2..092eb78d 100755 Binary files a/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/linux/FastReportCliGenerator and b/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/linux/FastReportCliGenerator differ diff --git a/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/windows/FastReportCliGenerator.exe b/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/windows/FastReportCliGenerator.exe index 80d57821..b2a8af29 100755 Binary files a/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/windows/FastReportCliGenerator.exe and b/tools/fastreportcli-net-core-skia/FastReportCliGenerator/publish/windows/FastReportCliGenerator.exe differ