Skip to content

Commit

Permalink
Merge pull request #4847 from bcgov/feat/4846
Browse files Browse the repository at this point in the history
fix(4846): send emails when signing eMOU on existing products
  • Loading branch information
junminahn authored Feb 4, 2025
2 parents 1ec031d + 8af780a commit b549208
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { RequestType, TaskStatus, TaskType } from '@prisma/client';
import { Prisma, RequestType, TaskStatus, TaskType } from '@prisma/client';
import { z } from 'zod';
import { GlobalRole } from '@/constants';
import createApiHandler from '@/core/api-handler';
Expand Down Expand Up @@ -44,13 +44,14 @@ export const POST = apiHandler(async ({ pathParams, body, session }) => {
tasks.close(TaskType.SIGN_PUBLIC_CLOUD_MOU, { licencePlate, session }),
]);

const request = await prisma.publicCloudRequest.findFirst({
where: { type: RequestType.CREATE, licencePlate, active: true },
const recentRequest = await prisma.publicCloudRequest.findFirst({
where: { licencePlate, OR: [{ type: RequestType.CREATE, active: true }, { active: false }] },
include: publicCloudRequestDetailInclude,
orderBy: { createdAt: Prisma.SortOrder.desc },
});

if (request) {
const requestDecorated = await models.publicCloudRequest.decorate(request, session, true);
if (recentRequest) {
const requestDecorated = await models.publicCloudRequest.decorate(recentRequest, session, true);
await tasks.create(TaskType.REVIEW_PUBLIC_CLOUD_MOU, { billing: billingUpdated, request: requestDecorated });
}

Expand Down
13 changes: 9 additions & 4 deletions app/emails/_templates/public-cloud/BillingReviewerMou.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,15 @@ interface Props {
export default function BillingReviewerMou({ request }: Props) {
if (!request) return <></>;

const { name, expenseAuthority, billing } = request.decisionData;

const { licencePlate, decisionData, active } = request;
const { name, expenseAuthority, billing } = decisionData;
const { accountCoding } = billing;

const productExists = !active;
const linkUrl = productExists
? `/public-cloud/products/${licencePlate}/edit`
: `/public-cloud/requests/${request.id}/request`;

return (
<PublicCloudLayout showFooter>
<Heading className="text-lg">eMOU review request</Heading>
Expand All @@ -25,9 +30,9 @@ export default function BillingReviewerMou({ request }: Props) {
the product <span className="font-bold">{name}</span> on the Public Cloud.
</Text>

<LinkButton href={`/public-cloud/requests/${request.id}/request`}>Review Request</LinkButton>
<LinkButton href={linkUrl}>Review Request</LinkButton>

<ProductDetails product={request.decisionData} />
<ProductDetails product={decisionData} />

<div>
<Text className="mb-2 font-semibold h-4">Account Coding:</Text>
Expand Down
9 changes: 4 additions & 5 deletions app/services/db/tasks/review-public-cloud-mou.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@ import { Session } from 'next-auth';
import { GlobalPermissions, GlobalRole } from '@/constants';
import prisma from '@/core/prisma';
import { sendBillingReviewerMou } from '@/services/ches/public-cloud/emails';
import { BillingGetPayload } from '@/types/billing';
import { PublicCloudRequestDetailDecorated } from '@/types/public-cloud';

const type = TaskType.REVIEW_PUBLIC_CLOUD_MOU;

export interface CreateReviewPublicCloudMouTaskData {
billing: BillingGetPayload;
request?: PublicCloudRequestDetailDecorated;
request: PublicCloudRequestDetailDecorated;
}

export async function createReviewPublicCloudMouTask(data: CreateReviewPublicCloudMouTaskData) {
const { billing, request } = data;
const { request } = data;
const { billing } = request.decisionData;

if (!billing.signed || billing.approved) {
return null;
Expand All @@ -31,7 +30,7 @@ export async function createReviewPublicCloudMouTask(data: CreateReviewPublicClo
},
});

const emailProm = request ? sendBillingReviewerMou(request) : null;
const emailProm = sendBillingReviewerMou(request);

const [task] = await Promise.all([taskProm, emailProm]);
return task;
Expand Down

0 comments on commit b549208

Please sign in to comment.