Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix - add team members to emails #7207

Merged
merged 26 commits into from
Feb 27, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
98cd23b
On booking add team members & translation
joeauyeung Feb 18, 2023
d128c3e
Add team members to round robin create
joeauyeung Feb 18, 2023
d05fe6f
Only update calendars on reschedule if there is a calendar reference
joeauyeung Feb 18, 2023
cbdda75
Send email on reschedules
joeauyeung Feb 18, 2023
3dcb5dd
Send team email on cancelled event
joeauyeung Feb 19, 2023
5e9fda7
Add team members to calendar event description
joeauyeung Feb 19, 2023
ff93467
Clean up
joeauyeung Feb 19, 2023
24becee
Convert other emails to organizer & teams
joeauyeung Feb 19, 2023
b4c7145
Type check fixes
joeauyeung Feb 19, 2023
94a6cae
More type fixes
joeauyeung Feb 19, 2023
8f3f17b
Change organizer scheduled input to an object
joeauyeung Feb 21, 2023
5a9f20b
early return updateCalendarEvent
joeauyeung Feb 21, 2023
5288fec
Introduce team member type
joeauyeung Feb 21, 2023
9035b05
Merge branch 'main' into teams-include-team-members-in-email
joeauyeung Feb 21, 2023
97d7842
Fix type errors
joeauyeung Feb 21, 2023
b4fb91f
Merge branch 'main' into teams-include-team-members-in-email
zomars Feb 22, 2023
25a3d97
Put team members before attendees
joeauyeung Feb 21, 2023
c4c629c
Remove lodash cloneDeep
joeauyeung Feb 21, 2023
7936b3a
Merge branch 'main' into teams-include-team-members-in-email
joeauyeung Feb 22, 2023
e6dfa35
Update packages/core/EventManager.ts
joeauyeung Feb 22, 2023
9f121ff
Remove booking select object
joeauyeung Feb 22, 2023
fe94312
Revert "Remove booking select object"
joeauyeung Feb 22, 2023
8ee8d7a
Refactor email manager (#7270)
joeauyeung Feb 23, 2023
e17f69e
Type change
joeauyeung Feb 24, 2023
3ecbebd
Remove conditional check for updateAllCalendarEvents
joeauyeung Feb 26, 2023
9f463dc
Merge branch 'main' into teams-include-team-members-in-email
zomars Feb 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Send email on reschedules
  • Loading branch information
joeauyeung committed Feb 18, 2023
commit cbdda75ca8dfd7b8cbe7b7fdf431ac761f461f86
20 changes: 19 additions & 1 deletion packages/emails/email-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ export const sendScheduledEmails = async (calEvent: CalendarEvent) => {

export const sendRescheduledEmails = async (calEvent: CalendarEvent) => {
const emailsToSend: Promise<unknown>[] = [];

const clonedEvent = cloneDeep(calEvent);

// @TODO: we should obtain who is rescheduling the event and send them a different email
emailsToSend.push(
...calEvent.attendees.map((attendee) => {
Expand All @@ -93,14 +96,29 @@ export const sendRescheduledEmails = async (calEvent: CalendarEvent) => {
emailsToSend.push(
new Promise((resolve, reject) => {
try {
const scheduledEmail = new OrganizerRescheduledEmail(calEvent);
const scheduledEmail = new OrganizerRescheduledEmail(clonedEvent);
resolve(scheduledEmail.sendEmail());
} catch (e) {
reject(console.error("OrganizerRescheduledEmail.sendEmail failed", e));
}
})
);

if (clonedEvent.team) {
for (const teamMember of clonedEvent.team.members) {
emailsToSend.push(
new Promise((resolve, reject) => {
try {
const scheduledEmail = new OrganizerRescheduledEmail(clonedEvent, undefined, teamMember);
resolve(scheduledEmail.sendEmail());
} catch (e) {
reject(console.error("OrganizerRescheduledEmail.sendEmail failed", e));
}
})
);
hariombalhara marked this conversation as resolved.
Show resolved Hide resolved
}
}

await Promise.all(emailsToSend);
};

Expand Down
10 changes: 1 addition & 9 deletions packages/emails/templates/organizer-rescheduled-email.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,7 @@ import OrganizerScheduledEmail from "./organizer-scheduled-email";

export default class OrganizerRescheduledEmail extends OrganizerScheduledEmail {
protected getNodeMailerPayload(): Record<string, unknown> {
const toAddresses = [this.calEvent.organizer.email];
if (this.calEvent.team) {
this.calEvent.team.members.forEach((member) => {
const memberAttendee = this.calEvent.attendees.find((attendee) => attendee.name === member);
if (memberAttendee) {
toAddresses.push(memberAttendee.email);
}
});
}
const toAddresses = [this.teamMember?.email || this.calEvent.organizer.email];

return {
icalEvent: {
Expand Down
8 changes: 0 additions & 8 deletions packages/emails/templates/organizer-scheduled-email.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,6 @@ export default class OrganizerScheduledEmail extends BaseEmail {

protected getNodeMailerPayload(): Record<string, unknown> {
const toAddresses = [this.teamMember?.email || this.calEvent.organizer.email];
// if (this.calEvent.team) {
// this.calEvent.team.members.forEach((member) => {
// const memberAttendee = this.calEvent.attendees.find((attendee) => attendee.name === member);
// if (memberAttendee) {
// toAddresses.push(memberAttendee.email);
// }
// });
// }

return {
icalEvent: {
Expand Down
33 changes: 23 additions & 10 deletions packages/features/bookings/lib/handleNewBooking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,10 @@ async function handler(req: NextApiRequest & { userId?: number | undefined }) {

if (!eventType) throw new HttpError({ statusCode: 404, message: "eventType.notFound" });

const isTeamEventType =
eventType.schedulingType === SchedulingType.COLLECTIVE ||
eventType.schedulingType === SchedulingType.ROUND_ROBIN;

const paymentAppData = getPaymentAppData(eventType);

// Check if required custom inputs exist
Expand Down Expand Up @@ -491,12 +495,23 @@ async function handler(req: NextApiRequest & { userId?: number | undefined }) {
language: { translate: tAttendees, locale: language ?? "en" },
},
];
const guests = (reqBody.guests || []).map((guest) => ({
email: guest,
name: "",
timeZone: reqBody.timeZone,
language: { translate: tGuests, locale: "en" },
}));

const guests = (reqBody.guests || []).reduce((guestArray, guest) => {
// If it's a team event, remove the team member from guests
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On rescheduling, team members are stored as guests on the booking page. We need to remove them as guests and add them back as team members

if (isTeamEventType) {
if (users.some((user) => user.email === guest)) {
return guestArray;
} else {
guestArray.push({
email: guest,
name: "",
timeZone: reqBody.timeZone,
language: { translate: tGuests, locale: "en" },
});
}
}
return guestArray;
}, [] as typeof invitee);

const seed = `${organizerUser.username}:${dayjs(reqBody.start).utc().format()}:${new Date().getTime()}`;
const uid = translator.fromUUID(uuidv5(seed, uuidv5.URL));
Expand Down Expand Up @@ -715,10 +730,7 @@ async function handler(req: NextApiRequest & { userId?: number | undefined }) {
});
}

if (
eventType.schedulingType === SchedulingType.COLLECTIVE ||
eventType.schedulingType === SchedulingType.ROUND_ROBIN
) {
if (isTeamEventType) {
evt.team = {
members: teamMembers,
name: eventType.team?.name || "Nameless",
Expand Down Expand Up @@ -977,6 +989,7 @@ async function handler(req: NextApiRequest & { userId?: number | undefined }) {
evt.description = eventType.description;

results = updateManager.results;
console.log("🚀 ~ file: handleNewBooking.ts:992 ~ handler ~ results", results);
referencesToCreate = updateManager.referencesToCreate;
if (results.length > 0 && results.some((res) => !res.success)) {
const error = {
Expand Down