Skip to content

Commit f3648be

Browse files
authored
Merge branch 'feature/Change-Request-Redesign' into #1640-change-request-stage-gate-details-page-redesign-pt2
2 parents 669c537 + 40634e1 commit f3648be

166 files changed

Lines changed: 8190 additions & 2592 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.

.github/workflows/run-tests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ jobs:
2020
steps:
2121
- name: Checkout repository
2222
uses: actions/checkout@v3
23+
- name: Set env variables
24+
run: touch .env && echo "FINANCE_TEAM_ID=0" >> .env
2325
- name: Set up Node.js
2426
uses: actions/setup-node@v3
2527
with:

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,19 @@ export default class ChangeRequestsController {
7575

7676
static async createStandardChangeRequest(req: Request, res: Response, next: NextFunction) {
7777
try {
78-
const { wbsNum, type, what, why } = req.body;
78+
const { wbsNum, type, what, why, proposedSolutions } = req.body;
7979
const submitter = await getCurrentUser(res);
80-
const id = await ChangeRequestsService.createStandardChangeRequest(
80+
const createdCR = await ChangeRequestsService.createStandardChangeRequest(
8181
submitter,
8282
wbsNum.carNumber,
8383
wbsNum.projectNumber,
8484
wbsNum.workPackageNumber,
8585
type,
8686
what,
87-
why
87+
why,
88+
proposedSolutions
8889
);
89-
return res.status(200).json({ message: `${id}` });
90+
return res.status(200).json(createdCR);
9091
} catch (error: unknown) {
9192
next(error);
9293
}

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

Lines changed: 225 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Project, validateWBS, WbsNumber, wbsPipe } from 'shared';
1+
import { Manufacturer, MaterialType, Project, validateWBS, WbsNumber, wbsPipe } from 'shared';
22
import { NextFunction, Request, Response } from 'express';
33
import { User } from '@prisma/client';
44
import { getCurrentUser } from '../utils/auth.utils';
@@ -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) {
@@ -128,6 +155,60 @@ export default class ProjectsController {
128155
}
129156
}
130157

158+
static async createAssembly(req: Request, res: Response, next: NextFunction) {
159+
try {
160+
const user: User = await getCurrentUser(res);
161+
const wbsNum: WbsNumber = validateWBS(req.params.wbsNum);
162+
const { name, pdmFileName } = req.body;
163+
const createAssembly = await ProjectsService.createAssembly(name, user, wbsNum, pdmFileName);
164+
res.status(200).json(createAssembly);
165+
} catch (error: unknown) {
166+
next(error);
167+
}
168+
}
169+
170+
static async createMaterial(req: Request, res: Response, next: NextFunction) {
171+
try {
172+
const {
173+
name,
174+
assemblyId,
175+
status,
176+
materialTypeName,
177+
manufacturerName,
178+
manufacturerPartNumber,
179+
pdmFileName,
180+
quantity,
181+
unitName,
182+
price,
183+
subtotal,
184+
linkUrl,
185+
notes
186+
} = req.body;
187+
const creator = await getCurrentUser(res);
188+
const wbsNum = validateWBS(req.params.wbsNum);
189+
const material = await ProjectsService.createMaterial(
190+
creator,
191+
name,
192+
status,
193+
materialTypeName,
194+
manufacturerName,
195+
manufacturerPartNumber,
196+
quantity,
197+
price,
198+
subtotal,
199+
linkUrl,
200+
notes,
201+
wbsNum,
202+
assemblyId,
203+
pdmFileName,
204+
unitName
205+
);
206+
return res.status(200).json(material);
207+
} catch (error: unknown) {
208+
next(error);
209+
}
210+
}
211+
131212
static async createManufacturer(req: Request, res: Response, next: NextFunction) {
132213
try {
133214
const { name } = req.body;
@@ -139,6 +220,37 @@ export default class ProjectsController {
139220
}
140221
}
141222

223+
static async deleteManufacturer(req: Request, res: Response, next: NextFunction) {
224+
try {
225+
const user: User = await getCurrentUser(res);
226+
const { manufacturerName } = req.params;
227+
const deletedManufacturer = await ProjectsService.deleteManufacturer(user, manufacturerName);
228+
res.status(200).json(deletedManufacturer);
229+
} catch (error: unknown) {
230+
next(error);
231+
}
232+
}
233+
234+
static async getAllManufacturers(req: Request, res: Response, next: NextFunction) {
235+
try {
236+
const user = await getCurrentUser(res);
237+
const manufacturers: Manufacturer[] = await ProjectsService.getAllManufacturers(user);
238+
return res.status(200).json(manufacturers);
239+
} catch (error: unknown) {
240+
next(error);
241+
}
242+
}
243+
244+
static async getAllMaterialTypes(req: Request, res: Response, next: NextFunction) {
245+
try {
246+
const user = await getCurrentUser(res);
247+
const materialTypes: MaterialType[] = await ProjectsService.getAllMaterialTypes(user);
248+
return res.status(200).json(materialTypes);
249+
} catch (error: unknown) {
250+
next(error);
251+
}
252+
}
253+
142254
static async createMaterialType(req: Request, res: Response, next: NextFunction) {
143255
try {
144256
const { name } = req.body;
@@ -149,4 +261,112 @@ export default class ProjectsController {
149261
next(error);
150262
}
151263
}
264+
265+
static async assignMaterialAssembly(req: Request, res: Response, next: NextFunction) {
266+
try {
267+
const { materialId } = req.params;
268+
const { assemblyId } = req.body;
269+
const user = await getCurrentUser(res);
270+
const updatedMaterial = await ProjectsService.assignMaterialAssembly(user, materialId, assemblyId);
271+
res.status(200).json(updatedMaterial);
272+
} catch (error: unknown) {
273+
next(error);
274+
}
275+
}
276+
277+
static async deleteAssemblyType(req: Request, res: Response, next: NextFunction) {
278+
try {
279+
const { assemblyId } = req.params;
280+
const user = await getCurrentUser(res);
281+
const deletedAssembly = await ProjectsService.deleteAssembly(assemblyId, user);
282+
res.status(200).json(deletedAssembly);
283+
} catch (error: unknown) {
284+
next(error);
285+
}
286+
}
287+
288+
static async deleteMaterialType(req: Request, res: Response, next: NextFunction) {
289+
try {
290+
const { materialTypeId } = req.params;
291+
const user = await getCurrentUser(res);
292+
const deletedMaterial = await ProjectsService.deleteMaterialType(materialTypeId, user);
293+
res.status(200).json(deletedMaterial);
294+
} catch (error: unknown) {
295+
next(error);
296+
}
297+
}
298+
299+
static async deleteMaterial(req: Request, res: Response, next: NextFunction) {
300+
try {
301+
const { materialId } = req.params;
302+
const user: User = await getCurrentUser(res);
303+
const updatedMaterial = await ProjectsService.deleteMaterial(user, materialId);
304+
res.status(200).json(updatedMaterial);
305+
} catch (error: unknown) {
306+
next(error);
307+
}
308+
}
309+
310+
static async editMaterial(req: Request, res: Response, next: NextFunction) {
311+
try {
312+
const user = await getCurrentUser(res);
313+
const { materialId } = req.params;
314+
const {
315+
name,
316+
assemblyId,
317+
status,
318+
materialTypeName,
319+
manufacturerName,
320+
manufacturerPartNumber,
321+
pdmFileName,
322+
quantity,
323+
unitName,
324+
price,
325+
subtotal,
326+
linkUrl,
327+
notes
328+
} = req.body;
329+
const updatedMaterial = await ProjectsService.editMaterial(
330+
user,
331+
materialId,
332+
name,
333+
status,
334+
materialTypeName,
335+
manufacturerName,
336+
manufacturerPartNumber,
337+
quantity,
338+
price,
339+
subtotal,
340+
linkUrl,
341+
notes,
342+
unitName,
343+
assemblyId,
344+
pdmFileName
345+
);
346+
res.status(200).json(updatedMaterial);
347+
} catch (error: unknown) {
348+
next(error);
349+
}
350+
}
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+
}
152372
}

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

Lines changed: 46 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
);
@@ -230,6 +248,17 @@ export default class ReimbursementRequestsController {
230248
}
231249
}
232250

251+
static async denyReimbursementRequest(req: Request, res: Response, next: NextFunction) {
252+
try {
253+
const { requestId } = req.params;
254+
const user = await getCurrentUser(res);
255+
const reimbursementStatus = await ReimbursementRequestService.denyReimbursementRequest(requestId, user);
256+
res.status(200).json(reimbursementStatus);
257+
} catch (error: unknown) {
258+
next(error);
259+
}
260+
}
261+
233262
static async markReimbursementRequestAsDelivered(req: Request, res: Response, next: NextFunction) {
234263
try {
235264
const { requestId } = req.params;
@@ -290,4 +319,16 @@ export default class ReimbursementRequestsController {
290319
next(error);
291320
}
292321
}
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+
}
293334
}

0 commit comments

Comments
 (0)