Skip to content

Commit eb1cd45

Browse files
authored
Merge branch 'feature/Change-Request-Redesign' into #1637-Change-Request-Overview-Page-Redesign
2 parents 6cb1fe8 + 201bf2d commit eb1cd45

138 files changed

Lines changed: 5461 additions & 2515 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,38 @@ export default class ProjectsController {
2929
static async createProject(req: Request, res: Response, next: NextFunction) {
3030
try {
3131
const user: User = await getCurrentUser(res);
32-
const { crId, carNumber, name, summary, teamId } = req.body;
32+
const {
33+
name,
34+
crId,
35+
carNumber,
36+
teamIds,
37+
budget,
38+
summary,
39+
projectLeadId,
40+
projectManagerId,
41+
links,
42+
goals,
43+
features,
44+
otherConstraints,
45+
rules
46+
} = req.body;
3347

34-
const createdWbsNumber: WbsNumber = await ProjectsService.createProject(user, crId, carNumber, name, summary, [
35-
teamId
36-
]);
48+
const createdWbsNumber: WbsNumber = await ProjectsService.createProject(
49+
user,
50+
crId,
51+
carNumber,
52+
name,
53+
summary,
54+
teamIds,
55+
budget,
56+
links,
57+
rules,
58+
goals,
59+
features,
60+
otherConstraints,
61+
projectLeadId,
62+
projectManagerId
63+
);
3764

3865
return res.status(200).json(wbsPipe(createdWbsNumber));
3966
} catch (error: unknown) {
@@ -321,4 +348,25 @@ export default class ProjectsController {
321348
next(error);
322349
}
323350
}
351+
352+
static async getAllUnits(_req: Request, res: Response, next: NextFunction) {
353+
try {
354+
const user = await getCurrentUser(res);
355+
const units = await ProjectsService.getAllUnits(user);
356+
res.status(200).json(units);
357+
} catch (error: unknown) {
358+
next(error);
359+
}
360+
}
361+
362+
static async createUnit(req: Request, res: Response, next: NextFunction) {
363+
try {
364+
const { name } = req.body;
365+
const user = await getCurrentUser(res);
366+
const createdUnit = await ProjectsService.createUnit(name, user);
367+
res.status(200).json(createdUnit);
368+
} catch (error: unknown) {
369+
next(error);
370+
}
371+
}
324372
}

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

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,23 @@ export default class ReimbursementRequestsController {
5252

5353
static async createReimbursementRequest(req: Request, res: Response, next: NextFunction) {
5454
try {
55-
const { dateOfExpense, vendorId, account, reimbursementProducts, expenseTypeId, totalCost } = req.body;
55+
const {
56+
dateOfExpense,
57+
vendorId,
58+
account,
59+
otherReimbursementProducts,
60+
wbsReimbursementProducts,
61+
expenseTypeId,
62+
totalCost
63+
} = req.body;
5664
const user = await getCurrentUserWithUserSettings(res);
5765
const createdReimbursementRequest = await ReimbursementRequestService.createReimbursementRequest(
5866
user,
5967
dateOfExpense,
6068
vendorId,
6169
account,
62-
reimbursementProducts,
70+
otherReimbursementProducts,
71+
wbsReimbursementProducts,
6372
expenseTypeId,
6473
totalCost
6574
);
@@ -84,8 +93,16 @@ export default class ReimbursementRequestsController {
8493
static async editReimbursementRequest(req: Request, res: Response, next: NextFunction) {
8594
try {
8695
const { requestId } = req.params;
87-
const { dateOfExpense, vendorId, account, expenseTypeId, totalCost, reimbursementProducts, receiptPictures } =
88-
req.body;
96+
const {
97+
dateOfExpense,
98+
vendorId,
99+
account,
100+
expenseTypeId,
101+
totalCost,
102+
otherReimbursementProducts,
103+
wbsReimbursementProducts,
104+
receiptPictures
105+
} = req.body;
89106
const user = await getCurrentUser(res);
90107
const updatedReimbursementRequestId = await ReimbursementRequestService.editReimbursementRequest(
91108
requestId,
@@ -94,7 +111,8 @@ export default class ReimbursementRequestsController {
94111
account,
95112
expenseTypeId,
96113
totalCost,
97-
reimbursementProducts,
114+
otherReimbursementProducts,
115+
wbsReimbursementProducts,
98116
receiptPictures,
99117
user
100118
);
@@ -301,4 +319,16 @@ export default class ReimbursementRequestsController {
301319
next(error);
302320
}
303321
}
322+
323+
static async editVendor(req: Request, res: Response, next: NextFunction) {
324+
try {
325+
const { vendorId } = req.params;
326+
const { name } = req.body;
327+
const submitter = await getCurrentUser(res);
328+
const editVendors = await ReimbursementRequestService.editVendors(name, vendorId, submitter);
329+
res.status(200).json(editVendors);
330+
} catch (error: unknown) {
331+
next(error);
332+
}
333+
}
304334
}

src/backend/src/controllers/work-packages.controllers.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default class WorkPackagesController {
4242
// Create a work package with the given details
4343
static async createWorkPackage(req: Request, res: Response, next: NextFunction) {
4444
try {
45-
const { projectWbsNum, name, crId, startDate, duration, blockedBy, expectedActivities, deliverables } = req.body;
45+
const { name, crId, startDate, duration, blockedBy, expectedActivities, deliverables } = req.body;
4646

4747
let { stage } = req.body;
4848
if (stage === 'NONE') {
@@ -53,7 +53,6 @@ export default class WorkPackagesController {
5353

5454
const wbsString: string = await WorkPackagesService.createWorkPackage(
5555
user,
56-
projectWbsNum,
5756
name,
5857
crId,
5958
stage,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export const assemblyQueryArgs = {
2+
include: {
3+
userCreated: true,
4+
userDeleted: true,
5+
materials: true
6+
}
7+
};
8+
9+
export const materialQueryArgs = {
10+
include: {
11+
assembly: {
12+
...assemblyQueryArgs
13+
},
14+
wbsElement: true,
15+
userCreated: true,
16+
userDeleted: true,
17+
materialType: true,
18+
quantityUnit: true,
19+
manufacturer: true
20+
}
21+
};

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { Prisma } from '@prisma/client';
77

88
const manufacturerQueryArgs = Prisma.validator<Prisma.ManufacturerArgs>()({
99
include: {
10-
materials: true
10+
materials: true,
11+
userCreated: true
1112
}
1213
});
1314

src/backend/src/prisma-query-args/material-type.query-args.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { Prisma } from '@prisma/client';
77

88
const materialTypeQueryArgs = Prisma.validator<Prisma.Material_TypeArgs>()({
99
include: {
10-
materials: true
10+
materials: true,
11+
userCreated: true
1112
}
1213
});
1314

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Prisma } from '@prisma/client';
22
import taskQueryArgs from './tasks.query-args';
33
import linkQueryArgs from './links.query-args';
4+
import { assemblyQueryArgs, materialQueryArgs } from './bom.query-args';
45

56
const projectQueryArgs = Prisma.validator<Prisma.ProjectArgs>()({
67
include: {
@@ -10,7 +11,15 @@ const projectQueryArgs = Prisma.validator<Prisma.ProjectArgs>()({
1011
projectManager: true,
1112
tasks: { where: { dateDeleted: null }, ...taskQueryArgs },
1213
links: { ...linkQueryArgs },
13-
changes: { where: { changeRequest: { dateDeleted: null } }, include: { implementer: true } }
14+
changes: { where: { changeRequest: { dateDeleted: null } }, include: { implementer: true } },
15+
materials: {
16+
where: { dateDeleted: null },
17+
...materialQueryArgs
18+
},
19+
assemblies: {
20+
where: { dateDeleted: null },
21+
...assemblyQueryArgs
22+
}
1423
}
1524
},
1625
teams: { include: { members: true, head: true, leads: true } },
@@ -29,7 +38,13 @@ const projectQueryArgs = Prisma.validator<Prisma.ProjectArgs>()({
2938
projectLead: true,
3039
projectManager: true,
3140
links: { ...linkQueryArgs },
32-
changes: { where: { changeRequest: { dateDeleted: null } }, include: { implementer: true } }
41+
changes: { where: { changeRequest: { dateDeleted: null } }, include: { implementer: true } },
42+
materials: {
43+
...materialQueryArgs
44+
},
45+
assemblies: {
46+
...assemblyQueryArgs
47+
}
3348
}
3449
},
3550
blockedBy: { where: { dateDeleted: null } },
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import { Prisma } from '@prisma/client';
22

3-
const reimbursementProductQueryArgs = Prisma.validator<Prisma.Reimbursement_ProductArgs>()({
3+
export const reimbursementProductReasonQueryArgs = Prisma.validator<Prisma.Reimbursement_Product_ReasonArgs>()({
44
include: {
55
wbsElement: true
66
}
77
});
88

9-
export default reimbursementProductQueryArgs;
9+
export const reimbursementProductQueryArgs = Prisma.validator<Prisma.Reimbursement_ProductArgs>()({
10+
include: {
11+
reimbursementProductReason: { ...reimbursementProductReasonQueryArgs }
12+
}
13+
});

src/backend/src/prisma-query-args/reimbursement-requests.query-args.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Prisma } from '@prisma/client';
2-
import reimbursementProductQueryArgs from './reimbursement-products.query-args';
32
import reimbursementStatusQueryArgs from './reimbursement-statuses.query-args';
43
import receiptQueryArgs from './receipt-query.args';
4+
import { reimbursementProductQueryArgs } from './reimbursement-products.query-args';
55

66
const reimbursementRequestQueryArgs = Prisma.validator<Prisma.Reimbursement_RequestArgs>()({
77
include: {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
Warnings:
3+
4+
- You are about to drop the column `wbsElementId` on the `Reimbursement_Product` table. All the data in the column will be lost.
5+
- A unique constraint covering the columns `[reimbursementProductReasonId]` on the table `Reimbursement_Product` will be added. If there are existing duplicate values, this will fail.
6+
- Added the required column `reimbursementProductReasonId` to the `Reimbursement_Product` table without a default value. This is not possible if the table is not empty.
7+
8+
*/
9+
-- CreateEnum
10+
CREATE TYPE "Other_Reimbursement_Product_Reason" AS ENUM ('TOOLS_AND_EQUIPMENT', 'COMPETITION', 'CONSUMABLES', 'GENERAL_STOCK', 'SUBSCRIPTIONS_AND_MEMBERSHIPS');
11+
12+
-- AlterTable
13+
ALTER TABLE "Reimbursement_Product"
14+
ADD COLUMN "reimbursementProductReasonId" TEXT;
15+
16+
-- CreateTable
17+
CREATE TABLE "Reimbursement_Product_Reason" (
18+
"reimbursementProductReasonId" TEXT NOT NULL,
19+
"wbsElementId" INTEGER,
20+
"otherReason" "Other_Reimbursement_Product_Reason",
21+
"reimbursementProductId" TEXT,
22+
23+
CONSTRAINT "Reimbursement_Product_Reason_pkey" PRIMARY KEY ("reimbursementProductReasonId")
24+
);
25+
26+
INSERT INTO "Reimbursement_Product_Reason" ("reimbursementProductReasonId", "wbsElementId", "reimbursementProductId") SELECT gen_random_uuid(), "wbsElementId", "reimbursementProductId" FROM "Reimbursement_Product";
27+
28+
UPDATE "Reimbursement_Product"
29+
SET "reimbursementProductReasonId" = (
30+
SELECT "reimbursementProductReasonId"
31+
FROM "Reimbursement_Product_Reason"
32+
WHERE "Reimbursement_Product_Reason"."reimbursementProductId" = "Reimbursement_Product"."reimbursementProductId"
33+
);
34+
35+
-- CreateIndex
36+
CREATE UNIQUE INDEX "Reimbursement_Product_reimbursementProductReasonId_key" ON "Reimbursement_Product"("reimbursementProductReasonId");
37+
38+
39+
-- DropForeignKey
40+
ALTER TABLE "Reimbursement_Product" DROP CONSTRAINT "Reimbursement_Product_wbsElementId_fkey";
41+
42+
-- AlterTable
43+
ALTER TABLE "Reimbursement_Product" DROP COLUMN "wbsElementId";
44+
45+
-- AddForeignKey
46+
ALTER TABLE "Reimbursement_Product_Reason" ADD CONSTRAINT "Reimbursement_Product_Reason_wbsElementId_fkey" FOREIGN KEY ("wbsElementId") REFERENCES "WBS_Element"("wbsElementId") ON DELETE SET NULL ON UPDATE CASCADE;
47+
48+
-- AlterTable
49+
ALTER TABLE "Reimbursement_Product" ALTER COLUMN "reimbursementProductReasonId" SET NOT NULL;
50+
51+
-- AddForeignKey
52+
ALTER TABLE "Reimbursement_Product" ADD CONSTRAINT "Reimbursement_Product_reimbursementProductReasonId_fkey" FOREIGN KEY ("reimbursementProductReasonId") REFERENCES "Reimbursement_Product_Reason"("reimbursementProductReasonId") ON DELETE RESTRICT ON UPDATE CASCADE;
53+
54+
-- AlterTable
55+
ALTER TABLE "Reimbursement_Product_Reason"
56+
DROP COLUMN "reimbursementProductId";

0 commit comments

Comments
 (0)