Skip to content

Commit 34c4bfb

Browse files
authored
Merge pull request #4045 from Northeastern-Electric-Racing/remove_rr_material_link
removed rr link on materials
2 parents a4708e2 + 7622db1 commit 34c4bfb

16 files changed

Lines changed: 153 additions & 285 deletions

File tree

src/backend/src/controllers/projects.controllers.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,7 @@ export default class ProjectsController {
207207
price,
208208
subtotal,
209209
linkUrl,
210-
notes,
211-
reimbursementRequestId
210+
notes
212211
} = req.body;
213212
const wbsNum = validateWBS(req.params.wbsNum as string);
214213
const material = await BillOfMaterialsService.createMaterial(
@@ -227,8 +226,7 @@ export default class ProjectsController {
227226
notes,
228227
assemblyId,
229228
pdmFileName,
230-
unitName,
231-
reimbursementRequestId
229+
unitName
232230
);
233231
res.status(200).json(material);
234232
} catch (error: unknown) {
@@ -386,8 +384,7 @@ export default class ProjectsController {
386384
price,
387385
subtotal,
388386
linkUrl,
389-
notes,
390-
reimbursementRequestId
387+
notes
391388
} = req.body;
392389
const updatedMaterial = await BillOfMaterialsService.editMaterial(
393390
req.currentUser,
@@ -405,8 +402,7 @@ export default class ProjectsController {
405402
notes,
406403
unitName,
407404
assemblyId,
408-
pdmFileName,
409-
reimbursementRequestId
405+
pdmFileName
410406
);
411407
res.status(200).json(updatedMaterial);
412408
} catch (error: unknown) {

src/backend/src/prisma-query-args/bom.query-args.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Prisma } from '@prisma/client';
22
import { getUserQueryArgs } from './user.query-args.js';
3-
import { getReimbursementRequestQueryArgs } from './reimbursement-requests.query-args.js';
43

54
export type AssemblyQueryArgs = ReturnType<typeof getAssemblyQueryArgs>;
65

@@ -25,20 +24,42 @@ export const getMaterialQueryArgs = (organizationId: string) =>
2524
materialType: true,
2625
unit: true,
2726
manufacturer: true,
28-
reimbursementProducts: false,
29-
reimbursementRequest: getReimbursementRequestQueryArgs(organizationId)
27+
reimbursementProducts: {
28+
where: { dateDeleted: null },
29+
select: {
30+
dateDeleted: true,
31+
reimbursementRequest: {
32+
select: {
33+
reimbursementRequestId: true,
34+
identifier: true,
35+
dateDeleted: true
36+
}
37+
}
38+
}
39+
}
3040
}
3141
});
3242

3343
export type MaterialPreviewQueryArgs = ReturnType<typeof getMaterialPreviewQueryArgs>;
3444

35-
export const getMaterialPreviewQueryArgs = (organizationId: string) =>
45+
export const getMaterialPreviewQueryArgs = (_organizationId: string) =>
3646
Prisma.validator<Prisma.MaterialDefaultArgs>()({
3747
include: {
3848
unit: true,
3949
manufacturer: true,
4050
materialType: true,
41-
reimbursementProducts: false,
42-
reimbursementRequest: getReimbursementRequestQueryArgs(organizationId)
51+
reimbursementProducts: {
52+
where: { dateDeleted: null },
53+
select: {
54+
dateDeleted: true,
55+
reimbursementRequest: {
56+
select: {
57+
reimbursementRequestId: true,
58+
identifier: true,
59+
dateDeleted: true
60+
}
61+
}
62+
}
63+
}
4364
}
4465
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
Warnings:
3+
4+
- You are about to drop the column `reimbursementRequestId` on the `Material` table. All the data in the column will be lost.
5+
6+
*/
7+
-- DropForeignKey
8+
ALTER TABLE "Material" DROP CONSTRAINT "Material_reimbursementRequestId_fkey";
9+
10+
-- DropIndex
11+
DROP INDEX "Material_reimbursementRequestId_idx";
12+
13+
-- AlterTable
14+
ALTER TABLE "Material" DROP COLUMN "reimbursementRequestId";

src/backend/src/prisma/schema.prisma

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,6 @@ model Reimbursement_Request {
756756
organizationId String
757757
organization Organization @relation(fields: [organizationId], references: [organizationId])
758758
notificationSlackThreads Message_Info[]
759-
materials Material[]
760759
reimbursementComments Reimbursement_Request_Comment[]
761760
assigneeId String?
762761
assignee User? @relation(name: "reimbursementRequestAssignee", fields: [assigneeId], references: [userId])
@@ -1016,14 +1015,11 @@ model Material {
10161015
subtotal Int?
10171016
linkUrl String
10181017
notes String?
1019-
reimbursementRequest Reimbursement_Request? @relation(fields: [reimbursementRequestId], references: [reimbursementRequestId])
1020-
reimbursementRequestId String?
10211018
reimbursementProducts Reimbursement_Product[]
10221019
10231020
@@index([assemblyId])
10241021
@@index([materialTypeId])
10251022
@@index([manufacturerId])
1026-
@@index([reimbursementRequestId])
10271023
@@index([wbsElementId])
10281024
}
10291025

src/backend/src/prisma/seed.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,7 +2312,6 @@ const performSeed: () => Promise<void> = async () => {
23122312
'Here are some notes',
23132313
assembly1.assemblyId,
23142314
undefined,
2315-
undefined,
23162315
undefined
23172316
);
23182317

@@ -2336,7 +2335,6 @@ const performSeed: () => Promise<void> = async () => {
23362335
'Here are some more notes',
23372336
undefined,
23382337
undefined,
2339-
undefined,
23402338
undefined
23412339
);
23422340

@@ -2359,9 +2357,7 @@ const performSeed: () => Promise<void> = async () => {
23592357
50,
23602358
undefined,
23612359
undefined,
2362-
undefined,
2363-
undefined,
2364-
seededReimbursementRequests[0]?.reimbursementRequestId
2360+
undefined
23652361
);
23662362

23672363
// Need to do this because the design review cannot be scheduled for a past day

src/backend/src/services/boms.services.ts

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ export default class BillOfMaterialsService {
6161
* @param assemblyId the id of the Assembly for the material (optional)
6262
* @param pdmFileName the name of the pdm file for the material (optional)
6363
* @param unitName the name of the Quantity Unit the quantity is measured in (optional)
64-
* @param reimbursementRequestId the id of the Reimbursement Request for the material (optional)
6564
* @returns the created material
6665
*/
6766
static async createMaterial(
@@ -80,8 +79,7 @@ export default class BillOfMaterialsService {
8079
notes?: string,
8180
assemblyId?: string,
8281
pdmFileName?: string,
83-
unitName?: string,
84-
reimbursementRequestId?: string
82+
unitName?: string
8583
): Promise<Material> {
8684
const project = await ProjectsService.getSingleProjectWithQueryArgs(wbsNumber, organization);
8785

@@ -115,16 +113,6 @@ export default class BillOfMaterialsService {
115113
if (!unit) throw new NotFoundException('Unit', unitName);
116114
}
117115

118-
if (reimbursementRequestId) {
119-
const reimbursementRequest = await prisma.reimbursement_Request.findUnique({
120-
where: { reimbursementRequestId, dateDeleted: null }
121-
});
122-
123-
if (!reimbursementRequest) {
124-
throw new NotFoundException('Reimbursement Request', reimbursementRequestId);
125-
}
126-
}
127-
128116
const perms =
129117
(await userHasPermission(creator.userId, organization.organizationId, isLeadership)) ||
130118
isUserPartOfTeams(project.teams, creator);
@@ -148,8 +136,7 @@ export default class BillOfMaterialsService {
148136
linkUrl,
149137
notes,
150138
dateCreated: new Date(),
151-
wbsElementId: project.wbsElementId,
152-
reimbursementRequestId
139+
wbsElementId: project.wbsElementId
153140
},
154141
...getMaterialQueryArgs(organization.organizationId)
155142
});
@@ -628,7 +615,6 @@ export default class BillOfMaterialsService {
628615
* @param unitName the unit name of the edited material (optional)
629616
* @param assemblyId the assembly id of the edited material (optional)
630617
* @param pdmFileName the pdm file name of the edited material (optional)
631-
* @param reimbursementRequestId the id of the Reimbursement Request for the material (optional)
632618
* @throws if permission denied or material's wbsElement is undefined/deleted
633619
* @returns the updated material
634620
*/
@@ -648,8 +634,7 @@ export default class BillOfMaterialsService {
648634
notes?: string,
649635
unitName?: string,
650636
assemblyId?: string,
651-
pdmFileName?: string,
652-
reimbursementRequestId?: string
637+
pdmFileName?: string
653638
): Promise<Material> {
654639
const material = await BillOfMaterialsService.getSingleMaterialWithQueryArgs(materialId, organization);
655640

@@ -679,16 +664,6 @@ export default class BillOfMaterialsService {
679664
if (!unit) throw new NotFoundException('Unit', unitName);
680665
}
681666

682-
if (reimbursementRequestId) {
683-
const reimbursementRequest = await prisma.reimbursement_Request.findUnique({
684-
where: { reimbursementRequestId, dateDeleted: null }
685-
});
686-
687-
if (!reimbursementRequest) {
688-
throw new NotFoundException('Reimbursement Request', reimbursementRequestId);
689-
}
690-
}
691-
692667
let manufacturer = null;
693668
if (manufacturerName) {
694669
manufacturer = await BillOfMaterialsService.getSingleManufacturerWithQueryArgs(manufacturerName, organization);
@@ -710,8 +685,7 @@ export default class BillOfMaterialsService {
710685
notes,
711686
wbsElementId: project.wbsElementId,
712687
assemblyId,
713-
pdmFileName,
714-
reimbursementRequestId
688+
pdmFileName
715689
},
716690
...getMaterialQueryArgs(organization.organizationId)
717691
});

src/backend/src/transformers/material.transformer.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Prisma } from '@prisma/client';
22
import { Assembly, Material, MaterialPreview, MaterialStatus } from 'shared';
33
import { AssemblyQueryArgs, MaterialPreviewQueryArgs, MaterialQueryArgs } from '../prisma-query-args/bom.query-args.js';
44
import { userTransformer } from './user.transformer.js';
5-
import { reimbursementRequestTransformer } from './reimbursement-requests.transformer.js';
65

76
export const assemblyTransformer = (assembly: Prisma.AssemblyGetPayload<AssemblyQueryArgs>): Assembly => {
87
return {
@@ -43,9 +42,13 @@ export const materialTransformer = (material: Prisma.MaterialGetPayload<Material
4342
}
4443
: undefined,
4544
notes: material.notes ?? undefined,
46-
reimbursementRequest: material.reimbursementRequest
47-
? reimbursementRequestTransformer(material.reimbursementRequest)
48-
: undefined
45+
reimbursementRequests: Array.from(
46+
new Map(
47+
material.reimbursementProducts
48+
.filter((p) => p.reimbursementRequest && !p.reimbursementRequest.dateDeleted)
49+
.map((p) => [p.reimbursementRequest!.reimbursementRequestId, p.reimbursementRequest!])
50+
).values()
51+
)
4952
};
5053
};
5154

@@ -66,8 +69,12 @@ export const materialPreviewTransformer = (
6669
quantity: material.quantity ?? undefined,
6770
price: material.price ?? undefined,
6871
subtotal: material.subtotal ?? undefined,
69-
reimbursementRequest: material.reimbursementRequest
70-
? reimbursementRequestTransformer(material.reimbursementRequest)
71-
: undefined
72+
reimbursementRequests: Array.from(
73+
new Map(
74+
material.reimbursementProducts
75+
.filter((p) => p.reimbursementRequest && !p.reimbursementRequest.dateDeleted)
76+
.map((p) => [p.reimbursementRequest!.reimbursementRequestId, p.reimbursementRequest!])
77+
).values()
78+
)
7279
};
7380
};

0 commit comments

Comments
 (0)