2025-09-08 17:24:38 +00:00
|
|
|
import { JsonTaxCatalogProvider, spainTaxCatalogProvider } from "@erp/core";
|
2025-09-12 09:14:27 +00:00
|
|
|
import type { IMapperRegistry, IPresenterRegistry, ModuleParams } from "@erp/core/api";
|
|
|
|
|
import {
|
|
|
|
|
InMemoryMapperRegistry,
|
|
|
|
|
InMemoryPresenterRegistry,
|
|
|
|
|
SequelizeTransactionManager,
|
|
|
|
|
} from "@erp/core/api";
|
2025-08-14 14:58:13 +00:00
|
|
|
import {
|
|
|
|
|
CreateCustomerInvoiceUseCase,
|
2025-09-12 16:23:36 +00:00
|
|
|
CustomerInvoiceFullPresenter,
|
|
|
|
|
CustomerInvoiceItemsFullPresenter,
|
|
|
|
|
CustomerInvoiceReportHTMLPresenter,
|
|
|
|
|
CustomerInvoiceReportPDFPresenter,
|
2025-08-14 14:58:13 +00:00
|
|
|
DeleteCustomerInvoiceUseCase,
|
|
|
|
|
GetCustomerInvoiceUseCase,
|
2025-09-12 10:40:52 +00:00
|
|
|
ListCustomerInvoicesPresenter,
|
2025-08-14 14:58:13 +00:00
|
|
|
ListCustomerInvoicesUseCase,
|
2025-09-12 09:14:27 +00:00
|
|
|
ReportCustomerInvoiceUseCase,
|
2025-08-14 14:58:13 +00:00
|
|
|
} from "../application";
|
2025-09-12 16:23:36 +00:00
|
|
|
|
2025-09-04 17:57:04 +00:00
|
|
|
import { CustomerInvoiceService } from "../domain";
|
2025-09-11 12:05:50 +00:00
|
|
|
import { CustomerInvoiceFullMapper, CustomerInvoiceListMapper } from "./mappers";
|
2025-08-14 14:58:13 +00:00
|
|
|
import { CustomerInvoiceRepository } from "./sequelize";
|
|
|
|
|
|
|
|
|
|
type InvoiceDeps = {
|
|
|
|
|
transactionManager: SequelizeTransactionManager;
|
2025-09-11 12:05:50 +00:00
|
|
|
mapperRegistry: IMapperRegistry;
|
2025-09-12 10:40:52 +00:00
|
|
|
presenterRegistry: IPresenterRegistry;
|
2025-08-14 14:58:13 +00:00
|
|
|
repo: CustomerInvoiceRepository;
|
2025-09-04 17:57:04 +00:00
|
|
|
service: CustomerInvoiceService;
|
2025-09-08 17:24:38 +00:00
|
|
|
catalogs: {
|
|
|
|
|
taxes: JsonTaxCatalogProvider;
|
|
|
|
|
};
|
2025-08-14 14:58:13 +00:00
|
|
|
build: {
|
|
|
|
|
list: () => ListCustomerInvoicesUseCase;
|
|
|
|
|
get: () => GetCustomerInvoiceUseCase;
|
|
|
|
|
create: () => CreateCustomerInvoiceUseCase;
|
2025-09-12 16:23:36 +00:00
|
|
|
//update: () => UpdateCustomerInvoiceUseCase;
|
2025-08-14 14:58:13 +00:00
|
|
|
delete: () => DeleteCustomerInvoiceUseCase;
|
2025-09-12 09:14:27 +00:00
|
|
|
report: () => ReportCustomerInvoiceUseCase;
|
2025-08-14 14:58:13 +00:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2025-09-12 09:14:27 +00:00
|
|
|
let _presenterRegistry: IPresenterRegistry | null = null;
|
2025-09-11 12:05:50 +00:00
|
|
|
let _mapperRegistry: IMapperRegistry | null = null;
|
2025-09-12 09:14:27 +00:00
|
|
|
|
|
|
|
|
let _repo: CustomerInvoiceRepository | null = null;
|
2025-09-04 17:57:04 +00:00
|
|
|
let _service: CustomerInvoiceService | null = null;
|
2025-09-08 17:24:38 +00:00
|
|
|
let _catalogs: InvoiceDeps["catalogs"] | null = null;
|
2025-08-14 14:58:13 +00:00
|
|
|
|
|
|
|
|
export function getInvoiceDependencies(params: ModuleParams): InvoiceDeps {
|
|
|
|
|
const { database } = params;
|
|
|
|
|
const transactionManager = new SequelizeTransactionManager(database);
|
2025-09-09 18:13:54 +00:00
|
|
|
if (!_catalogs) _catalogs = { taxes: spainTaxCatalogProvider };
|
2025-09-11 12:05:50 +00:00
|
|
|
|
|
|
|
|
if (!_mapperRegistry) {
|
|
|
|
|
_mapperRegistry = new InMemoryMapperRegistry();
|
2025-09-12 09:14:27 +00:00
|
|
|
_mapperRegistry.registerDomainMapper(
|
|
|
|
|
"FULL",
|
|
|
|
|
new CustomerInvoiceFullMapper({
|
|
|
|
|
taxCatalog: _catalogs!.taxes,
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
_mapperRegistry.registerReadModelMapper("LIST", new CustomerInvoiceListMapper());
|
2025-09-11 12:05:50 +00:00
|
|
|
}
|
|
|
|
|
if (!_repo) _repo = new CustomerInvoiceRepository({ mapperRegistry: _mapperRegistry, database });
|
2025-08-14 14:58:13 +00:00
|
|
|
if (!_service) _service = new CustomerInvoiceService(_repo);
|
|
|
|
|
|
2025-09-12 09:14:27 +00:00
|
|
|
if (!_presenterRegistry) {
|
|
|
|
|
_presenterRegistry = new InMemoryPresenterRegistry();
|
2025-09-12 16:23:36 +00:00
|
|
|
_presenterRegistry.registerPresenters([
|
2025-09-12 10:40:52 +00:00
|
|
|
{
|
2025-09-12 16:23:36 +00:00
|
|
|
key: {
|
|
|
|
|
resource: "customer-invoice-items",
|
|
|
|
|
projection: "FULL",
|
|
|
|
|
},
|
|
|
|
|
presenter: new CustomerInvoiceItemsFullPresenter(_presenterRegistry),
|
2025-09-12 10:40:52 +00:00
|
|
|
},
|
2025-09-12 16:23:36 +00:00
|
|
|
{
|
|
|
|
|
key: {
|
|
|
|
|
resource: "customer-invoice",
|
|
|
|
|
projection: "FULL",
|
|
|
|
|
},
|
|
|
|
|
presenter: new CustomerInvoiceFullPresenter(_presenterRegistry),
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
key: {
|
|
|
|
|
resource: "customer-invoice",
|
|
|
|
|
projection: "LIST",
|
|
|
|
|
},
|
|
|
|
|
presenter: new ListCustomerInvoicesPresenter(_presenterRegistry),
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
key: {
|
|
|
|
|
resource: "customer-invoice",
|
|
|
|
|
projection: "REPORT",
|
|
|
|
|
format: "HTML",
|
|
|
|
|
},
|
|
|
|
|
presenter: new CustomerInvoiceReportHTMLPresenter(_presenterRegistry),
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
key: {
|
|
|
|
|
resource: "customer-invoice",
|
|
|
|
|
projection: "REPORT",
|
|
|
|
|
format: "PDF",
|
|
|
|
|
},
|
|
|
|
|
presenter: new CustomerInvoiceReportPDFPresenter(_presenterRegistry),
|
|
|
|
|
},
|
|
|
|
|
]);
|
2025-08-14 14:58:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
transactionManager,
|
|
|
|
|
repo: _repo,
|
2025-09-11 12:05:50 +00:00
|
|
|
mapperRegistry: _mapperRegistry,
|
2025-09-12 10:40:52 +00:00
|
|
|
presenterRegistry: _presenterRegistry,
|
2025-08-14 14:58:13 +00:00
|
|
|
service: _service,
|
2025-09-08 17:24:38 +00:00
|
|
|
catalogs: _catalogs,
|
2025-09-12 10:40:52 +00:00
|
|
|
|
2025-08-14 14:58:13 +00:00
|
|
|
build: {
|
|
|
|
|
list: () =>
|
2025-09-12 16:23:36 +00:00
|
|
|
new ListCustomerInvoicesUseCase(_service!, transactionManager!, _presenterRegistry!),
|
|
|
|
|
get: () => new GetCustomerInvoiceUseCase(_service!, transactionManager!, _presenterRegistry!),
|
2025-08-14 14:58:13 +00:00
|
|
|
create: () =>
|
2025-09-08 17:24:38 +00:00
|
|
|
new CreateCustomerInvoiceUseCase(
|
|
|
|
|
_service!,
|
|
|
|
|
transactionManager!,
|
2025-09-12 16:23:36 +00:00
|
|
|
_presenterRegistry!,
|
2025-09-08 17:24:38 +00:00
|
|
|
_catalogs!.taxes
|
|
|
|
|
),
|
2025-09-12 16:23:36 +00:00
|
|
|
/*update: () =>
|
2025-09-09 18:13:54 +00:00
|
|
|
new UpdateCustomerInvoiceUseCase(
|
|
|
|
|
_service!,
|
|
|
|
|
transactionManager!,
|
2025-09-12 16:23:36 +00:00
|
|
|
_presenterRegistry!,
|
2025-09-09 18:13:54 +00:00
|
|
|
_catalogs!.taxes
|
2025-09-12 16:23:36 +00:00
|
|
|
),*/
|
2025-08-14 14:58:13 +00:00
|
|
|
delete: () => new DeleteCustomerInvoiceUseCase(_service!, transactionManager!),
|
2025-09-12 09:14:27 +00:00
|
|
|
report: () =>
|
2025-09-12 16:23:36 +00:00
|
|
|
new ReportCustomerInvoiceUseCase(_service!, transactionManager!, _presenterRegistry!),
|
2025-08-14 14:58:13 +00:00
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
}
|