feat(server): change estimate and receipts status once delivering mail

This commit is contained in:
Ahmed Bouhuolia
2024-01-25 21:52:07 +02:00
parent 9d4e7cec9e
commit 760dbc6cfc
14 changed files with 171 additions and 13 deletions

View File

@@ -8,11 +8,14 @@ import {
import { SaleEstimatesPdf } from './SaleEstimatesPdf';
import { GetSaleEstimate } from './GetSaleEstimate';
import {
ISaleEstimateMailPresendEvent,
SaleEstimateMailOptions,
SaleEstimateMailOptionsDTO,
} from '@/interfaces';
import { ContactMailNotification } from '@/services/MailNotification/ContactMailNotification';
import { parseAndValidateMailOptions } from '@/services/MailNotification/utils';
import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
import events from '@/subscribers/events';
@Service()
export class SendSaleEstimateMail {
@@ -31,6 +34,9 @@ export class SendSaleEstimateMail {
@Inject('agenda')
private agenda: any;
@Inject()
private eventPublisher: EventPublisher;
/**
* Triggers the reminder mail of the given sale estimate.
* @param {number} tenantId -
@@ -49,6 +55,13 @@ export class SendSaleEstimateMail {
messageOptions,
};
await this.agenda.now('sale-estimate-mail-send', payload);
// Triggers `onSaleEstimatePreMailSend` event.
await this.eventPublisher.emitAsync(events.saleEstimate.onPreMailSend, {
tenantId,
saleEstimateId,
messageOptions,
} as ISaleEstimateMailPresendEvent);
}
/**
@@ -99,7 +112,7 @@ export class SendSaleEstimateMail {
return {
...mailOptions,
data: formatterData,
attachEstimate: true
attachEstimate: true,
};
};

View File

@@ -0,0 +1,43 @@
import { Inject, Service } from 'typedi';
import events from '@/subscribers/events';
import { ISaleEstimateMailPresendEvent } from '@/interfaces';
import { DeliverSaleEstimate } from '../DeliverSaleEstimate';
import { ServiceError } from '@/exceptions';
import { ERRORS } from '../constants';
@Service()
export class SaleEstimateMarkApprovedOnMailSent {
@Inject()
private deliverEstimateService: DeliverSaleEstimate;
/**
* Attaches events.
*/
public attach(bus) {
bus.subscribe(events.saleEstimate.onPreMailSend, this.markEstimateApproved);
}
/**
* Marks the given estimate approved on submitting mail.
* @param {ISaleEstimateMailPresendEvent}
*/
private markEstimateApproved = async ({
tenantId,
saleEstimateId,
}: ISaleEstimateMailPresendEvent) => {
try {
await this.deliverEstimateService.deliverSaleEstimate(
tenantId,
saleEstimateId
);
} catch (error) {
if (
error instanceof ServiceError &&
error.errorType === ERRORS.SALE_ESTIMATE_ALREADY_DELIVERED
) {
} else {
throw error;
}
}
};
}