Skip to content

Commit

Permalink
Merge pull request #4874 from bcgov/bug/4872
Browse files Browse the repository at this point in the history
  • Loading branch information
junminahn authored Feb 6, 2025
2 parents fdb34d8 + 326be8b commit 6bd386f
Show file tree
Hide file tree
Showing 21 changed files with 67 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ export const POST = apiHandler(async ({ pathParams, body, session }) => {
include: publicCloudRequestDetailInclude,
});

if (request) {
if (request?.decisionData.billingId) {
const billing = await prisma.billing.update({
where: {
id: request?.decisionData.billingId,
id: request.decisionData.billingId,
},
data: {
approved: true,
Expand Down
2 changes: 1 addition & 1 deletion app/app/api/public-cloud/products/_operations/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ export default async function createOp({ session, body }: { session: Session; bo
const proms: any[] = [];

// Assign a task to the expense authority for new billing
if (newRequest.decisionData.expenseAuthorityId && !newRequest.decisionData.billing.signed) {
if (newRequest.decisionData.expenseAuthorityId && !newRequest.decisionData.billing?.signed) {
const taskProm = tasks.create(TaskType.SIGN_PUBLIC_CLOUD_MOU, { request: newRequest });
proms.push(taskProm);
} else {
Expand Down
2 changes: 1 addition & 1 deletion app/app/api/public-cloud/products/_operations/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export default async function updateOp({
status: product.status,
provider: product.provider,
createdAt: product.createdAt,
billing: { connect: { id: product.billingId } },
billing: product.billingId ? { connect: { id: product.billingId } } : undefined,
projectOwner: { connect: { email: body.projectOwner.email } },
primaryTechnicalLead: { connect: { email: body.primaryTechnicalLead.email } },
secondaryTechnicalLead: body.secondaryTechnicalLead
Expand Down
53 changes: 31 additions & 22 deletions app/app/api/public-cloud/requests/[id]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ export const PUT = apiHandler(async ({ pathParams, session }) => {
return UnauthorizedResponse();
}

const { data: updatedRequest } = await models.publicCloudRequest.update(
{
const { type, licencePlate, requestDataId, decisionDataId } = request;

const proms: any[] = [
prisma.publicCloudRequest.update({
where: {
id,
decisionStatus: DecisionStatus.PENDING,
Expand All @@ -49,32 +51,39 @@ export const PUT = apiHandler(async ({ pathParams, session }) => {
select: {
licencePlate: true,
},
},
session,
);

const { licencePlate } = updatedRequest as unknown as PublicCloudRequest;

if (request?.type === RequestType.CREATE) {
await prisma.billing.deleteMany({
where: {
licencePlate,
},
});
}),
createEvent(EventType.CANCEL_PUBLIC_CLOUD_REQUEST, session.user.id, { requestId: id }),
];

await prisma.task.deleteMany({
where: {
if (type === RequestType.CREATE) {
proms.push(
prisma.publicCloudRequestedProject.updateMany({
where: {
id: { in: [requestDataId, decisionDataId] },
},
data: {
equals: {
licencePlate,
billingId: null,
},
}),
prisma.billing.deleteMany({
where: {
licencePlate,
},
}),
prisma.task.deleteMany({
where: {
type: { in: [TaskType.SIGN_PUBLIC_CLOUD_MOU, TaskType.REVIEW_PUBLIC_CLOUD_MOU] },
data: {
equals: {
licencePlate,
},
},
},
type: TaskType.SIGN_PUBLIC_CLOUD_MOU,
},
});
}),
);
}

await createEvent(EventType.CANCEL_PUBLIC_CLOUD_REQUEST, session.user.id, { requestId: id });
await Promise.all(proms);

return OkResponse(true);
});
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export default publicCloudProductEdit(({}) => {
defaultValues: {
...snap.currentProduct,
isAgMinistryChecked: true,
accountCoding: snap.currentProduct?.billing.accountCoding,
accountCoding: snap.currentProduct?.billing?.accountCoding,
},
});

Expand Down Expand Up @@ -131,7 +131,7 @@ export default publicCloudProductEdit(({}) => {
label: 'Billing (Account coding)',
description: '',
Component: AccountCoding,
componentArgs: { accountCodingInitial: snap.currentProduct?.billing.accountCoding, disabled: true },
componentArgs: { accountCodingInitial: snap.currentProduct?.billing?.accountCoding, disabled: true },
},
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export default publicCloudRequestOriginal(({ router }) => {
description: '',
Component: AccountCoding,
componentArgs: {
accountCodingInitial: snap.currentRequest.originalData?.billing.accountCoding,
accountCodingInitial: snap.currentRequest.originalData?.billing?.accountCoding,
disabled: true,
},
},
Expand Down
2 changes: 1 addition & 1 deletion app/app/public-cloud/requests/(request)/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export default publicCloudRequest(({ getPathParams }) => {
label: 'Billing (account coding)',
description: '',
Component: AccountCoding,
componentArgs: { accountCodingInitial: request.decisionData.billing.accountCoding, disabled: true },
componentArgs: { accountCodingInitial: request.decisionData.billing?.accountCoding, disabled: true },
},
];

Expand Down
6 changes: 5 additions & 1 deletion app/components/billing/PublicCloudBillingDownloadButton.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client';

import { Alert, Button } from '@mantine/core';
import { Button } from '@mantine/core';
import { Provider } from '@prisma/client';
import { useState } from 'react';
import { getEmouFileName } from '@/helpers/emou';
Expand All @@ -10,13 +10,17 @@ import { Product } from './types';
export default function BillingDownloadButton({ product }: { product: Product }) {
const [loading, setLoading] = useState(false);

if (!product.billing) return null;

return (
<Button
loading={loading}
color="primary"
size="xs"
className="mt-2"
onClick={async () => {
if (!product.billing) return;

setLoading(true);
await downloadBilling(
product.billing.accountCoding,
Expand Down
4 changes: 4 additions & 0 deletions app/components/billing/PublicCloudBillingInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export default function PublicCloudBillingInfo({
const { data: session } = useSession();
const { licencePlate, billing } = product;

if (!billing) return null;

let content: ReactNode = null;
if (billing.approved) {
content = (
Expand Down Expand Up @@ -94,6 +96,8 @@ export default function PublicCloudBillingInfo({
size="xs"
className="mt-2"
onClick={async () => {
if (!product.billingId) return;

const res = await openPublicCloudMouReviewModal<{ confirmed: boolean }>({
licencePlate: product.licencePlate,
billingId: product.billingId,
Expand Down
2 changes: 1 addition & 1 deletion app/components/modal/publicCloudProductEditSubmit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export const openPublicCloudProductEditSubmitModal = createModal<ModalProps, Mod

useEffect(() => {
const _changes = comparePublicProductData(
{ ...snap.currentProduct, accountCoding: snap.currentProduct?.billing.accountCoding },
{ ...snap.currentProduct, accountCoding: snap.currentProduct?.billing?.accountCoding },
originalProductData,
);
setChange(_changes);
Expand Down
2 changes: 1 addition & 1 deletion app/emails/_components/ProviderDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export default function ProviderDetails({ product }: Props) {
</Text>
</div>
<Text className="font-semibold mt-2 mb-0">Account Coding</Text>
<Text className="mt-0">{billing.accountCoding}</Text>
<Text className="mt-0">{billing?.accountCoding ?? ''}</Text>
</div>
</>
);
Expand Down
4 changes: 2 additions & 2 deletions app/emails/_components/public-cloud/Changes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ export default function Changes({ request }: { request: PublicCloudRequestDetail
<BudgetChanges
budgetCurrent={request.originalData.budget}
budgetRequested={request.decisionData.budget}
accountCodingCurrent={request.originalData.billing.accountCoding}
accountCodingRequested={request.decisionData.billing.accountCoding}
accountCodingCurrent={request.originalData.billing?.accountCoding ?? ''}
accountCodingRequested={request.decisionData.billing?.accountCoding ?? ''}
/>
</>
);
Expand Down
2 changes: 2 additions & 0 deletions app/emails/_templates/public-cloud/BillingReviewerMou.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ export default function BillingReviewerMou({ request }: Props) {

const { licencePlate, decisionData, active } = request;
const { name, expenseAuthority, billing } = decisionData;
if (!billing) return <></>;

const { accountCoding } = billing;

const productExists = !active;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export default function EmouServiceAgreement({ request }: Props) {
if (!request) return <></>;

const { name, billing } = request.decisionData;
if (!billing) return <></>;

const { accountCoding } = billing;

Expand Down
1 change: 1 addition & 0 deletions app/emails/_templates/public-cloud/ExpenseAuthorityMou.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export default function ExpenseAuthorityMou({ request }: Props) {
if (!request) return <></>;

const { name, expenseAuthority, billing } = request.decisionData;
if (!billing) return <></>;

const { accountCoding } = billing;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export default function ExpenseAuthorityMouProduct({ product }: Props) {
if (!product) return <></>;

const { name, expenseAuthority, billing } = product;
if (!billing) return <></>;

const { accountCoding } = billing;

Expand Down
8 changes: 4 additions & 4 deletions app/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,8 @@ model PublicCloudProject {
status ProjectStatus
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
billingId String @db.ObjectId
billing Billing @relation("billing", fields: [billingId], references: [id])
billingId String? @db.ObjectId
billing Billing? @relation("billing", fields: [billingId], references: [id])
budget Budget
projectOwnerId String @db.ObjectId
projectOwner User @relation("projectOwner", fields: [projectOwnerId], references: [id])
Expand Down Expand Up @@ -325,8 +325,8 @@ model PublicCloudRequestedProject {
description String
status ProjectStatus
createdAt DateTime @default(now())
billingId String @db.ObjectId
billing Billing @relation("billing", fields: [billingId], references: [id])
billingId String? @db.ObjectId
billing Billing? @relation("billing", fields: [billingId], references: [id])
budget Budget
projectOwnerId String @db.ObjectId
projectOwner User @relation("projectOwner", fields: [projectOwnerId], references: [id])
Expand Down
3 changes: 2 additions & 1 deletion app/services/ches/public-cloud/emails.ts
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,9 @@ export async function sendBillingReviewerMou(request: PublicCloudRequestDetailDe
}

export async function sendEmouServiceAgreement(request: PublicCloudRequestDetailDecorated) {
const content = await getContent(EmouServiceAgreementTemplate({ request }));
if (!request.decisionData.billing) return;

const content = await getContent(EmouServiceAgreementTemplate({ request }));
const emouPdfBuff = await generateEmouPdf(request.decisionData, request.decisionData.billing);
const billingReviewerEmails = await findUserEmailsByAuthRole(GlobalRole.BillingReviewer);

Expand Down
3 changes: 2 additions & 1 deletion app/services/db/tasks/review-public-cloud-mou.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function isValidData(data: CreateReviewPublicCloudMouTaskData) {
const { request } = data;
const { billing } = request.decisionData;

if (!billing.signed || billing.approved) {
if (!billing?.signed || billing?.approved) {
return false;
}

Expand All @@ -32,6 +32,7 @@ export async function createReviewPublicCloudMouTask(data: CreateReviewPublicClo
if (!isValidData(data)) return null;

const { billing } = data.request.decisionData;
if (!billing) return null;

const taskProm = prisma.task.create({
data: {
Expand Down
2 changes: 1 addition & 1 deletion app/services/db/tasks/sign-public-cloud-mou.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ function isValidData(data: CreateSignPublicCloudMouTaskData) {
const { request } = data;
const { decisionData } = request;

if (decisionData.billing.signed || decisionData.billing.approved) {
if (decisionData.billing?.signed || decisionData.billing?.approved) {
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion app/services/nats/public-cloud/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default function createPublicCloudNatsMessage(
ministry_name: decisionData.ministry,
request_type: request.type,
project_name: decisionData.name,
account_coding: decisionData.billing.accountCoding,
account_coding: decisionData.billing?.accountCoding,
budgets: decisionData.budget,
enterprise_support: {
prod: true,
Expand Down

0 comments on commit 6bd386f

Please sign in to comment.