feat: integrate reminder payloads into appointment creation and update notification jobs and adjust quiet hours logic
This commit is contained in:
@@ -545,6 +545,18 @@ class AppointmentManager implements IAppointmentsManager {
|
||||
channel: "whatsapp",
|
||||
});
|
||||
const clientPhoneNumber = await this.getOptionalClientWapNumber(checkClient);
|
||||
const reminderEmailContent = await this.tryToSendNotification({
|
||||
appointmentId: String(newAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.REMINDER,
|
||||
channel: "email",
|
||||
});
|
||||
const reminderWapContent = await this.tryToSendNotification({
|
||||
appointmentId: String(newAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.REMINDER,
|
||||
channel: "whatsapp",
|
||||
});
|
||||
|
||||
await this.createCreationNotificationJobs({
|
||||
appointmentId: String(newAppointment.id),
|
||||
@@ -558,6 +570,8 @@ class AppointmentManager implements IAppointmentsManager {
|
||||
appointmentStart: new Date(data.start),
|
||||
emailMessage: emailContent.message,
|
||||
wapMessage: wapContent.message,
|
||||
reminderEmailMessage: reminderEmailContent.message,
|
||||
reminderWapMessage: reminderWapContent.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2077,13 +2091,45 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
if (checkAppointment.id) {
|
||||
await this.jobService.cancelByAppointment(String(checkAppointment.id));
|
||||
|
||||
//Create jobs for email and whatsapp notifications
|
||||
await this.jobService.createJob({
|
||||
const emailContent = await this.tryToSendNotification({
|
||||
appointmentId: String(checkAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.UPDATE,
|
||||
channel: "email",
|
||||
});
|
||||
const wapContent = await this.tryToSendNotification({
|
||||
appointmentId: String(checkAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.UPDATE,
|
||||
channel: "whatsapp",
|
||||
});
|
||||
const reminderEmailContent = await this.tryToSendNotification({
|
||||
appointmentId: String(checkAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.REMINDER,
|
||||
channel: "email",
|
||||
});
|
||||
const reminderWapContent = await this.tryToSendNotification({
|
||||
appointmentId: String(checkAppointment.id),
|
||||
sessionUser: String(companyCheck.ownerId),
|
||||
type: APPOINTMENT_NOTIFICATION_TYPE.REMINDER,
|
||||
channel: "whatsapp",
|
||||
});
|
||||
|
||||
await this.createUpdateNotificationJobs({
|
||||
appointmentId: String(checkAppointment.id),
|
||||
companyId: String(companyCheck._id),
|
||||
clientId: String(checkClient._id),
|
||||
appointmentId: String(checkAppointment.id),
|
||||
type: "update" as const,
|
||||
clientUserId: checkClient.userId ? String(checkClient.userId) : undefined,
|
||||
clientEmail: checkClient.email,
|
||||
clientPhoneNumber: await this.getOptionalClientWapNumber(checkClient),
|
||||
companyOwnerId: String(companyCheck.ownerId),
|
||||
companyName: companyCheck.name,
|
||||
appointmentStart: new Date(data.start),
|
||||
emailMessage: emailContent.message,
|
||||
wapMessage: wapContent.message,
|
||||
reminderEmailMessage: reminderEmailContent.message,
|
||||
reminderWapMessage: reminderWapContent.message,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2188,8 +2234,11 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
appointmentStart: Date;
|
||||
emailMessage: string;
|
||||
wapMessage: string;
|
||||
reminderEmailMessage: string;
|
||||
reminderWapMessage: string;
|
||||
}): Promise<void> {
|
||||
const systemSubject = `Turno reservado en ${data.companyName}`;
|
||||
const reminderSystemSubject = `Recordatorio de turno en ${data.companyName}`;
|
||||
|
||||
await this.jobService.createJob({
|
||||
companyId: data.companyId,
|
||||
@@ -2210,6 +2259,72 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
systemSubject,
|
||||
systemMessage: data.emailMessage,
|
||||
},
|
||||
reminderPayload: {
|
||||
email: data.clientEmail,
|
||||
phoneNumber: data.clientPhoneNumber,
|
||||
userId: data.clientUserId,
|
||||
companyOwnerId: data.companyOwnerId,
|
||||
subject: reminderSystemSubject,
|
||||
message: data.reminderEmailMessage,
|
||||
emailSubject: "TurnosXpress :: Recordatorio",
|
||||
emailMessage: data.reminderEmailMessage,
|
||||
wapMessage: data.reminderWapMessage,
|
||||
systemSubject: reminderSystemSubject,
|
||||
systemMessage: data.reminderEmailMessage,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
private async createUpdateNotificationJobs(data: {
|
||||
appointmentId: string;
|
||||
companyId: string;
|
||||
clientId: string;
|
||||
clientUserId?: string;
|
||||
clientEmail?: string;
|
||||
clientPhoneNumber?: string;
|
||||
companyOwnerId: string;
|
||||
companyName: string;
|
||||
appointmentStart: Date;
|
||||
emailMessage: string;
|
||||
wapMessage: string;
|
||||
reminderEmailMessage: string;
|
||||
reminderWapMessage: string;
|
||||
}): Promise<void> {
|
||||
const systemSubject = `Turno actualizado en ${data.companyName}`;
|
||||
const reminderSystemSubject = `Recordatorio de turno en ${data.companyName}`;
|
||||
|
||||
await this.jobService.createJob({
|
||||
companyId: data.companyId,
|
||||
clientId: data.clientId,
|
||||
appointmentId: data.appointmentId,
|
||||
type: "update",
|
||||
appointmentStart: data.appointmentStart,
|
||||
payload: {
|
||||
email: data.clientEmail,
|
||||
phoneNumber: data.clientPhoneNumber,
|
||||
userId: data.clientUserId,
|
||||
companyOwnerId: data.companyOwnerId,
|
||||
subject: systemSubject,
|
||||
message: data.emailMessage,
|
||||
emailSubject: "TurnosXpress :: Turno actualizado",
|
||||
emailMessage: data.emailMessage,
|
||||
wapMessage: data.wapMessage,
|
||||
systemSubject,
|
||||
systemMessage: data.emailMessage,
|
||||
},
|
||||
reminderPayload: {
|
||||
email: data.clientEmail,
|
||||
phoneNumber: data.clientPhoneNumber,
|
||||
userId: data.clientUserId,
|
||||
companyOwnerId: data.companyOwnerId,
|
||||
subject: reminderSystemSubject,
|
||||
message: data.reminderEmailMessage,
|
||||
emailSubject: "TurnosXpress :: Recordatorio",
|
||||
emailMessage: data.reminderEmailMessage,
|
||||
wapMessage: data.reminderWapMessage,
|
||||
systemSubject: reminderSystemSubject,
|
||||
systemMessage: data.reminderEmailMessage,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2605,10 +2720,15 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
|
||||
wapMessage = wapMessage.replaceAll("<---ORGANIZACION--->", companyCheck.name);
|
||||
wapMessage = wapMessage.replaceAll("<---BR--->", "\r\n");
|
||||
} else if (data.type == APPOINTMENT_NOTIFICATION_TYPE.CANCELLATION) {
|
||||
} else if (data.type == APPOINTMENT_NOTIFICATION_TYPE.CANCELLATION || data.type == APPOINTMENT_NOTIFICATION_TYPE.UPDATE) {
|
||||
const isUpdate = data.type == APPOINTMENT_NOTIFICATION_TYPE.UPDATE;
|
||||
const templateId = data.channel === "email"
|
||||
? companyCheck.templateEmailCancellationId || companyCheck.templateWapCancellationId
|
||||
: companyCheck.templateWapCancellationId;
|
||||
? isUpdate
|
||||
? companyCheck.templateEmailAltaId || companyCheck.templateWapAltaId
|
||||
: companyCheck.templateEmailCancellationId || companyCheck.templateWapCancellationId
|
||||
: isUpdate
|
||||
? companyCheck.templateWapAltaId
|
||||
: companyCheck.templateWapCancellationId;
|
||||
|
||||
if (templateId) {
|
||||
const template = await Templates.templates.findOne({
|
||||
@@ -2623,8 +2743,12 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
|
||||
if (!wapMessage) {
|
||||
wapMessage = data.channel === "email"
|
||||
? process.env.EMAIL_CANCELLATION || process.env.EMAIL_CANCELACION || process.env.WAP_CANCELLATION || process.env.WAP_CANCELACION || ""
|
||||
: process.env.WAP_CANCELLATION || process.env.WAP_CANCELACION || "";
|
||||
? isUpdate
|
||||
? process.env.EMAIL_NEW_APPOINTMENT || process.env.EMAIL_ALTA || process.env.WAP_ALTA || ""
|
||||
: process.env.EMAIL_CANCELLATION || process.env.EMAIL_CANCELACION || process.env.WAP_CANCELLATION || process.env.WAP_CANCELACION || ""
|
||||
: isUpdate
|
||||
? process.env.WAP_ALTA || ""
|
||||
: process.env.WAP_CANCELLATION || process.env.WAP_CANCELACION || "";
|
||||
}
|
||||
|
||||
wapMessage = wapMessage.replaceAll(
|
||||
@@ -2703,6 +2827,8 @@ public async updateAppointment(data: UpdateAppointmentParams): Promise<void> {
|
||||
subjectEmail = "TurnosXpress :: Alta de turno";
|
||||
} else if (data.type == APPOINTMENT_NOTIFICATION_TYPE.CANCELLATION) {
|
||||
subjectEmail = "TurnosXpress :: Turno cancelado";
|
||||
} else if (data.type == APPOINTMENT_NOTIFICATION_TYPE.UPDATE) {
|
||||
subjectEmail = "TurnosXpress :: Turno actualizado";
|
||||
}
|
||||
|
||||
//Enviar email...
|
||||
|
||||
Reference in New Issue
Block a user