Skip to content

Commit 5c2e692

Browse files
committed
Merge branch 'develop' into #1528-material-to-assembly
2 parents 81871fd + bc3c305 commit 5c2e692

56 files changed

Lines changed: 1404 additions & 101 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: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Project, validateWBS, WbsNumber, wbsPipe } from 'shared';
22
import { NextFunction, Request, Response } from 'express';
3-
import { User } from '@prisma/client';
3+
import { Manufacturer, User } from '@prisma/client';
44
import { getCurrentUser } from '../utils/auth.utils';
55
import ProjectsService from '../services/projects.services';
66

@@ -167,14 +167,14 @@ export default class ProjectsController {
167167
manufacturerName,
168168
manufacturerPartNumber,
169169
quantity,
170-
unitName,
171170
price,
172171
subtotal,
173172
linkUrl,
174173
notes,
175174
wbsNum,
176175
assemblyId,
177-
pdmFileName
176+
pdmFileName,
177+
unitName
178178
);
179179
return res.status(200).json(material);
180180
} catch (error: unknown) {
@@ -193,6 +193,27 @@ export default class ProjectsController {
193193
}
194194
}
195195

196+
static async deleteManufacturer(req: Request, res: Response, next: NextFunction) {
197+
try {
198+
const user: User = await getCurrentUser(res);
199+
const { manufacturerName } = req.params;
200+
const deletedManufacturer: Manufacturer = await ProjectsService.deleteManufacturer(user, manufacturerName);
201+
res.status(200).json(deletedManufacturer);
202+
} catch (error: unknown) {
203+
next(error);
204+
}
205+
}
206+
207+
static async getAllManufacturers(req: Request, res: Response, next: NextFunction) {
208+
try {
209+
const user = await getCurrentUser(res);
210+
const manufacturers: Manufacturer[] = await ProjectsService.getAllManufacturers(user);
211+
return res.status(200).json(manufacturers);
212+
} catch (error: unknown) {
213+
next(error);
214+
}
215+
}
216+
196217
static async createMaterialType(req: Request, res: Response, next: NextFunction) {
197218
try {
198219
const { name } = req.body;
@@ -215,4 +236,68 @@ export default class ProjectsController {
215236
next(error);
216237
}
217238
}
239+
240+
static async deleteAssemblyType(req: Request, res: Response, next: NextFunction) {
241+
try {
242+
const { assemblyId } = req.params;
243+
const user = await getCurrentUser(res);
244+
const deletedAssembly = await ProjectsService.deleteAssembly(assemblyId, user);
245+
res.status(200).json(deletedAssembly);
246+
} catch (error: unknown) {
247+
next(error);
248+
}
249+
}
250+
251+
static async deleteMaterialType(req: Request, res: Response, next: NextFunction) {
252+
try {
253+
const { materialTypeId } = req.params;
254+
const user = await getCurrentUser(res);
255+
const deletedMaterial = await ProjectsService.deleteMaterialType(materialTypeId, user);
256+
res.status(200).json(deletedMaterial);
257+
} catch (error: unknown) {
258+
next(error);
259+
}
260+
}
261+
262+
static async editMaterial(req: Request, res: Response, next: NextFunction) {
263+
try {
264+
const user = await getCurrentUser(res);
265+
const { materialId } = req.params;
266+
const {
267+
name,
268+
assemblyId,
269+
status,
270+
materialTypeName,
271+
manufacturerName,
272+
manufacturerPartNumber,
273+
pdmFileName,
274+
quantity,
275+
unitName,
276+
price,
277+
subtotal,
278+
linkUrl,
279+
notes
280+
} = req.body;
281+
const updatedMaterial = await ProjectsService.editMaterial(
282+
user,
283+
materialId,
284+
name,
285+
status,
286+
materialTypeName,
287+
manufacturerName,
288+
manufacturerPartNumber,
289+
quantity,
290+
price,
291+
subtotal,
292+
linkUrl,
293+
notes,
294+
unitName,
295+
assemblyId,
296+
pdmFileName
297+
);
298+
res.status(200).json(updatedMaterial);
299+
} catch (error: unknown) {
300+
next(error);
301+
}
302+
}
218303
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,17 @@ export default class ReimbursementRequestsController {
230230
}
231231
}
232232

233+
static async denyReimbursementRequest(req: Request, res: Response, next: NextFunction) {
234+
try {
235+
const { requestId } = req.params;
236+
const user = await getCurrentUser(res);
237+
const reimbursementStatus = await ReimbursementRequestService.denyReimbursementRequest(requestId, user);
238+
res.status(200).json(reimbursementStatus);
239+
} catch (error: unknown) {
240+
next(error);
241+
}
242+
}
243+
233244
static async markReimbursementRequestAsDelivered(req: Request, res: Response, next: NextFunction) {
234245
try {
235246
const { requestId } = req.params;

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ export default class WorkPackagesController {
2929
}
3030
}
3131

32+
static async getManyWorkPackages(req: Request, res: Response, next: NextFunction) {
33+
try {
34+
const { wbsNums } = req.body;
35+
const workPackages: WorkPackage[] = await WorkPackagesService.getManyWorkPackages(wbsNums);
36+
res.status(200).json(workPackages);
37+
} catch (error: unknown) {
38+
next(error);
39+
}
40+
}
41+
3242
// Create a work package with the given details
3343
static async createWorkPackage(req: Request, res: Response, next: NextFunction) {
3444
try {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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 manufacturerQueryArgs = Prisma.validator<Prisma.ManufacturerArgs>()({
9+
include: {
10+
materials: true
11+
}
12+
});
13+
14+
export default manufacturerQueryArgs;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterEnum
2+
ALTER TYPE "Reimbursement_Status_Type" ADD VALUE 'DENIED';

src/backend/src/prisma/migrations/20231024124220_add_bom/migration.sql renamed to src/backend/src/prisma/migrations/20231119081759_add_bom/migration.sql

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ CREATE TABLE "Material" (
5151
CREATE TABLE "Material_Type" (
5252
"name" TEXT NOT NULL,
5353
"dateCreated" TIMESTAMP(3) NOT NULL,
54+
"dateDeleted" TIMESTAMP(3),
5455
"creatorId" INTEGER NOT NULL,
5556

5657
CONSTRAINT "Material_Type_pkey" PRIMARY KEY ("name")
@@ -61,16 +62,14 @@ CREATE TABLE "Manufacturer" (
6162
"name" TEXT NOT NULL,
6263
"dateCreated" TIMESTAMP(3) NOT NULL,
6364
"creatorId" INTEGER NOT NULL,
65+
"dateDeleted" TIMESTAMP(3),
6466

6567
CONSTRAINT "Manufacturer_pkey" PRIMARY KEY ("name")
6668
);
6769

6870
-- CreateIndex
6971
CREATE UNIQUE INDEX "Assembly_name_key" ON "Assembly"("name");
7072

71-
-- CreateIndex
72-
CREATE UNIQUE INDEX "Material_name_key" ON "Material"("name");
73-
7473
-- AddForeignKey
7574
ALTER TABLE "Assembly" ADD CONSTRAINT "Assembly_userDeletedId_fkey" FOREIGN KEY ("userDeletedId") REFERENCES "User"("userId") ON DELETE SET NULL ON UPDATE CASCADE;
7675

src/backend/src/prisma/schema.prisma

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ enum Reimbursement_Status_Type {
364364
SABO_SUBMITTED
365365
ADVISOR_APPROVED
366366
REIMBURSED
367+
DENIED
367368
}
368369

369370
model Reimbursement_Status {
@@ -490,7 +491,7 @@ model Material {
490491
materialId String @id @default(uuid())
491492
assembly Assembly? @relation(fields: [assemblyId], references: [assemblyId])
492493
assemblyId String?
493-
name String @unique
494+
name String
494495
wbsElement WBS_Element @relation(fields: [wbsElementId], references: [wbsElementId])
495496
wbsElementId Int
496497
dateDeleted DateTime?
@@ -518,6 +519,7 @@ model Material {
518519
model Material_Type {
519520
name String @id
520521
dateCreated DateTime
522+
dateDeleted DateTime?
521523
creatorId Int
522524
materials Material[]
523525
}
@@ -526,5 +528,6 @@ model Manufacturer {
526528
name String @id
527529
dateCreated DateTime
528530
creatorId Int
531+
dateDeleted DateTime?
529532
materials Material[]
530533
}

src/backend/src/prisma/seed-data/users.seed.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,70 @@ const wonderwoman: Prisma.UserCreateInput = {
6969
googleAuthId: 'wonderwoman'
7070
};
7171

72+
const lexLuther: Prisma.UserCreateInput = {
73+
firstName: 'Alexander',
74+
lastName: 'Luther',
75+
email: 'lexluther@justiceleague.com',
76+
googleAuthId: 'hjkklo',
77+
role: Role.MEMBER
78+
};
79+
80+
const hawkgirl: Prisma.UserCreateInput = {
81+
firstName: 'Shiera',
82+
lastName: 'Hall',
83+
email: 'hawkgirl@justiceleague.com',
84+
googleAuthId: 'bhuujki',
85+
role: Role.MEMBER
86+
};
87+
88+
const elongatedMan: Prisma.UserCreateInput = {
89+
firstName: 'Randolph',
90+
lastName: 'Dibney',
91+
email: 'elongatedmangit @justiceleague.com',
92+
googleAuthId: 'joigiug',
93+
role: Role.MEMBER
94+
};
95+
96+
const zatanna: Prisma.UserCreateInput = {
97+
firstName: 'Zatanna',
98+
lastName: 'Zatara',
99+
email: 'zatanna@justiceleague.com',
100+
googleAuthId: 'cawwww',
101+
role: Role.MEMBER
102+
};
103+
104+
const phantomStranger: Prisma.UserCreateInput = {
105+
firstName: 'Judas',
106+
lastName: 'Iscariot',
107+
email: 'phantomstranger@justiceleague.com',
108+
googleAuthId: 'bnhjiuy',
109+
role: Role.MEMBER
110+
};
111+
112+
const redTornado: Prisma.UserCreateInput = {
113+
firstName: 'Red',
114+
lastName: 'Tornado',
115+
email: 'redtornado@justiceleague.com',
116+
googleAuthId: 'vbnhught',
117+
role: Role.MEMBER
118+
};
119+
120+
const firestorm: Prisma.UserCreateInput = {
121+
firstName: 'Ronnie',
122+
lastName: 'Raymond',
123+
email: 'firestorm@justiceleague.com',
124+
googleAuthId: 'fghttyu',
125+
role: Role.MEMBER
126+
};
127+
128+
const hankHeywood: Prisma.UserCreateInput = {
129+
firstName: 'Hank',
130+
lastName: 'Heywood III',
131+
email: 'hankheywood@justiceleague.com',
132+
googleAuthId: 'hudhsgf',
133+
role: Role.MEMBER
134+
};
135+
72136
const flash: Prisma.UserCreateInput = {
73137
firstName: 'Barry',
74138
lastName: 'Allen',
@@ -643,6 +707,14 @@ export const dbSeedAllUsers = {
643707
wonderwoman,
644708
flash,
645709
aquaman,
710+
lexLuther,
711+
hawkgirl,
712+
elongatedMan,
713+
zatanna,
714+
phantomStranger,
715+
redTornado,
716+
firestorm,
717+
hankHeywood,
646718
robin,
647719
batman,
648720
superman,

src/backend/src/prisma/seed.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import ChangeRequestsService from '../services/change-requests.services';
2222
import projectQueryArgs from '../prisma-query-args/projects.query-args';
2323
import TeamsService from '../services/teams.services';
2424
import WorkPackagesService from '../services/work-packages.services';
25-
import { ChangeRequest, ClubAccount, StandardChangeRequest, validateWBS, WbsElementStatus, WorkPackageStage } from 'shared';
25+
import { ClubAccount, StandardChangeRequest, validateWBS, WbsElementStatus, WorkPackageStage } from 'shared';
2626
import TasksService from '../services/tasks.services';
2727
import DescriptionBulletsService from '../services/description-bullets.services';
2828
import { seedProject } from './seed-data/projects.seed';
@@ -39,6 +39,14 @@ const performSeed: () => Promise<void> = async () => {
3939
});
4040
const joeShmoe = await prisma.user.create({ data: dbSeedAllUsers.joeShmoe });
4141
const joeBlow = await prisma.user.create({ data: dbSeedAllUsers.joeBlow });
42+
const lexLuther = await prisma.user.create({ data: dbSeedAllUsers.lexLuther });
43+
const hawkgirl = await prisma.user.create({ data: dbSeedAllUsers.hawkgirl });
44+
const elongatedMan = await prisma.user.create({ data: dbSeedAllUsers.elongatedMan });
45+
const zatanna = await prisma.user.create({ data: dbSeedAllUsers.zatanna });
46+
const phantomStranger = await prisma.user.create({ data: dbSeedAllUsers.phantomStranger });
47+
const redTornado = await prisma.user.create({ data: dbSeedAllUsers.redTornado });
48+
const firestorm = await prisma.user.create({ data: dbSeedAllUsers.firestorm });
49+
const hankHeywood = await prisma.user.create({ data: dbSeedAllUsers.hankHeywood });
4250
const wonderwoman = await prisma.user.create({ data: dbSeedAllUsers.wonderwoman });
4351
const flash = await prisma.user.create({ data: dbSeedAllUsers.flash });
4452
const aquaman = await prisma.user.create({ data: dbSeedAllUsers.aquaman });
@@ -199,9 +207,27 @@ const performSeed: () => Promise<void> = async () => {
199207
await TeamsService.setTeamMembers(
200208
batman,
201209
justiceLeague.teamId,
202-
[wonderwoman, flash, aquaman, superman, hawkMan, hawkWoman, cyborg, greenLantern, martianManhunter].map(
203-
(user) => user.userId
204-
)
210+
[
211+
flash,
212+
aquaman,
213+
superman,
214+
hawkMan,
215+
hawkWoman,
216+
greenLantern,
217+
lexLuther,
218+
hawkgirl,
219+
elongatedMan,
220+
zatanna,
221+
phantomStranger,
222+
redTornado,
223+
firestorm,
224+
hankHeywood
225+
].map((user) => user.userId)
226+
);
227+
await TeamsService.setTeamLeads(
228+
batman,
229+
justiceLeague.teamId,
230+
[wonderwoman, cyborg, martianManhunter].map((user) => user.userId)
205231
);
206232
await TeamsService.setTeamMembers(
207233
aang,

0 commit comments

Comments
 (0)