Skip to content

Commit a49a1b8

Browse files
author
Megan Liu
committed
#1604: fixed merge conflicts
2 parents eeda8db + 2cce2a8 commit a49a1b8

130 files changed

Lines changed: 5890 additions & 2351 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/projects.controllers.ts

Lines changed: 164 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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';
3-
import { Manufacturer, User } from '@prisma/client';
3+
import { User } from '@prisma/client';
44
import { getCurrentUser } from '../utils/auth.utils';
55
import ProjectsService from '../services/projects.services';
66

@@ -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) {
@@ -167,14 +194,14 @@ export default class ProjectsController {
167194
manufacturerName,
168195
manufacturerPartNumber,
169196
quantity,
170-
unitName,
171197
price,
172198
subtotal,
173199
linkUrl,
174200
notes,
175201
wbsNum,
176202
assemblyId,
177-
pdmFileName
203+
pdmFileName,
204+
unitName
178205
);
179206
return res.status(200).json(material);
180207
} catch (error: unknown) {
@@ -193,6 +220,17 @@ export default class ProjectsController {
193220
}
194221
}
195222

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+
196234
static async getAllManufacturers(req: Request, res: Response, next: NextFunction) {
197235
try {
198236
const user = await getCurrentUser(res);
@@ -203,6 +241,16 @@ export default class ProjectsController {
203241
}
204242
}
205243

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+
206254
static async createMaterialType(req: Request, res: Response, next: NextFunction) {
207255
try {
208256
const { name } = req.body;
@@ -213,4 +261,112 @@ export default class ProjectsController {
213261
next(error);
214262
}
215263
}
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+
}
216372
}

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

Lines changed: 23 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
);

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* This file is part of NER's FinishLine and licensed under GNU AGPLv3.
3+
* See the LICENSE file in the repository root folder for details.
4+
*/
5+
6+
import { Prisma } from '@prisma/client';
7+
8+
const materialTypeQueryArgs = Prisma.validator<Prisma.Material_TypeArgs>()({
9+
include: {
10+
materials: true,
11+
userCreated: true
12+
}
13+
});
14+
15+
export default materialTypeQueryArgs;

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 } },

0 commit comments

Comments
 (0)