import { Injectable } from '@nestjs/common'; import { CreateSaleEstimate } from './commands/CreateSaleEstimate.service'; import { ISalesEstimatesFilter, SaleEstimateMailOptionsDTO, } from './types/SaleEstimates.types'; import { EditSaleEstimate } from './commands/EditSaleEstimate.service'; import { DeleteSaleEstimate } from './commands/DeleteSaleEstimate.service'; import { GetSaleEstimate } from './queries/GetSaleEstimate.service'; import { DeliverSaleEstimateService } from './commands/DeliverSaleEstimate.service'; import { ApproveSaleEstimateService } from './commands/ApproveSaleEstimate.service'; import { RejectSaleEstimateService } from './commands/RejectSaleEstimate.service'; import { SendSaleEstimateMail } from './commands/SendSaleEstimateMail'; import { GetSaleEstimateState } from './queries/GetSaleEstimateState.service'; import { GetSaleEstimatesService } from './queries/GetSaleEstimates.service'; import { GetSaleEstimatePdf } from './queries/GetSaleEstimatePdf'; import { CreateSaleEstimateDto, EditSaleEstimateDto, } from './dtos/SaleEstimate.dto'; @Injectable() export class SaleEstimatesApplication { constructor( private readonly createSaleEstimateService: CreateSaleEstimate, private readonly editSaleEstimateService: EditSaleEstimate, private readonly deleteSaleEstimateService: DeleteSaleEstimate, private readonly getSaleEstimateService: GetSaleEstimate, private readonly getSaleEstimatesService: GetSaleEstimatesService, private readonly deliverSaleEstimateService: DeliverSaleEstimateService, private readonly approveSaleEstimateService: ApproveSaleEstimateService, private readonly rejectSaleEstimateService: RejectSaleEstimateService, private readonly sendEstimateMailService: SendSaleEstimateMail, private readonly getSaleEstimateStateService: GetSaleEstimateState, private readonly saleEstimatesPdfService: GetSaleEstimatePdf, ) {} /** * Create a sale estimate. * @param {CreateSaleEstimateDto} estimate - Estimate DTO. * @return {Promise} */ public createSaleEstimate(estimateDTO: CreateSaleEstimateDto) { return this.createSaleEstimateService.createEstimate(estimateDTO); } /** * Edit the given sale estimate. * @param {number} estimateId - Sale estimate ID. * @param {EditSaleEstimateDto} estimate - Estimate DTO. * @return {Promise} */ public editSaleEstimate( estimateId: number, estimateDTO: EditSaleEstimateDto, ) { return this.editSaleEstimateService.editEstimate(estimateId, estimateDTO); } /** * Deletes the given sale estimate. * @param {number} estimateId - * @return {Promise} */ public deleteSaleEstimate(estimateId: number) { return this.deleteSaleEstimateService.deleteEstimate(estimateId); } /** * Retrieves the given sale estimate. * @param {number} estimateId - Sale estimate ID. */ public getSaleEstimate(estimateId: number) { return this.getSaleEstimateService.getEstimate(estimateId); } /** * Retrieves the sale estimate. * @param {ISalesEstimatesFilter} filterDTO - Sales estimates filter DTO. * @returns */ public getSaleEstimates(filterDTO: Partial) { return this.getSaleEstimatesService.getEstimates(filterDTO); } /** * Deliver the given sale estimate. * @param {number} saleEstimateId - Sale estimate id. * @returns {Promise} */ public deliverSaleEstimate(saleEstimateId: number) { return this.deliverSaleEstimateService.deliverSaleEstimate(saleEstimateId); } /** * Approve the given sale estimate. * @param {number} saleEstimateId - Sale estimate ID. * @returns {Promise} */ public approveSaleEstimate(saleEstimateId: number) { return this.approveSaleEstimateService.approveSaleEstimate(saleEstimateId); } /** * Mark the sale estimate as rejected from the customer. * @param {number} saleEstimateId */ public async rejectSaleEstimate(saleEstimateId: number) { return this.rejectSaleEstimateService.rejectSaleEstimate(saleEstimateId); } /** * Notify the customer of the given sale estimate by SMS. * @param {number} saleEstimateId - Sale estimate ID. * @returns {Promise} */ public notifySaleEstimateBySms = async (saleEstimateId: number) => { // return this.saleEstimateNotifyBySmsService.notifyBySms( // saleEstimateId, // ); }; /** * Retrieve the SMS details of the given payment receive transaction. * @param {number} saleEstimateId - Sale estimate ID. * @returns {Promise} */ public getSaleEstimateSmsDetails = (saleEstimateId: number) => { // return this.saleEstimateNotifyBySmsService.smsDetails( // saleEstimateId, // ); }; /** * Retrieve the PDF content of the given sale estimate. * @param {number} saleEstimateId - Sale estimate ID. * @returns {Promise<[Buffer, string]>} */ public getSaleEstimatePdf(saleEstimateId: number) { return this.saleEstimatesPdfService.getSaleEstimatePdf(saleEstimateId); } /** * Send the reminder mail of the given sale estimate. * @param {number} saleEstimateId - Sale estimate ID. * @param {SaleEstimateMailOptionsDTO} saleEstimateMailOpts - Sale estimate mail options. * @returns {Promise} */ public sendSaleEstimateMail( saleEstimateId: number, saleEstimateMailOpts: SaleEstimateMailOptionsDTO, ) { return this.sendEstimateMailService.triggerMail( saleEstimateId, saleEstimateMailOpts, ); } /** * Retrieves the default mail options of the given sale estimate. * @param {number} saleEstimateId * @returns {Promise} */ public getSaleEstimateMail(saleEstimateId: number) { return this.sendEstimateMailService.getMailOptions(saleEstimateId); } /** * Retrieves the current state of the sale estimate. * @returns {Promise} - A promise resolving to the sale estimate state. */ public getSaleEstimateState() { return this.getSaleEstimateStateService.getSaleEstimateState(); } }