Skip to content

Commit e27d302

Browse files
authored
Merge pull request #2065 from Northeastern-Electric-Racing/#1941-Slack-Notification-For-Denied-Reimbursement
#1941 send a notif for deny reimbursement
2 parents 003e790 + b5e0f4a commit e27d302

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

src/backend/src/services/reimbursement-requests.services.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import {
5050
} from '../transformers/reimbursement-requests.transformer';
5151
import reimbursementQueryArgs from '../prisma-query-args/reimbursement.query-args';
5252
import { UserWithSettings } from '../utils/auth.utils';
53+
import { sendReimbursementRequestDeniedNotification } from '../utils/slack.utils';
5354

5455
export default class ReimbursementRequestService {
5556
/**
@@ -828,6 +829,14 @@ export default class ReimbursementRequestService {
828829
}
829830
});
830831

832+
const recipientSettings = await prisma.user_Settings.findUnique({
833+
where: { userId: reimbursementRequest.recipientId }
834+
});
835+
836+
if (!recipientSettings) throw new NotFoundException('Reimbursement Request', reimbursementRequestId);
837+
838+
await sendReimbursementRequestDeniedNotification(recipientSettings.slackId, reimbursementRequestId);
839+
831840
return reimbursementStatusTransformer(reimbursementStatus);
832841
}
833842

src/backend/src/utils/slack.utils.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ChangeRequest, daysBetween, Task, User, wbsPipe, WorkPackage } from 'sh
22
import { sendMessage } from '../integrations/slack';
33
import { getUserSlackId } from './users.utils';
44
import prisma from '../prisma/prisma';
5+
import { HttpException } from './errors.utils';
56

67
// build the "due" string for the upcoming deadlines slack message
78
const buildDueString = (daysUntilDeadline: number): string => {
@@ -67,3 +68,24 @@ export const sendSlackTaskAssignedNotification = async (slackId: string, task: T
6768
const linkButtonText = 'View Task';
6869
await sendMessage(slackId, msg, link, linkButtonText);
6970
};
71+
72+
/**
73+
* Send a notification to users that reimbursement request is denied on Slack
74+
* @param slackId the slack id of the assignee
75+
* @param denial the denial if the reimbursement request
76+
*/
77+
export const sendReimbursementRequestDeniedNotification = async (slackId: string, requestId: string): Promise<void> => {
78+
if (process.env.NODE_ENV !== 'production') return; // don't send msgs unless in prod
79+
80+
const msg = `Your reimbursement request has been denied.`;
81+
const link = `https://finishlinebyner.com/finance/reimbursement-requests/${requestId}`;
82+
const linkButtonText = 'View Reimbursement Request';
83+
84+
try {
85+
await sendMessage(slackId, msg, link, linkButtonText);
86+
} catch (error: unknown) {
87+
if (error instanceof Error) {
88+
throw new HttpException(500, `Failed to send slack notification: ${error.message}`);
89+
}
90+
}
91+
};

src/backend/tests/reimbursement-requests.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ import {
3636
wonderwoman,
3737
theVisitor,
3838
aquaman,
39-
greenlantern
39+
greenlantern,
40+
batmanSettings
4041
} from './test-data/users.test-data';
4142
import reimbursementRequestQueryArgs from '../src/prisma-query-args/reimbursement-requests.query-args';
4243
import { Prisma, Reimbursement_Status_Type } from '@prisma/client';
@@ -773,6 +774,7 @@ describe('Reimbursement Requests', () => {
773774
vi.spyOn(prisma.team, 'findUnique').mockResolvedValue(primsaTeam2);
774775
vi.spyOn(prisma.reimbursement_Request, 'findUnique').mockResolvedValue(prismaGiveMeMyMoney3);
775776
vi.spyOn(prisma.reimbursement_Status, 'create').mockResolvedValue(prismaReimbursementStatus);
777+
vi.spyOn(prisma.user_Settings, 'findUnique').mockResolvedValue(batmanSettings);
776778

777779
const reimbursementStatus = await ReimbursementRequestService.denyReimbursementRequest(
778780
prismaGiveMeMyMoney3.reimbursementRequestId,

0 commit comments

Comments
 (0)