Skip to content

Commit ba2a06c

Browse files
authored
Merge pull request #2626 from Northeastern-Electric-Racing/blocked-by
reflect blocked by changes
2 parents 020eeb8 + cfc2c67 commit ba2a06c

35 files changed

Lines changed: 1434 additions & 988 deletions

src/backend/src/prisma-query-args/projects.query-args.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ export const getProjectQueryArgs = (organizationId: string) =>
5757
assemblies: {
5858
where: { dateDeleted: null },
5959
...getAssemblyQueryArgs(organizationId)
60-
}
60+
},
61+
blocking: { where: { wbsElement: { dateDeleted: null } }, include: { wbsElement: true } }
6162
}
6263
},
6364
blockedBy: { where: { dateDeleted: null } }

src/backend/src/prisma-query-args/teams.query-args.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Prisma } from '@prisma/client';
22
import { getUserQueryArgs } from './user.query-args';
3+
import { getWorkPackageQueryArgs } from './work-packages.query-args';
34

45
export type TeamQueryArgs = ReturnType<typeof getTeamQueryArgs>;
56

@@ -19,11 +20,7 @@ export const getTeamQueryArgs = (organizationId: string) =>
1920
},
2021
include: {
2122
wbsElement: true,
22-
workPackages: {
23-
include: {
24-
wbsElement: true
25-
}
26-
}
23+
workPackages: getWorkPackageQueryArgs(organizationId)
2724
}
2825
}
2926
}

src/backend/src/prisma-query-args/work-packages.query-args.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const getWorkPackageQueryArgs = (organizationId: string) =>
2727
include: { implementer: getUserQueryArgs(organizationId) },
2828
orderBy: { dateImplemented: 'asc' }
2929
},
30-
blocking: true,
30+
blocking: { where: { wbsElement: { dateDeleted: null } }, include: { wbsElement: true } },
3131
tasks: { where: { dateDeleted: null }, ...getTaskQueryArgs(organizationId) },
3232
descriptionBullets: { where: { dateDeleted: null }, ...getDescriptionBulletQueryArgs(organizationId) }
3333
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
isGuest,
55
isLeadership,
66
isNotLeadership,
7+
isProject,
78
ProjectProposedChangesCreateArgs,
89
ProposedSolution,
910
ProposedSolutionCreateArgs,
@@ -670,7 +671,11 @@ export default class ChangeRequestsService {
670671
throw new DeletedException('WBS Element', wbsPipe({ carNumber, projectNumber, workPackageNumber }));
671672
if (wbsElement.organizationId !== organizationId) throw new InvalidOrganizationException('WBS Element');
672673
// we don't want to have merge conflicts on the wbs element thus we check if there are unreviewed or open CRs on the wbs element
673-
if (projectNumber !== 0 && !(projectProposedChanges && projectProposedChanges.workPackageProposedChanges.length === 0)) {
674+
if (
675+
projectNumber !== 0 && // Excluding Cars
676+
!(projectProposedChanges && projectProposedChanges.workPackageProposedChanges.length === 0) && // Excluding new projects with work packages
677+
!(isProject(wbsElement) && workPackageProposedChanges) // Excluding Creating Work Package on Project
678+
) {
674679
await validateNoUnreviewedOpenCRs(wbsElement.wbsElementId);
675680
}
676681

src/backend/src/transformers/projects.transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ const projectTransformer = (project: Prisma.ProjectGetPayload<ProjectQueryArgs>)
8484
projectName: wbsElement.name,
8585
stage: (workPackage.stage || undefined) as WorkPackageStage,
8686
materials: workPackage.wbsElement?.materials.map(materialTransformer),
87-
assemblies: workPackage.wbsElement?.assemblies.map(assemblyTransformer)
87+
assemblies: workPackage.wbsElement?.assemblies.map(assemblyTransformer),
88+
blocking: workPackage.wbsElement.blocking.map((blocking) => wbsNumOf(blocking.wbsElement))
8889
};
8990
})
9091
};

src/backend/src/transformers/teams.transformer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TeamQueryArgs } from '../prisma-query-args/teams.query-args';
44
import { calculateProjectStatus } from '../utils/projects.utils';
55
import { wbsNumOf } from '../utils/utils';
66
import { userTransformer } from './user.transformer';
7+
import workPackageTransformer from './work-packages.transformer';
78

89
const teamTransformer = (team: Prisma.TeamGetPayload<TeamQueryArgs>): Team => {
910
return {
@@ -17,7 +18,8 @@ const teamTransformer = (team: Prisma.TeamGetPayload<TeamQueryArgs>): Team => {
1718
id: project.projectId,
1819
wbsNum: wbsNumOf(project.wbsElement),
1920
name: project.wbsElement.name,
20-
status: calculateProjectStatus(project)
21+
status: calculateProjectStatus(project),
22+
workPackages: project.workPackages.map(workPackageTransformer)
2123
})),
2224
leads: team.leads.map(userTransformer),
2325
userArchived: team.userArchived ? userTransformer(team.userArchived) : undefined,

src/backend/src/transformers/work-packages.transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ const workPackageTransformer = (wpInput: Prisma.Work_PackageGetPayload<WorkPacka
3535
})),
3636
teamTypes: wpInput.project.teams.flatMap((team) => team.teamType ?? []),
3737
projectName: wpInput.project.wbsElement.name,
38-
stage: (wpInput.stage as WorkPackageStage) || undefined
38+
stage: (wpInput.stage as WorkPackageStage) || undefined,
39+
blocking: wpInput.wbsElement.blocking.map((wp) => wbsNumOf(wp.wbsElement))
3940
};
4041
};
4142

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ export const applyProjectProposedChanges = async (
378378
projectWbsElmeId = proj.wbsElementId;
379379
}
380380

381-
const promises = projectProposedChanges.workPackageProposedChanges.map(async (proposedChange) => {
381+
for (const proposedChange of projectProposedChanges.workPackageProposedChanges) {
382382
await applyWorkPackageProposedChanges(
383383
wbsProposedChanges,
384384
proposedChange,
@@ -388,9 +388,7 @@ export const applyProjectProposedChanges = async (
388388
crId,
389389
organizationId
390390
);
391-
});
392-
393-
await Promise.all(promises);
391+
}
394392
}
395393
};
396394

src/backend/src/utils/changes.utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,10 @@ export const getWorkPackageChanges = async (
163163
newDuration: number,
164164
oldBlockedBy: WBS_Element[],
165165
newBlockedBy: WBS_Element[],
166-
oldManagerId: string | null,
167-
newManagerId: string | null,
168166
oldLeadId: string | null,
169167
newLeadId: string | null,
168+
oldManagerId: string | null,
169+
newManagerId: string | null,
170170
oldDescriptionBullets: DescriptionBulletWithType[],
171171
newDescriptionBullets: DescriptionBulletPreview[],
172172
crId: string,

src/frontend/src/apis/teams.api.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ import axios from '../utils/axios';
77
import { Team } from 'shared';
88
import { apiUrls } from '../utils/urls';
99
import { CreateTeamPayload } from '../hooks/teams.hooks';
10+
import { teamTransformer } from './transformers/teams.transformers';
1011

1112
export const getAllTeams = () => {
1213
return axios.get<Team[]>(apiUrls.teams(), {
13-
transformResponse: (data) => JSON.parse(data)
14+
transformResponse: (data) => JSON.parse(data).map(teamTransformer)
1415
});
1516
};
1617

1718
export const getSingleTeam = (id: string) => {
1819
return axios.get<Team>(apiUrls.teamsById(id), {
19-
transformResponse: (data) => JSON.parse(data)
20+
transformResponse: (data) => teamTransformer(JSON.parse(data))
2021
});
2122
};
2223

0 commit comments

Comments
 (0)