chore(SAP): send latest blocking

This commit is contained in:
Steffen Jost 2023-10-12 16:11:47 +00:00
parent f888da3ab0
commit 855aee7f78

View File

@ -56,8 +56,8 @@ instance ToNamedRecord SapUserTableCsv where
-- | Removes all personalNummer which are not numbers between 10000 and 99999 (also excludes E-Accounts), which should not be returned by the query anyway (only qualfications with sap id and users with internal personnel number must be transmitted)
-- TODO: once temporary suspensions are implemented, a user must be transmitted to SAP in two rows: firstheld->suspensionFrom & suspensionTo->validTo
sapRes2csv :: [(Ex.Value (Maybe Text), Ex.Value Day, Ex.Value Day, Ex.Value (Maybe Text))] -> [SapUserTableCsv]
sapRes2csv l = [ res | (Ex.Value pn@(Just persNo), Ex.Value firstHeld, Ex.Value validUntil, Ex.Value (Just sapId)) <- l
sapRes2csv :: [(Ex.Value (Maybe Text), Ex.Value Day, Ex.Value Day, Ex.Value (Maybe Text), Maybe (Entity QualificationUserBlock))] -> [SapUserTableCsv]
sapRes2csv l = [ res | (Ex.Value pn@(Just persNo), Ex.Value firstHeld, Ex.Value validUntil, Ex.Value (Just sapId), mbQualUserBlock) <- l
-- , let persNoAsInt = readMay =<< persNo -- also see Handler.Utils.Profile.validFraportPersonalNumber
-- , persNoAsInt >= Just (10000::Int) -- filter E-accounts for SAP export
-- , persNoAsInt <= Just (99999::Int) -- filter E-accounts for SAP export
@ -65,12 +65,16 @@ sapRes2csv l = [ res | (Ex.Value pn@(Just persNo), Ex.Value firstHeld, Ex.Value
{ csvSUTpersonalNummer = persNo
, csvSUTqualifikation = sapId
, csvSUTgültigVon = firstHeld
, csvSUTgültigBis = validUntil
, csvSUTgültigBis = getMaxValidDay mbQualUserBlock validUntil
-- , csvSUTsupendiertBis = blocked
, csvSUTausprägung = "J"
}
, validFraportPersonalNumber pn
]
where
getMaxValidDay :: Maybe (Entity QualificationUserBlock) -> Day -> Day
getMaxValidDay (Just Entity{entityVal=QualificationUserBlock{qualificationUserBlockUnblock=False, qualificationUserBlockFrom=bd}}) = min $ utctDay bd
getMaxValidDay _ = id
-- | Deliver all employess with a successful LDAP synch within the last 3 months
getQualificationSAPDirectR :: Handler TypedContent
@ -79,12 +83,17 @@ getQualificationSAPDirectR = do
fdate <- formatTime' "%Y%m%d_%H-%M" now
let ldap_cutoff = addDiffDaysRollOver (fromMonths $ -3) now
qualUsers <- runDB $ Ex.select $ do
(qual :& qualUser :& user) <-
(qual :& qualUser :& user :& qualBlock) <-
Ex.from $ Ex.table @Qualification
`Ex.innerJoin` Ex.table @QualificationUser
`Ex.on` (\(qual :& qualUser) -> qual Ex.^. QualificationId Ex.==. qualUser Ex.^. QualificationUserQualification)
`Ex.innerJoin` Ex.table @User
`Ex.on` (\(_ :& qualUser :& user) -> qualUser Ex.^. QualificationUserUser Ex.==. user Ex.^. UserId)
`Ex.leftJoin` Ex.table @QualificationUserBlock
`Ex.on` (\(_ :& qualUser :& _ :& qualBlock) ->
qualBlock Ex.?. QualificationUserBlockQualificationUser E.?=. qualUser Ex.^. QualificationUserId
Ex.&&. qualBlock `isLatestBlockBefore` Ex.val now
)
Ex.where_ $ E.isJust (qual Ex.^. QualificationSapId)
Ex.&&. E.isJust (user Ex.^. UserCompanyPersonalNumber)
Ex.&&. E.isJust (user Ex.^. UserLastLdapSynchronisation)
@ -95,6 +104,7 @@ getQualificationSAPDirectR = do
, qualUser Ex.^. QualificationUserValidUntil
-- , qualUser Ex.^. QualificationUserBlockedDue
, qual Ex.^. QualificationSapId
, qualBlock
)
let csvRendered = toCsvRendered sapUserTableCsvHeader $ sapRes2csv qualUsers
fmtOpts = (review csvPreset CsvPresetRFC)