chore(letter): option to avoid sending a notification upon blocking

This commit is contained in:
Steffen Jost 2023-05-10 10:41:15 +00:00
parent 4d432305a7
commit 1de1cdbfd4
6 changed files with 21 additions and 8 deletions

View File

@ -30,6 +30,7 @@ QualificationScheduleRenewalTooltip: Wird eine Benachrichtigung versendet, falls
QualificationUserNoRenewal: Läuft ohne Benachrichtigung aus QualificationUserNoRenewal: Läuft ohne Benachrichtigung aus
QualificationUserNone: Für diese Person sind keine Qualifikationen registriert. QualificationUserNone: Für diese Person sind keine Qualifikationen registriert.
QualificationBlockReason: Entzugsbegründung QualificationBlockReason: Entzugsbegründung
QualificationBlockNotify: Benachrichtigung verschicken
QualificationExpired: Ungültig seit QualificationExpired: Ungültig seit
LmsUser: Inhaber LmsUser: Inhaber
LmsURL: Link ELearning LmsURL: Link ELearning

View File

@ -30,6 +30,7 @@ QualificationScheduleRenewalTooltip: Will there be a notification, if this quali
QualificationUserNoRenewal: Expires without further notification QualificationUserNoRenewal: Expires without further notification
QualificationUserNone: No registered qualifications for this person. QualificationUserNone: No registered qualifications for this person.
QualificationBlockReason: Reason for revoking QualificationBlockReason: Reason for revoking
QualificationBlockNotify: Send notification
QualificationExpired: Expired on QualificationExpired: Expired on
LmsUser: Licensee LmsUser: Licensee
LmsURL: Link E-learning LmsURL: Link E-learning

View File

@ -352,6 +352,7 @@ data LicenceTableActionData = LicenceTableChangeAvsData
| LicenceTableRevokeFDriveData | LicenceTableRevokeFDriveData
{ licenceTableChangeFDriveQId :: QualificationId { licenceTableChangeFDriveQId :: QualificationId
, licenceTableChangeFDriveReason :: Text , licenceTableChangeFDriveReason :: Text
, licenceTableChangeFDriveNotify :: Bool
} }
| LicenceTableGrantFDriveData | LicenceTableGrantFDriveData
{ licenceTableChangeFDriveQId :: QualificationId { licenceTableChangeFDriveQId :: QualificationId
@ -444,7 +445,7 @@ getProblemAvsSynchR = do
then return (-1) then return (-1)
else do else do
uids <- view _userAvsUser <<$>> selectList [UserAvsPersonId <-. Set.toList apids] [] uids <- view _userAvsUser <<$>> selectList [UserAvsPersonId <-. Set.toList apids] []
qualificationUserBlocking licenceTableChangeFDriveQId uids $ qualificationUserBlocking licenceTableChangeFDriveQId uids licenceTableChangeFDriveNotify $
Just $ QualificationBlocked Just $ QualificationBlocked
{ qualificationBlockedDay = nowaday { qualificationBlockedDay = nowaday
, qualificationBlockedReason = licenceTableChangeFDriveReason , qualificationBlockedReason = licenceTableChangeFDriveReason
@ -604,6 +605,8 @@ mkLicenceTable apidStatus dbtIdent aLic apids = do
then singletonMap LicenceTableRevokeFDrive $ LicenceTableRevokeFDriveData then singletonMap LicenceTableRevokeFDrive $ LicenceTableRevokeFDriveData
<$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid <$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid
<*> apreq textField (fslI MsgQualificationBlockReason) Nothing <*> apreq textField (fslI MsgQualificationBlockReason) Nothing
<*> apreq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgQualificationBlockNotify) (Just False)
else singletonMap LicenceTableGrantFDrive $ LicenceTableGrantFDriveData else singletonMap LicenceTableGrantFDrive $ LicenceTableGrantFDriveData
<$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid <$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid
<*> apreq dayField (fslI MsgLmsQualificationValidUntil) Nothing -- apreq?! <*> apreq dayField (fslI MsgLmsQualificationValidUntil) Nothing -- apreq?!

View File

@ -269,7 +269,7 @@ data QualificationTableActionData
= QualificationActExpireData = QualificationActExpireData
| QualificationActUnexpireData | QualificationActUnexpireData
| QualificationActBlockSupervisorData | QualificationActBlockSupervisorData
| QualificationActBlockData { qualTableActBlockReason :: Text } | QualificationActBlockData { qualTableActBlockReason :: Text, qualTableActNotify :: Bool }
| QualificationActUnblockData | QualificationActUnblockData
| QualificationActRenewData | QualificationActRenewData
| QualificationActGrantData { qualTableActGrantUntil :: Day } | QualificationActGrantData { qualTableActGrantUntil :: Day }
@ -489,6 +489,7 @@ postQualificationR sid qsh = do
[ singletonMap QualificationActUnblock $ pure QualificationActUnblockData -- Admin-only actions [ singletonMap QualificationActUnblock $ pure QualificationActUnblockData -- Admin-only actions
, singletonMap QualificationActBlock $ QualificationActBlockData , singletonMap QualificationActBlock $ QualificationActBlockData
<$> apreq textField (fslI MsgQualificationBlockReason) Nothing <$> apreq textField (fslI MsgQualificationBlockReason) Nothing
<*> apreq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgQualificationBlockNotify) (Just False)
, singletonMap QualificationActRenew $ pure QualificationActRenewData , singletonMap QualificationActRenew $ pure QualificationActRenewData
, singletonMap QualificationActGrant , singletonMap QualificationActGrant
(QualificationActGrantData <$> apopt dayField (fslI MsgLmsQualificationValidUntil) dayExpiry) (QualificationActGrantData <$> apopt dayField (fslI MsgLmsQualificationValidUntil) dayExpiry)
@ -556,11 +557,14 @@ postQualificationR sid qsh = do
, qualificationBlockedReason = qualTableActBlockReason , qualificationBlockedReason = qualTableActBlockReason
} }
_ -> error "Handle.Qualification.isBlockAct returned non-block action" _ -> error "Handle.Qualification.isBlockAct returned non-block action"
notify = case action of
QualificationActBlockData{qualTableActNotify} -> qualTableActNotify
_ -> False
oks <- runDB $ do oks <- runDB $ do
deleteWhere [UserSupervisorUser <-. selUserIds] deleteWhere [UserSupervisorUser <-. selUserIds]
deleteWhere [UserCompanyUser <-. selUserIds] deleteWhere [UserCompanyUser <-. selUserIds]
qualificationUserBlocking qid selUserIds qubr qualificationUserBlocking qid selUserIds notify qubr
let nrq = length selectedUsers let nrq = length selectedUsers
warnLevel = if warnLevel = if
| oks < 0 -> Error | oks < 0 -> Error

View File

@ -119,9 +119,10 @@ qualificationUserBlocking ::
, MonadHandler m , MonadHandler m
, MonadCatch m , MonadCatch m
, Num n , Num n
) => QualificationId -> [UserId] -> Maybe QualificationBlocked -> ReaderT (YesodPersistBackend (HandlerSite m)) m n ) => QualificationId -> [UserId] -> Bool -> Maybe QualificationBlocked -> ReaderT (YesodPersistBackend (HandlerSite m)) m n
qualificationUserBlocking qid uids qb = do qualificationUserBlocking qid uids notify qb = do
now <- liftIO getCurrentTime
oks <- updateWhereCount -- prevents storage of transactionQualificatioUser oks <- updateWhereCount -- prevents storage of transactionQualificatioUser
( [ QualificationUserBlockedDue !=. Nothing | isNothing qb -- only unblock blocked qualification; allow overwrite for existing blocks ( [ QualificationUserBlockedDue !=. Nothing | isNothing qb -- only unblock blocked qualification; allow overwrite for existing blocks
] ++ ] ++
@ -129,8 +130,11 @@ qualificationUserBlocking qid uids qb = do
, QualificationUserUser <-. uids , QualificationUserUser <-. uids
] ]
) )
[ QualificationUserBlockedDue =. qb (guardMonoid (not notify)
] [ QualificationUserLastNotified =. now
] ++
[ QualificationUserBlockedDue =. qb
])
forM_ uids $ \uid -> do forM_ uids $ \uid -> do
audit TransactionQualificationUserBlocking audit TransactionQualificationUserBlocking
{ -- transactionQualificationUser = quid { -- transactionQualificationUser = quid

View File

@ -315,7 +315,7 @@ dispatchJobLmsUserlist qid = JobHandlerAtomic act
, transactionReceived = lReceived , transactionReceived = lReceived
} }
update luid [LmsUserStatus =. newStatus] update luid [LmsUserStatus =. newStatus]
void $ qualificationUserBlocking qid [lmsUserUser luser] $ Just $ mkQualificationBlocked QualificationBlockFailedELearning lmsMsgDay void $ qualificationUserBlocking qid [lmsUserUser luser] True $ Just $ mkQualificationBlocked QualificationBlockFailedELearning lmsMsgDay
-- DEACTIVATED FOR NOW; UPON REACTIVATION: DELAY Sending to check for unblocking a few hours later! -- DEACTIVATED FOR NOW; UPON REACTIVATION: DELAY Sending to check for unblocking a few hours later!
-- queueDBJob JobSendNotification -- queueDBJob JobSendNotification
-- { jRecipient = lmsUserUser luser -- { jRecipient = lmsUserUser luser