Skip to content

Commit

Permalink
added Sponsorship fund email flow
Browse files Browse the repository at this point in the history
  • Loading branch information
willi-li-am committed Dec 31, 2023
1 parent 29996c2 commit f46f26f
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 4 deletions.
67 changes: 66 additions & 1 deletion backend/emails/emails.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const currencyFormatter = new Intl.NumberFormat('en-CA', {
})

const getEmailToSection = async (reporter_id, recipients) => {
const emailToSet = new Set(['jw4he@watonomous.ca', 'v2zheng@watonomous.ca'])
const emailToSet = new Set(['william.li@watonomous.ca'])

if (recipients.includes(EMAIL_RECIPIENTS.admin)) {
// TODO: use ADMIN_IDENTIFIERS (rename to ADMIN_EMAILS) after migrating to new onboarding data
Expand Down Expand Up @@ -86,6 +86,24 @@ const getUPRTicketInfoHTML = async (upr) => {
`
}

const getSFTicketInfoHTML = async (sf) => {
const reporter = await getUserByUID(sf.reporter_id)
return `
<p>
Ticket Code: ${sf.code} <br />
Sponsorship Fund: ${sf.name} <br />
Allocated Funding: ${sf.funding_allocation} <br/ >
Funding Spent: ${sf.funding_spent} <br />
${sf.proposal_url? `Proposal URL: ${sf.proposal_url} <br />` : ``}
${sf.presentation_url? `Presentation URL: ${sf.presentation_url} <br />` : ``}
Status: ${sf.status} <br />
Reporter: ${reporter.displayName} &lt;${reporter.email}&gt; <br />
Created: ${new Date(sf.createdAt).toDateString()} <br />
Claim Deadline: ${new Date(sf.claim_deadline).toDateString()} <br />
</p>
`
}

const getTicketLinkHTML = (ticketPath) => `
<p>
View the ticket here:
Expand Down Expand Up @@ -255,6 +273,50 @@ const sendEmailPPRReimbursedToReporter = async (ppr) => {
})
}

const sendEmailSFReimbursementRequestToCoordinator = async (sf) => {
const Subject = `[Action Needed] Submit Reimbursement Request ${sf.codename}`
const HTMLPart = getMainMessageHTML(`Claim has been submitted for ${sf.codename}! Please review it and submit a reimbursement request. Visit the ticket link below to confirm you have submitted the reimbursement request.`)
+ (await getSFTicketInfoHTML(sf)) + getTicketLinkHTML(sf.path)
const To = await getEmailToSection(sf.reporter_id, [
EMAIL_RECIPIENTS.coordinator,
])
await sendEmail({
Subject,
HTMLPart,
To,
})
}

const sendEmailSFConfirmReimbursementSubmitToCoordinator = async (sf) => {
const Subject = `[Action Needed] Confirm Reimbursement Received ${sf.codename}`
const HTMLPart = getMainMessageHTML(`Please visit the ticket link below to confirm you have received the reimbursement for ${sf.codename}.`)
+ (await getSFTicketInfoHTML(sf)) + getTicketLinkHTML(sf.path)
const To = await getEmailToSection(sf.reporter_id, [
EMAIL_RECIPIENTS.coordinator,
])
await sendEmail({
Subject,
HTMLPart,
To,
})
}

const sendEmailSFReimbursementReceivedToTeam = async (sf) => {
const Subject = `[Reimbursed] ${sf.codename}`
const HTMLPart = getMainMessageHTML(`${sf.codename} has been reimbursed.`)
+ (await getSFTicketInfoHTML(sf)) + getTicketLinkHTML(sf.path)
const To = await getEmailToSection(sf.reporter_id, [
EMAIL_RECIPIENTS.finance,
EMAIL_RECIPIENTS.coordinator,
EMAIL_RECIPIENTS.team_captain,
])
await sendEmail({
Subject,
HTMLPart,
To,
})
}

const PurchaseRequestInvalidated = (purchaseRequestDetails) => {
const { issue, reporter } = purchaseRequestDetails

Expand Down Expand Up @@ -584,6 +646,9 @@ module.exports = {
sendEmailPPRCreatedToApprovers,
sendEmailPPRPurchasedAndReceiptsSubmittedToCoordinator,
sendEmailPPRReimbursedToReporter,
sendEmailSFReimbursementRequestToCoordinator,
sendEmailSFConfirmReimbursementSubmitToCoordinator,
sendEmailSFReimbursementReceivedToTeam,
PurchaseRequestInvalidated,
PersonalPurchaseApproved,
UWFinancePurchaseApproved,
Expand Down
2 changes: 1 addition & 1 deletion backend/models/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ const TICKET_ENDPOINTS = Object.freeze({
UPR: '/uwfinancepurchases',
})

const ADMIN_IDENTIFIERS = ['drayside', 'v2zheng', 'jw4he']
const ADMIN_IDENTIFIERS = ['drayside', 'v2zheng', 'jw4he', 'william.li']
const TEAM_CAPTAIN_TITLES = ['Team Captain']
const DIRECTOR_TITLES = ['Director']

Expand Down
22 changes: 20 additions & 2 deletions backend/service/sponsorshipfunds.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const {
getAnnotatedUWFinancePurchasesByIdList,
getAnnotatedSponsorshipFundsByIdList,
} = require('./annotatedGetters')
const { sendEmailSFReimbursementRequestToCoordinator, sendEmailSFConfirmReimbursementSubmitToCoordinator, sendEmailSFReimbursementReceivedToTeam } = require('../emails/emails')

const getAllSponsorshipFunds = () => {
return getAnnotatedSponsorshipFundsByIdList()
Expand Down Expand Up @@ -49,10 +50,27 @@ const createSponsorshipFund = (body) => {
return newSponsorshipFund.save()
}

const updateSponsorshipFund = (id, body) => {
return SponsorshipFund.findByIdAndUpdate(id, body, {
const updateSponsorshipFund = async (id, body) => {
const newSponsorshipFund = await SponsorshipFund.findByIdAndUpdate(id, body, {
new: true,
})

const annotatedSponsorshipFund = await getSponsorshipFund(id)
const status = annotatedSponsorshipFund.status

if (status === "CLAIM_SUBMITTED") {
sendEmailSFReimbursementRequestToCoordinator(annotatedSponsorshipFund)
}

if (status === "SUBMITTED_TO_SF") {
sendEmailSFConfirmReimbursementSubmitToCoordinator(annotatedSponsorshipFund)
}

if (status === "REIMBURSED") {
sendEmailSFReimbursementReceivedToTeam(annotatedSponsorshipFund)
}

return newSponsorshipFund
}

const deleteSponsorshipFund = async (id) => {
Expand Down

0 comments on commit f46f26f

Please sign in to comment.