Skip to content

Commit 9893b71

Browse files
committed
Merge branch 'develop' into #3875-project-management-page
2 parents 4658baa + 58b1740 commit 9893b71

100 files changed

Lines changed: 3482 additions & 753 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/custom.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { Organization } from '@prisma/client';
1+
import { Organization, Prisma } from '@prisma/client';
22
import { User as SharedUser } from 'shared';
33

44
declare global {
55
namespace Express {
66
export interface Request {
77
currentUser: SharedUser;
88
organization: Organization;
9+
currentCar?: Prisma.CarGetPayload<{ include: { wbsElement: true } }>;
910
}
1011
}
1112
}

src/backend/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import cors from 'cors';
33
import cookieParser from 'cookie-parser';
44
import { getUserAndOrganization, prodHeaders, requireJwtDev, requireJwtProd } from './src/utils/auth.utils.js';
55
import { errorHandler } from './src/utils/errors.utils.js';
6+
import { getCurrentCar } from './src/utils/car.utils.js';
67
import userRouter from './src/routes/users.routes.js';
78
import projectRouter from './src/routes/projects.routes.js';
89
import teamsRouter from './src/routes/teams.routes.js';
@@ -90,6 +91,9 @@ app.use(isProd ? requireJwtProd : requireJwtDev);
9091
// get user and organization
9192
app.use(getUserAndOrganization);
9293

94+
// get current car
95+
app.use(getCurrentCar);
96+
9397
// routes
9498
app.use('/users', userRouter);
9599
app.use('/projects', projectRouter);

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default class ChangeRequestsController {
1616

1717
static async getAllChangeRequests(req: Request, res: Response, next: NextFunction) {
1818
try {
19-
const changeRequests = await ChangeRequestsService.getAllChangeRequests(req.organization);
19+
const changeRequests = await ChangeRequestsService.getAllChangeRequests(req.organization, req.currentCar?.carId);
2020
res.status(200).json(changeRequests);
2121
} catch (error: unknown) {
2222
next(error);
@@ -34,7 +34,11 @@ export default class ChangeRequestsController {
3434

3535
static async getToReviewChangeRequests(req: Request, res: Response, next: NextFunction) {
3636
try {
37-
const changeRequests = await ChangeRequestsService.getToReviewChangeRequests(req.currentUser, req.organization);
37+
const changeRequests = await ChangeRequestsService.getToReviewChangeRequests(
38+
req.currentUser,
39+
req.organization,
40+
req.currentCar?.carId
41+
);
3842
res.status(200).json(changeRequests);
3943
} catch (error: unknown) {
4044
next(error);
@@ -50,7 +54,8 @@ export default class ChangeRequestsController {
5054
const changeRequests = await ChangeRequestsService.getUnreviewedChangeRequests(
5155
req.currentUser,
5256
validatedWbs,
53-
req.organization
57+
req.organization,
58+
req.currentCar?.carId
5459
);
5560
res.status(200).json(changeRequests);
5661
} catch (error: unknown) {
@@ -67,7 +72,8 @@ export default class ChangeRequestsController {
6772
const changeRequests = await ChangeRequestsService.getApprovedChangeRequests(
6873
req.currentUser,
6974
validatedWbs,
70-
req.organization
75+
req.organization,
76+
req.currentCar?.carId
7177
);
7278
res.status(200).json(changeRequests);
7379
} catch (error: unknown) {

src/backend/src/controllers/finance.controllers.ts

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export default class FinanceController {
4343
contactPhone,
4444
contactPosition,
4545
stockDescription,
46-
discountDescription
46+
discountDescription,
47+
req.file
4748
);
4849
res.status(200).json(sponsor);
4950
} catch (error: unknown) {
@@ -172,17 +173,17 @@ export default class FinanceController {
172173
static async getReimbursementRequestTeamData(req: Request, res: Response, next: NextFunction) {
173174
try {
174175
const { teamId } = req.params as Record<string, string>;
175-
const { startDate, endDate, carNumber } = req.query;
176+
const { startDate, endDate } = req.query;
176177
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
177178
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
178-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
179+
const carNumber = req.currentCar?.wbsElement.carNumber;
179180

180181
const rrData = await FinanceServices.getReimbursementRequestTeamData(
181182
req.organization,
182183
teamId,
183184
parsedStartDate,
184185
parsedEndDate,
185-
parsedCarNumber
186+
carNumber
186187
);
187188
res.status(200).json(rrData);
188189
} catch (error: unknown) {
@@ -193,17 +194,17 @@ export default class FinanceController {
193194
static async getReimbursementRequestTeamTypeData(req: Request, res: Response, next: NextFunction) {
194195
try {
195196
const { teamTypeId } = req.params as Record<string, string>;
196-
const { startDate, endDate, carNumber } = req.query;
197+
const { startDate, endDate } = req.query;
197198
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
198199
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
199-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
200+
const carNumber = req.currentCar?.wbsElement.carNumber;
200201

201202
const rrData = await FinanceServices.getReimbursementRequestTeamTypeData(
202203
req.organization,
203204
teamTypeId,
204205
parsedStartDate,
205206
parsedEndDate,
206-
parsedCarNumber
207+
carNumber
207208
);
208209
res.status(200).json(rrData);
209210
} catch (error: unknown) {
@@ -214,17 +215,17 @@ export default class FinanceController {
214215
static async getSpendingBarTeamData(req: Request, res: Response, next: NextFunction) {
215216
try {
216217
const { teamId } = req.params as Record<string, string>;
217-
const { startDate, endDate, carNumber } = req.query;
218+
const { startDate, endDate } = req.query;
218219
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
219220
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
220-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
221+
const carNumber = req.currentCar?.wbsElement.carNumber;
221222

222223
const spendingBarData = await FinanceServices.getSpendingBarTeamData(
223224
req.organization,
224225
teamId,
225226
parsedStartDate,
226227
parsedEndDate,
227-
parsedCarNumber
228+
carNumber
228229
);
229230
res.status(200).json(spendingBarData);
230231
} catch (error: unknown) {
@@ -235,17 +236,17 @@ export default class FinanceController {
235236
static async getSpendingBarTeamTypeData(req: Request, res: Response, next: NextFunction) {
236237
try {
237238
const { teamTypeId } = req.params as Record<string, string>;
238-
const { startDate, endDate, carNumber } = req.query;
239+
const { startDate, endDate } = req.query;
239240
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
240241
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
241-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
242+
const carNumber = req.currentCar?.wbsElement.carNumber;
242243

243244
const spendingBarData = await FinanceServices.getSpendingBarTeamTypeData(
244245
req.organization,
245246
teamTypeId,
246247
parsedStartDate,
247248
parsedEndDate,
248-
parsedCarNumber
249+
carNumber
249250
);
250251
res.status(200).json(spendingBarData);
251252
} catch (error: unknown) {
@@ -255,16 +256,16 @@ export default class FinanceController {
255256

256257
static async getAllReimbursementRequestData(req: Request, res: Response, next: NextFunction) {
257258
try {
258-
const { startDate, endDate, carNumber } = req.query;
259+
const { startDate, endDate } = req.query;
259260
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
260261
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
261-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
262+
const carNumber = req.currentCar?.wbsElement.carNumber;
262263

263264
const rrData = await FinanceServices.getAllReimbursementRequestData(
264265
req.organization,
265266
parsedStartDate,
266267
parsedEndDate,
267-
parsedCarNumber
268+
carNumber
268269
);
269270
res.status(200).json(rrData);
270271
} catch (error: unknown) {
@@ -275,17 +276,17 @@ export default class FinanceController {
275276
static async getReimbursementRequestCategoryData(req: Request, res: Response, next: NextFunction) {
276277
try {
277278
const { otherReasonId } = req.params as Record<string, string>;
278-
const { startDate, endDate, carNumber } = req.query;
279+
const { startDate, endDate } = req.query;
279280
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
280281
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
281-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
282+
const carNumber = req.currentCar?.wbsElement.carNumber;
282283

283284
const rrData = await FinanceServices.getReimbursementRequestCategoryData(
284285
otherReasonId,
285286
req.organization,
286287
parsedStartDate,
287288
parsedEndDate,
288-
parsedCarNumber
289+
carNumber
289290
);
290291
res.status(200).json(rrData);
291292
} catch (error: unknown) {
@@ -295,16 +296,16 @@ export default class FinanceController {
295296

296297
static async getAllSpendingBarData(req: Request, res: Response, next: NextFunction) {
297298
try {
298-
const { startDate, endDate, carNumber } = req.query;
299+
const { startDate, endDate } = req.query;
299300
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
300301
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
301-
const parsedCarNumber = typeof carNumber === 'string' ? Number(carNumber) : undefined;
302+
const carNumber = req.currentCar?.wbsElement.carNumber;
302303

303304
const spendingBarData = await FinanceServices.getAllSpendingBarData(
304305
req.organization,
305306
parsedStartDate,
306307
parsedEndDate,
307-
parsedCarNumber
308+
carNumber
308309
);
309310
res.status(200).json(spendingBarData);
310311
} catch (error: unknown) {
@@ -314,7 +315,17 @@ export default class FinanceController {
314315

315316
static async getSpendingBarCategoryData(req: Request, res: Response, next: NextFunction) {
316317
try {
317-
const spendingBarData = await FinanceServices.getSpendingBarCategoryData(req.organization);
318+
const { startDate, endDate } = req.query;
319+
const parsedStartDate = typeof startDate === 'string' ? new Date(startDate) : undefined;
320+
const parsedEndDate = typeof endDate === 'string' ? new Date(endDate) : undefined;
321+
const carNumber = req.currentCar?.wbsElement.carNumber;
322+
323+
const spendingBarData = await FinanceServices.getSpendingBarCategoryData(
324+
req.organization,
325+
parsedStartDate,
326+
parsedEndDate,
327+
carNumber
328+
);
318329
res.status(200).json(spendingBarData);
319330
} catch (error: unknown) {
320331
next(error);
@@ -373,7 +384,8 @@ export default class FinanceController {
373384
contactPhone,
374385
contactPosition,
375386
stockDescription,
376-
discountDescription
387+
discountDescription,
388+
req.file
377389
);
378390

379391
res.status(200).json(updatedSponsor);

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import BillOfMaterialsService from '../services/boms.services.js';
1616
export default class ProjectsController {
1717
static async getAllProjectsGantt(req: Request, res: Response, next: NextFunction) {
1818
try {
19-
const projects: ProjectGantt[] = await ProjectsService.getAllProjectsGantt(req.organization);
19+
const projects: ProjectGantt[] = await ProjectsService.getAllProjectsGantt(req.organization, req.currentCar?.carId);
2020
res.status(200).json(projects);
2121
} catch (error: unknown) {
2222
next(error);
@@ -25,7 +25,7 @@ export default class ProjectsController {
2525

2626
static async getAllProjects(req: Request, res: Response, next: NextFunction) {
2727
try {
28-
const projects: ProjectPreview[] = await ProjectsService.getAllProjects(req.organization);
28+
const projects: ProjectPreview[] = await ProjectsService.getAllProjects(req.organization, req.currentCar?.carId);
2929
res.status(200).json(projects);
3030
} catch (error: unknown) {
3131
next(error);
@@ -34,7 +34,11 @@ export default class ProjectsController {
3434

3535
static async getUsersTeamsProjects(req: Request, res: Response, next: NextFunction) {
3636
try {
37-
const projects: ProjectOverview[] = await ProjectsService.getUsersTeamsProjects(req.currentUser, req.organization);
37+
const projects: ProjectOverview[] = await ProjectsService.getUsersTeamsProjects(
38+
req.currentUser,
39+
req.organization,
40+
req.currentCar?.carId
41+
);
3842
res.status(200).json(projects);
3943
} catch (error: unknown) {
4044
next(error);
@@ -43,7 +47,11 @@ export default class ProjectsController {
4347

4448
static async getUsersLeadingProjects(req: Request, res: Response, next: NextFunction) {
4549
try {
46-
const projects: ProjectOverview[] = await ProjectsService.getUsersLeadingProjects(req.currentUser, req.organization);
50+
const projects: ProjectOverview[] = await ProjectsService.getUsersLeadingProjects(
51+
req.currentUser,
52+
req.organization,
53+
req.currentCar?.carId
54+
);
4755
res.status(200).json(projects);
4856
} catch (error: unknown) {
4957
next(error);
@@ -53,7 +61,7 @@ export default class ProjectsController {
5361
static async getTeamsProjects(req: Request, res: Response, next: NextFunction) {
5462
try {
5563
const { teamId } = req.params as Record<string, string>;
56-
const projects: Project[] = await ProjectsService.getTeamsProjects(req.organization, teamId);
64+
const projects: Project[] = await ProjectsService.getTeamsProjects(req.organization, teamId, req.currentCar?.carId);
5765
res.status(200).json(projects);
5866
} catch (error: unknown) {
5967
next(error);

src/backend/src/controllers/recruitment.controllers.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,48 @@ export default class RecruitmentController {
9999

100100
static async createGuestDefinition(req: Request, res: Response, next: NextFunction) {
101101
try {
102-
const { term, description, order, icon, buttonText, buttonLink } = req.body;
102+
const { term, description, order, icon, type, buttonText, buttonLink } = req.body;
103103
const definition = await RecruitmentServices.createGuestDefinition(
104104
req.currentUser,
105105
req.organization,
106106
term,
107107
description,
108108
order,
109+
type,
110+
icon,
111+
buttonText,
112+
buttonLink
113+
);
114+
res.status(200).json(definition);
115+
} catch (error: unknown) {
116+
next(error);
117+
}
118+
}
119+
120+
static async getSingleGuestDefinition(req: Request, res: Response, next: NextFunction) {
121+
try {
122+
const { definitionId } = req.params as Record<string, string>;
123+
124+
const definition = await RecruitmentServices.getSingleGuestDefinition(req.organization, definitionId);
125+
res.status(200).json(definition);
126+
} catch (error: unknown) {
127+
next(error);
128+
}
129+
}
130+
131+
static async editGuestDefinition(req: Request, res: Response, next: NextFunction) {
132+
try {
133+
const { definitionId } = req.params as Record<string, string>;
134+
const { term, description, order, type, icon, buttonText, buttonLink } = req.body;
135+
136+
const definition = await RecruitmentServices.editGuestDefinition(
137+
req.currentUser,
138+
req.organization,
139+
term,
140+
description,
141+
definitionId,
142+
order,
143+
type,
109144
icon,
110145
buttonText,
111146
buttonLink

0 commit comments

Comments
 (0)