@@ -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