@@ -57,6 +57,7 @@ int categoryId
5757        bool  UpdateSelectCompetenciesTaskStatus ( int  assessmentId ,  bool  taskStatus ,  bool ?  previousStatus ) ; 
5858        bool  UpdateOptionalCompetenciesTaskStatus ( int  assessmentId ,  bool  taskStatus ,  bool ?  previousStatus ) ; 
5959        bool  UpdateRoleRequirementsTaskStatus ( int  assessmentId ,  bool  taskStatus ,  bool ?  previousStatus ) ; 
60+         bool  UpdateWorkingGroupTaskStatus ( int  assessmentId ,  bool  taskStatus ,  bool ?  previousStatus ) ; 
6061        void  MoveCompetencyInSelfAssessment ( int  competencyAssessmentId , 
6162            int  competencyId , 
6263            string  direction 
@@ -77,6 +78,10 @@ public bool UpdateCompetencyAssessmentFeaturesTaskStatus(int id, bool descriptio
7778        //DELETE DATA 
7879        bool  RemoveFrameworkCompetenciesFromAssessment ( int  competencyAssessmentId ,  int  frameworkId ) ; 
7980        bool  RemoveCompetencyFromAssessment ( int  competencyAssessmentId ,  int  competencyId ) ; 
81+         IEnumerable < CompetencyAssessmentCollaboratorDetail >  GetCollaboratorsForCompetencyAssessmentId ( int  competencyAssessmentId ) ; 
82+         int  AddCollaboratorToCompetencyAssessment ( int  competencyAssessmentId ,  string ?  userEmail ,  bool  canModify ,  int ?  centreID ) ; 
83+         void  RemoveCollaboratorFromCompetencyAssessment ( int  competencyAssessmentId ,  int  id ) ; 
84+         CompetencyAssessmentCollaboratorNotification ?  GetCollaboratorNotification ( int  id ,  int  invitedByAdminId ) ; 
8085    } 
8186
8287    public  class  CompetencyAssessmentDataService  :  ICompetencyAssessmentDataService 
@@ -646,6 +651,23 @@ public bool UpdateRoleRequirementsTaskStatus(int assessmentId, bool taskStatus,
646651            } 
647652            return  true ; 
648653        } 
654+         public  bool  UpdateWorkingGroupTaskStatus ( int  assessmentId ,  bool  taskStatus ,  bool ?  previousStatus ) 
655+         { 
656+             var  numberOfAffectedRows  =  connection . Execute ( 
657+                @"UPDATE SelfAssessmentTaskStatus SET WorkingGroupTaskStatus = @taskStatus 
658+                     WHERE SelfAssessmentId = @assessmentId AND (@previousStatus IS NULL OR WorkingGroupTaskStatus = @previousStatus)" , 
659+                new  {  assessmentId ,  taskStatus ,  previousStatus  } 
660+            ) ; 
661+             if  ( numberOfAffectedRows  <  1 ) 
662+             { 
663+                 logger . LogWarning ( 
664+                     "Not updating WorkingGroupTaskStatus as db update failed. "  + 
665+                     $ "assessmentId: { assessmentId } , taskStatus: { taskStatus } "
666+                 ) ; 
667+                 return  false ; 
668+             } 
669+             return  true ; 
670+         } 
649671
650672        public  IEnumerable < Competency >  GetCompetenciesForCompetencyAssessment ( int  competencyAssessmentId ) 
651673        { 
@@ -747,7 +769,7 @@ public void MoveCompetencyInSelfAssessment(int competencyAssessmentId, int compe
747769                    new  {  SelfAssessmentID  =  competencyAssessmentId ,  CompetencyID  =  competencyId ,  Direction  =  direction  } , 
748770                    commandType :  CommandType . StoredProcedure 
749771                ) ; 
750-              
772+ 
751773        } 
752774
753775        public  void  MoveCompetencyGroupInSelfAssessment ( int  competencyAssessmentId ,  int  groupId ,  string  direction ) 
@@ -811,12 +833,12 @@ FROM  SelfAssessments s INNER JOIN
811833	          WHERE s.ID = @competencyAssessmentId" , 
812834               new  {  competencyAssessmentId  } 
813835           ) ; 
814-              
836+ 
815837        } 
816838
817-         public  void  UpdateSelfAssessmentFromFramework (   int  selfAssessmentId ,  int ?  frameworkId ) 
839+         public  void  UpdateSelfAssessmentFromFramework ( int  selfAssessmentId ,  int ?  frameworkId ) 
818840        { 
819-             
841+ 
820842            var  numberOfAffectedRows  =  connection . Execute ( 
821843                @"UPDATE s 
822844                    SET  
@@ -828,22 +850,22 @@ FROM SelfAssessments s
828850                    INNER JOIN AdminUsers AU ON F.OwnerAdminID = AU.AdminID 
829851                    WHERE s.id = @selfAssessmentId;" 
830852            , 
831-                 new  { selfAssessmentId ,  frameworkId  } 
853+                 new  {   selfAssessmentId ,  frameworkId  } 
832854            ) ; 
833855        } 
834856        public  bool  InsertSelfAssessmentStructure ( int  selfAssessmentId ,  int ?  frameworkId ) 
835857        { 
836858
837-                  var  numberOfAffectedRows  =  connection . Execute ( 
838-                  @"INSERT INTO SelfAssessmentStructure (SelfAssessmentID, CompetencyID, Ordering, CompetencyGroupID) 
859+             var  numberOfAffectedRows  =  connection . Execute ( 
860+             @"INSERT INTO SelfAssessmentStructure (SelfAssessmentID, CompetencyID, Ordering, CompetencyGroupID) 
839861                SELECT s.ID, FC.CompetencyID, ROW_NUMBER() OVER( ORDER BY FCG.Ordering, FC.Ordering ), FCG.CompetencyGroupID 
840862                 FROM FrameworkCompetencies AS FC  
841863                INNER JOIN FrameworkCompetencyGroups AS FCG ON FC.FrameworkCompetencyGroupID = FCG.ID INNER JOIN 
842864				SelfAssessments s ON s.id = @selfAssessmentId 
843865                WHERE FC.FrameworkID = @frameworkId" 
844-              , 
845-                  new  {  selfAssessmentId ,  frameworkId  } 
846-              ) ; 
866+         , 
867+             new  {  selfAssessmentId ,  frameworkId  } 
868+         ) ; 
847869            if  ( numberOfAffectedRows  <  1 ) 
848870            { 
849871                logger . LogWarning ( 
@@ -863,5 +885,137 @@ FROM FrameworkCompetencies AS FC
863885           ) ; 
864886
865887        } 
888+         public  IEnumerable < CompetencyAssessmentCollaboratorDetail >  GetCollaboratorsForCompetencyAssessmentId ( int  competencyAssessmentId ) 
889+         { 
890+             return  connection . Query < CompetencyAssessmentCollaboratorDetail > ( 
891+                 @"SELECT 
892+                         0 AS ID, 
893+                         sa.ID AS SelfAssessmentID, 
894+                         au.AdminID AS AdminID, 
895+                         1 AS CanModify, 
896+                         au.Email AS UserEmail, 
897+                         au.Active AS UserActive, 
898+                         'Owner' AS CompetencyAssessmentRole 
899+                     FROM SelfAssessments AS sa 
900+                     INNER JOIN AdminUsers AS au ON sa.CreatedByAdminID = au.AdminID 
901+                     WHERE (sa.ID = @competencyAssessmentId) 
902+                     UNION ALL 
903+                     SELECT 
904+                         ID, 
905+                         SelfAssessmentID, 
906+                         sc.AdminID, 
907+                         CanModify, 
908+                         UserEmail, 
909+                         au.Active AS UserActive, 
910+                         CASE WHEN CanModify = 1 THEN 'Contributor' ELSE 'Reviewer' END AS CompetencyAssessmentRole 
911+                     FROM SelfAssessmentCollaborators sc 
912+                     INNER JOIN AdminUsers AS au ON sc.AdminID = au.AdminID 
913+                         AND sc.IsDeleted = 0 
914+                     WHERE (SelfAssessmentID = @competencyAssessmentId)" , 
915+                 new  {  competencyAssessmentId  } 
916+             ) ; 
917+         } 
918+         public  int  AddCollaboratorToCompetencyAssessment ( int  competencyAssessmentId ,  string ?  userEmail ,  bool  canModify ,  int ?  centreID ) 
919+         { 
920+             if  ( userEmail  is  null  ||  userEmail . Length  ==  0 ) 
921+             { 
922+                 logger . LogWarning ( 
923+                     $ "Not adding collaborator to competency assessment as it failed server side valiidation. competencyAssessmentId: { competencyAssessmentId } , userEmail: { userEmail } , canModify:{ canModify } "
924+                 ) ; 
925+                 return  - 3 ; 
926+             } 
927+ 
928+             var  existingId  =  connection . QuerySingle < int > ( 
929+                 @"SELECT COALESCE 
930+                      ((SELECT ID 
931+                       FROM    SelfAssessmentCollaborators 
932+                       WHERE (SelfAssessmentID = @competencyAssessmentId) AND (UserEmail = @userEmail) AND (IsDeleted=0)), 0) AS ID" , 
933+                 new  {  competencyAssessmentId ,  userEmail  } 
934+             ) ; 
935+             if  ( existingId  >  0 ) 
936+             { 
937+                 return  - 2 ; 
938+             } 
939+ 
940+             var  adminId  =  ( int ? ) connection . ExecuteScalar ( 
941+                 @"SELECT AdminID FROM AdminUsers WHERE Email = @userEmail AND Active = 1 AND CentreID = @centreID" , 
942+                 new  {  userEmail ,  centreID  } 
943+             ) ; 
944+             if  ( adminId  is  null ) 
945+             { 
946+                 return  - 4 ; 
947+             } 
948+ 
949+             var  ownerEmail  =  ( string ? ) connection . ExecuteScalar ( @"SELECT AU.Email FROM SelfAssessments SA 
950+                             INNER JOIN AdminUsers AU ON AU.AdminID = SA.CreatedByAdminID 
951+                             WHERE SA.ID = @competencyAssessmentId" ,  new  {  competencyAssessmentId  } ) ; 
952+             if  ( ownerEmail  ==  userEmail ) 
953+             { 
954+                 return  - 5 ; 
955+             } 
956+ 
957+             var  numberOfAffectedRows  =  connection . Execute ( 
958+                 @"INSERT INTO SelfAssessmentCollaborators (SelfAssessmentID, AdminID, UserEmail, CanModify) 
959+                     VALUES (@competencyAssessmentId, @adminId, @userEmail, @canModify)" , 
960+                 new  {  competencyAssessmentId ,  adminId ,  userEmail ,  canModify  } 
961+             ) ; 
962+             if  ( numberOfAffectedRows  <  1 ) 
963+             { 
964+                 logger . LogWarning ( 
965+                     $ "Not inserting framework collaborator as db insert failed. AdminId: { adminId } , userEmail: { userEmail } , competencyAssessmentId: { competencyAssessmentId } , canModify: { canModify } "
966+                 ) ; 
967+                 return  - 1 ; 
968+             } 
969+ 
970+             if  ( adminId  >  0 ) 
971+             { 
972+                 connection . Execute ( 
973+                     @"UPDATE AdminUsers SET IsWorkforceManager = 1 WHERE AdminId = @adminId AND IsWorkforceManager = 0" , 
974+                     new  {  adminId  } 
975+                 ) ; 
976+             } 
977+ 
978+             existingId  =  connection . QuerySingle < int > ( 
979+                 @"SELECT COALESCE 
980+                      ((SELECT ID 
981+                       FROM    SelfAssessmentCollaborators 
982+                       WHERE (SelfAssessmentID = @competencyAssessmentId) AND (UserEmail = @userEmail) AND (IsDeleted=0)), 0) AS AdminID" , 
983+                 new  {  competencyAssessmentId ,  adminId ,  userEmail  } 
984+             ) ; 
985+             return  existingId ; 
986+         } 
987+ 
988+         public  void  RemoveCollaboratorFromCompetencyAssessment ( int  competencyAssessmentId ,  int  id ) 
989+         { 
990+             var  adminId  =  ( int ? ) connection . ExecuteScalar ( 
991+                 @"SELECT AdminID FROM SelfAssessmentCollaborators WHERE  (SelfAssessmentID = @competencyAssessmentId) AND (ID = @id)" , 
992+                 new  {  competencyAssessmentId ,  id  } 
993+             ) ; 
994+             connection . Execute ( 
995+                 @"UPDATE SelfAssessmentCollaborators SET IsDeleted=1 WHERE (SelfAssessmentID = @competencyAssessmentId) AND (ID = @id); 
996+                     UPDATE AdminUsers SET IsWorkforceManager = 0 WHERE AdminID = @adminId AND AdminID NOT IN (SELECT DISTINCT AdminID FROM SelfAssessmentCollaborators);" , 
997+                 new  {  competencyAssessmentId ,  id ,  adminId  } 
998+             ) ; 
999+         } 
1000+         public  CompetencyAssessmentCollaboratorNotification ?  GetCollaboratorNotification ( int  id ,  int  invitedByAdminId ) 
1001+         { 
1002+             return  connection . Query < CompetencyAssessmentCollaboratorNotification > ( 
1003+                 @"SELECT 
1004+                     sc.SelfAssessmentID, 
1005+                     sc.AdminID, 
1006+                     sc.CanModify, 
1007+                     sc.UserEmail, 
1008+                     au.Active AS UserActive, 
1009+                     CASE WHEN sc.CanModify = 1 THEN 'Contributor' ELSE 'Reviewer' END AS CompetencyAssessmentRole, 
1010+                     sa.[Name] AS CompetencyAssessmentName, 
1011+                     (SELECT Forename + ' ' + Surname + (CASE WHEN Active = 1 THEN '' ELSE ' (Inactive)' END) AS Expr1 FROM AdminUsers AS au1 WHERE (AdminID = @invitedByAdminId)) AS InvitedByName, 
1012+                     (SELECT Email FROM AdminUsers AS au2 WHERE (AdminID = @invitedByAdminId)) AS InvitedByEmail 
1013+                 FROM SelfAssessmentCollaborators AS sc 
1014+                 INNER JOIN SelfAssessments AS sa ON sc.SelfAssessmentID = sa.ID 
1015+                 INNER JOIN AdminUsers AS au ON sc.AdminID = au.AdminID 
1016+                 WHERE (sc.ID = @id) AND (sc.IsDeleted=0)" , 
1017+                 new  {  invitedByAdminId ,  id  } 
1018+             ) . FirstOrDefault ( ) ; 
1019+         } 
8661020    } 
8671021} 
0 commit comments