@@ -44,6 +44,7 @@ import { linkTypeTransformer } from '../transformers/links.transformer';
4444import { updateLinks , linkToChangeListValue } from '../utils/links.utils' ;
4545import { manufacturerTransformer } from '../transformers/manufacturer.transformer' ;
4646import { isUserPartOfTeams } from '../utils/teams.utils' ;
47+ import { disconnect } from 'process' ;
4748
4849export default class ProjectsService {
4950 /**
@@ -888,7 +889,10 @@ export default class ProjectsService {
888889 * @returns the updated material
889890 */
890891 static async assignMaterialAssembly ( submitter : User , materialId : string , assemblyId ?: string ) {
891- const material = await prisma . material . findUnique ( { where : { materialId } } ) ;
892+ const material = await prisma . material . findUnique ( {
893+ where : { materialId } ,
894+ include : { wbsElement : true , assembly : true }
895+ } ) ;
892896 if ( ! material ) throw new NotFoundException ( 'Material' , materialId ) ;
893897
894898 const project = await prisma . project . findFirst ( {
@@ -903,7 +907,9 @@ export default class ProjectsService {
903907
904908 // Permission: leadership and up, anyone on project team
905909 if ( ! ( isLeadership ( submitter . role ) || isUserPartOfTeams ( project . teams , submitter ) ) )
906- throw new AccessDeniedException ( 'Only leadership or above can assign materials to assemblies' ) ;
910+ throw new AccessDeniedException (
911+ `Only leadership or above, or someone on the project's team can assign materials to assemblies`
912+ ) ;
907913
908914 if ( assemblyId ) {
909915 const assembly = await prisma . assembly . findUnique ( {
@@ -916,14 +922,33 @@ export default class ProjectsService {
916922 if ( material . wbsElementId !== assembly . wbsElementId )
917923 throw new HttpException (
918924 400 ,
919- `The WBS element of the material (${ material . wbsElementId } ) and assembly (${ assembly . wbsElementId } ) do not match`
925+ `The WBS element of the material (${ wbsPipe ( material . wbsElement ) } ) and assembly (${ wbsPipe (
926+ assembly . wbsElement
927+ ) } ) do not match`
920928 ) ;
929+ const updatedMaterial = await prisma . material . update ( {
930+ where : { materialId } ,
931+ data : { assemblyId }
932+ } ) ;
933+
934+ return updatedMaterial ;
921935 }
936+ if ( material . assemblyId ) {
937+ // Assign a material on a project to a different assembly
938+ await prisma . assembly . update ( {
939+ where : { assemblyId : material . assemblyId } ,
940+ data : { materials : { disconnect : { materialId } } } ,
941+ include : { materials : true }
942+ } ) ;
922943
923- // Assign a material on a project to a different assembly
924- const updatedMaterial = await prisma . material . update ( { where : { materialId } , data : { assemblyId } } ) ;
944+ const updatedMaterial = await prisma . material . findUnique ( {
945+ where : { materialId } ,
946+ include : { wbsElement : true , assembly : true }
947+ } ) ;
925948
926- return updatedMaterial ;
949+ return updatedMaterial ;
950+ }
951+ return material ;
927952 }
928953
929954 /**
0 commit comments