chore(avs): prepare function to update all letter receivers
This commit is contained in:
parent
612fd9284b
commit
1686a96cc5
@ -13,6 +13,7 @@ module Handler.Utils.Avs
|
|||||||
, synchAvsLicences
|
, synchAvsLicences
|
||||||
, lookupAvsUser, lookupAvsUsers
|
, lookupAvsUser, lookupAvsUsers
|
||||||
, AvsException(..)
|
, AvsException(..)
|
||||||
|
, updateReceivers
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
@ -388,3 +389,26 @@ lookupAvsUsers apis = do
|
|||||||
AvsResponsePerson adps <- throwLeftM . avsQueryPerson $ def{avsPersonQueryCardNo = Just avsDataCardNo, avsPersonQueryVersionNo = Just avsDataVersionNo}
|
AvsResponsePerson adps <- throwLeftM . avsQueryPerson $ def{avsPersonQueryCardNo = Just avsDataCardNo, avsPersonQueryVersionNo = Just avsDataVersionNo}
|
||||||
return $ mergeByPersonId adps acc2
|
return $ mergeByPersonId adps acc2
|
||||||
|
|
||||||
|
|
||||||
|
-- | Like `Handler.Utils.getReceivers`, but calls upsertAvsUserById on each user to ensure that postal address is up-to-date
|
||||||
|
updateReceivers :: UserId -> Handler (Entity User, [Entity User], Bool)
|
||||||
|
updateReceivers uid = do
|
||||||
|
(underling :: Entity User, avsUnderling :: Maybe (Entity UserAvs), avsSupers :: [Entity UserAvs]) <- runDB $ (,,)
|
||||||
|
<$> getJustEntity uid
|
||||||
|
<*> getBy (UniqueUserAvsUser uid)
|
||||||
|
<*> (E.select $ do
|
||||||
|
(usrSuper :& usrAvs) <-
|
||||||
|
E.from $ E.table @UserSupervisor
|
||||||
|
`E.innerJoin` E.table @UserAvs
|
||||||
|
`E.on` (\(usrSuper :& userAvs) ->usrSuper E.^. UserSupervisorSupervisor E.==. userAvs E.^. UserAvsUser)
|
||||||
|
E.where_ $ (usrSuper E.^. UserSupervisorUser E.==. E.val uid)
|
||||||
|
E.&&. (usrSuper E.^. UserSupervisorRerouteNotifications)
|
||||||
|
pure usrAvs
|
||||||
|
)
|
||||||
|
let toUpdate = Set.fromList (userAvsPersonId . entityVal <$> mcons avsUnderling avsSupers)
|
||||||
|
forM_ toUpdate (void . upsertAvsUserById) -- update postaddress from AVS
|
||||||
|
let receiverIDs :: [UserId] = userAvsUser . entityVal <$> avsSupers
|
||||||
|
receivers <- runDB (catMaybes <$> mapM getEntity receiverIDs)
|
||||||
|
return $ if null receivers
|
||||||
|
then (underling, pure underling, True)
|
||||||
|
else (underling, receivers, underling `elem` receivers)
|
||||||
@ -47,7 +47,6 @@ import qualified Data.Text as Text
|
|||||||
|
|
||||||
import Jobs.Types(Job, JobChildren)
|
import Jobs.Types(Job, JobChildren)
|
||||||
|
|
||||||
|
|
||||||
abbrvName :: User -> Text
|
abbrvName :: User -> Text
|
||||||
abbrvName User{userDisplayName, userFirstName, userSurname} =
|
abbrvName User{userDisplayName, userFirstName, userSurname} =
|
||||||
if | (lastDisplayName : tsrif) <- reverse nameParts
|
if | (lastDisplayName : tsrif) <- reverse nameParts
|
||||||
@ -88,7 +87,8 @@ getPostalAddress User{..}
|
|||||||
| otherwise
|
| otherwise
|
||||||
= Nothing
|
= Nothing
|
||||||
|
|
||||||
-- | Return Entity User and all Supervisors with rerouteNotifications as well as
|
-- | DEPRECATED, use Handler.Utis.Avs. updateReceivers instead
|
||||||
|
-- Return Entity User and all Supervisors with rerouteNotifications as well as
|
||||||
-- a boolean indicating if the user is own supervisor with rerouteNotifications
|
-- a boolean indicating if the user is own supervisor with rerouteNotifications
|
||||||
getReceivers :: UserId -> DB (Entity User, [Entity User], Bool)
|
getReceivers :: UserId -> DB (Entity User, [Entity User], Bool)
|
||||||
getReceivers uid = do
|
getReceivers uid = do
|
||||||
|
|||||||
@ -413,7 +413,7 @@ instance MDLetter LetterRenewQualificationF where
|
|||||||
|
|
||||||
sendEmailOrLetter :: (MDLetter l) => UserId -> l -> Handler Bool
|
sendEmailOrLetter :: (MDLetter l) => UserId -> l -> Handler Bool
|
||||||
sendEmailOrLetter recipient letter = do
|
sendEmailOrLetter recipient letter = do
|
||||||
(underling, receivers, undercopy) <- liftHandler . runDB $ getReceivers recipient
|
(underling, receivers, undercopy) <- runDB $ getReceivers recipient
|
||||||
let tmpl = getTemplate $ pure letter
|
let tmpl = getTemplate $ pure letter
|
||||||
pjid = getPJId letter
|
pjid = getPJId letter
|
||||||
-- Below are only needed if sent by email
|
-- Below are only needed if sent by email
|
||||||
|
|||||||
Reference in New Issue
Block a user