diff --git a/server/src/contexts/profile/domain/entities/index.ts b/server/src/contexts/profile/domain/entities/index.ts index b6f21ff..973152e 100644 --- a/server/src/contexts/profile/domain/entities/index.ts +++ b/server/src/contexts/profile/domain/entities/index.ts @@ -1 +1,2 @@ export * from "./Profile"; +export * from "./ProfileLogotype"; diff --git a/server/src/contexts/sales/domain/entities/Dealer/Dealer.ts b/server/src/contexts/sales/domain/entities/Dealer/Dealer.ts index fab6313..77ed416 100644 --- a/server/src/contexts/sales/domain/entities/Dealer/Dealer.ts +++ b/server/src/contexts/sales/domain/entities/Dealer/Dealer.ts @@ -8,6 +8,7 @@ import { Result, UniqueID, } from "@shared/contexts"; +import { DealerLogotype } from "./DealerLogotype"; import { DealerStatus } from "./DealerStatus"; export interface IDealerProps { @@ -18,6 +19,7 @@ export interface IDealerProps { additionalInfo: KeyValueMap; status: DealerStatus; currency: CurrencyData; + logo: DealerLogotype; } export interface IDealer { @@ -29,6 +31,7 @@ export interface IDealer { additionalInfo: KeyValueMap; status: DealerStatus; currency: CurrencyData; + logo: DealerLogotype; getAcronym: () => string; } @@ -69,6 +72,10 @@ export class Dealer extends AggregateRoot implements IDealer { return this.props.currency; } + get logo(): DealerLogotype { + return this.props.logo; + } + public getAcronym(): string { return this.props.name.getAcronym(); } diff --git a/server/src/contexts/sales/domain/entities/Dealer/DealerLogotype.ts b/server/src/contexts/sales/domain/entities/Dealer/DealerLogotype.ts new file mode 100644 index 0000000..667c39f --- /dev/null +++ b/server/src/contexts/sales/domain/entities/Dealer/DealerLogotype.ts @@ -0,0 +1,3 @@ +import { ProfileLogotype } from "@/contexts/profile/domain"; + +export class DealerLogotype extends ProfileLogotype {} diff --git a/server/src/contexts/sales/domain/entities/Dealer/index.ts b/server/src/contexts/sales/domain/entities/Dealer/index.ts index dfb596c..883de72 100644 --- a/server/src/contexts/sales/domain/entities/Dealer/index.ts +++ b/server/src/contexts/sales/domain/entities/Dealer/index.ts @@ -1,3 +1,4 @@ export * from "./Dealer"; +export * from "./DealerLogotype"; export * from "./DealerRole"; export * from "./DealerStatus"; diff --git a/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/ReportQuote.reporter.ts b/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/ReportQuote.reporter.ts index 77cc175..8e9b3e8 100644 --- a/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/ReportQuote.reporter.ts +++ b/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/ReportQuote.reporter.ts @@ -9,16 +9,15 @@ import puppeteer from "puppeteer"; import report from "puppeteer-report"; export interface IReportQuoteReporter { - toHTML: (quote: Quote, context: ISalesContext) => string; + toHTML: (quote: Quote, context: ISalesContext) => Promise; toPDF: (quote: Quote, context: ISalesContext) => Promise; } // https://plnkr.co/edit/lWk6Yd?preview export const ReportQuotePresenter: IReportQuoteReporter = { - toHTML: (quote: Quote, context: ISalesContext): string => { - const quote_dto = map(quote, context); - //console.log(quote_dto); + toHTML: async (quote: Quote, context: ISalesContext): Promise => { + const quote_dto = await map(quote, context); // Obtener y compilar la plantilla HTML const templateHtml = readFileSync( @@ -29,7 +28,7 @@ export const ReportQuotePresenter: IReportQuoteReporter = { }, toPDF: async (quote: Quote, context: ISalesContext): Promise => { - const html = ReportQuotePresenter.toHTML(quote, context); + const html = await ReportQuotePresenter.toHTML(quote, context); // Generar el PDF con Puppeteer const browser = await puppeteer.launch({ @@ -62,7 +61,7 @@ export const ReportQuotePresenter: IReportQuoteReporter = { }, }; -const map = (quote: Quote, context: ISalesContext) => { +const map = async (quote: Quote, context: ISalesContext) => { const { dealer } = context; return { @@ -103,6 +102,7 @@ const map = (quote: Quote, context: ISalesContext) => { default_notes: dealer?.additionalInfo.get("default_notes"), default_legal_terms: dealer?.additionalInfo.get("default_legal_terms"), default_quote_validity: dealer?.additionalInfo.get("default_quote_validity"), + logo: await dealer?.logo.toBase64(), }, }; }; diff --git a/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/templates/quote/template.hbs b/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/templates/quote/template.hbs index d62e5cd..166c2f9 100644 --- a/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/templates/quote/template.hbs +++ b/server/src/contexts/sales/infrastructure/express/controllers/quotes/reportQuote/reporter/templates/quote/template.hbs @@ -56,7 +56,7 @@
- +
{{dealer.contact_information}}
diff --git a/server/src/contexts/sales/infrastructure/mappers/dealer.mapper.ts b/server/src/contexts/sales/infrastructure/mappers/dealer.mapper.ts index cdc5cbe..0e2307a 100644 --- a/server/src/contexts/sales/infrastructure/mappers/dealer.mapper.ts +++ b/server/src/contexts/sales/infrastructure/mappers/dealer.mapper.ts @@ -4,7 +4,7 @@ import { SequelizeMapper, } from "@/contexts/common/infrastructure"; import { CurrencyData, KeyValueMap, Language, Name, UniqueID } from "@shared/contexts"; -import { Dealer, DealerStatus, IDealerProps } from "../../domain/entities"; +import { Dealer, DealerLogotype, DealerStatus, IDealerProps } from "../../domain/entities"; import { ISalesContext } from "../Sales.context"; import { DealerCreationAttributes, Dealer_Model } from "../sequelize"; @@ -25,6 +25,7 @@ class DealerMapper const status = this.mapsValue(source, "status", DealerStatus.create); const language = this.mapsValue(source, "lang_code", Language.createFromCode); const currency = this.mapsValue(source, "currency_code", CurrencyData.createFromCode); + const logo = this.mapsValue(source, "logo", DealerLogotype.create); const additionalInfoOrError = KeyValueMap.create([ ["contact_information", source.contact_information], @@ -43,6 +44,7 @@ class DealerMapper language, currency, additionalInfo: additionalInfoOrError.object, + logo, }; const id = this.mapsValue(source, "id", UniqueID.create); @@ -71,6 +73,7 @@ class DealerMapper default_legal_terms: source.additionalInfo.get("default_legal_terms")?.toString() ?? "", default_quote_validity: source.additionalInfo.get("default_quote_validity")?.toString() ?? "", default_tax: Number(source.additionalInfo.get("default_tax") ?? 0), + logo: source.logo.toPrimitive(), }; } }