Skip to content

Commit b81611f

Browse files
committed
Merge branch 'develop' into feature/Workpackage-Form-Redesign
2 parents 95c2263 + 9c27996 commit b81611f

202 files changed

Lines changed: 9527 additions & 2102 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:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ A project management web application built in Typescript, React, and Express.
88

99
All of our documentation is on [our Confluence page](https://nerdocs.atlassian.net/wiki/spaces/NER/pages/5603329/Software). Start there to learn what the project is all about.
1010

11-
All questions can be directed to `#software` in the [NER Slack](https://nu-electric-racing.slack.com) (backup contact: [`@anthonybernardi`](https://github.com/anthonybernardi)).
11+
All questions can be directed to `#software` in the [NER Slack](https://nu-electric-racing.slack.com) (backup contact: [`@RChandler234`](https://github.com/RChandler234)).
1212

1313
## Environment Setup
1414

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: 247 additions & 3 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,9 +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, teamId);
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+
);
3564

3665
return res.status(200).json(wbsPipe(createdWbsNumber));
3766
} catch (error: unknown) {
@@ -125,4 +154,219 @@ export default class ProjectsController {
125154
next(error);
126155
}
127156
}
157+
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+
212+
static async createManufacturer(req: Request, res: Response, next: NextFunction) {
213+
try {
214+
const { name } = req.body;
215+
const user = await getCurrentUser(res);
216+
const createdManufacturer = await ProjectsService.createManufacturer(user, name);
217+
res.status(200).json(createdManufacturer);
218+
} catch (error: unknown) {
219+
next(error);
220+
}
221+
}
222+
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+
254+
static async createMaterialType(req: Request, res: Response, next: NextFunction) {
255+
try {
256+
const { name } = req.body;
257+
const user = await getCurrentUser(res);
258+
const createdMaterialType = await ProjectsService.createMaterialType(name, user);
259+
res.status(200).json(createdMaterialType);
260+
} catch (error: unknown) {
261+
next(error);
262+
}
263+
}
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+
}
128372
}

0 commit comments

Comments
 (0)