From 8f54ea1051ffbd33efc4e6dfe96d879f4a73783f Mon Sep 17 00:00:00 2001 From: Steffen Date: Wed, 7 Aug 2024 17:50:38 +0200 Subject: [PATCH] refactor(qualifications): unify qualification selectField mechanics --- src/Handler/Admin/Avs.hs | 19 ++++++------------- src/Handler/Utils/Qualification.hs | 4 ++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/Handler/Admin/Avs.hs b/src/Handler/Admin/Avs.hs index b31aecf62..cf0d3ea3a 100644 --- a/src/Handler/Admin/Avs.hs +++ b/src/Handler/Admin/Avs.hs @@ -59,7 +59,7 @@ instance Finite ButtonAvsTest nullaryPathPiece ''ButtonAvsTest camelToPathPiece instance Button UniWorX ButtonAvsTest where - btnLabel BtnCheckLicences = "Check all licences" -- could be msg + btnLabel BtnCheckLicences = "Show all licence difference to current AVS" -- could be msg -- btnLabel BtnSynchLicences = "Synchronize all licences" -- could be msg btnClasses BtnCheckLicences = [BCIsButton, BCPrimary] -- btnClasses BtnSynchLicences = [BCIsButton, BCDanger] @@ -270,7 +270,7 @@ postAdminAvsR = do Nothing -> return Nothing (Just BtnCheckLicences) -> do res <- try $ do - allLicences <- avsQuery AvsQueryGetAllLicences + allLicences <- avsQueryNoCache AvsQueryGetAllLicences computeDifferingLicences allLicences case res of (Right diffs) -> do @@ -531,11 +531,12 @@ instance HasUser LicenceTableData where mkLicenceTable :: AvsPersonIdMapPersonCard -> Text -> AvsLicence -> Set AvsPersonId -> DB (FormResult (LicenceTableActionData, Set AvsPersonId), Widget) mkLicenceTable apidStatus dbtIdent aLic apids = do currentRoute <- fromMaybe (error "mkLicenceTable called from 404-handler") <$> liftHandler getCurrentRoute - avsQualifications <- selectList [QualificationAvsLicence !=. Nothing] [] + avsQualifications <- selectList [QualificationAvsLicence !=. Nothing] [Asc QualificationName] now <- liftIO getCurrentTime let nowaday = utctDay now avsQids = entityKey <$> avsQualifications + qualOpts = pure $ qualificationsOptionList avsQualifications -- fltrLic qual = if -- | aLic == AvsNoLicence -> E.isNothing (qual E.?. QualificationId) E.||. E.isJust (E.joinV $ qual E.?. QualificationAvsLicence) -- could be R, F, both or none at all, but has licence in AVS -- | otherwise -> E.isNothing (qual E.?. QualificationId) E.||. (E.val aLic E.=?. E.joinV (qual E.?. QualificationAvsLicence)) -- if we suggest granting that licence, this join should deliver a value too @@ -614,14 +615,6 @@ mkLicenceTable apidStatus dbtIdent aLic apids = do , prismAForm (singletonFilter "user-company") mPrev $ aopt textField (fslI MsgTableCompany) ] - qualOpt :: Entity Qualification -> Handler (Option QualificationId) - qualOpt (Entity qualId qual) = do - cQualId :: CryptoUUIDQualification <- encrypt qualId - return $ Option - { optionDisplay = CI.original $ qualificationName qual - , optionInternalValue = qualId - , optionExternalValue = tshow cQualId - } aLicQid = fmap entityKey . headMay $ filter ((== Just aLic) . qualificationAvsLicence . entityVal) avsQualifications -- Block identical to Handler/Qualifications TODO: refactor @@ -647,12 +640,12 @@ mkLicenceTable apidStatus dbtIdent aLic apids = do [ singletonMap LicenceTableChangeAvs $ pure LicenceTableChangeAvsData , if aLic == AvsNoLicence then singletonMap LicenceTableRevokeFDrive $ LicenceTableRevokeFDriveData - <$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid + <$> apreq (selectField qualOpts) (fslI MsgQualificationName) aLicQid <*> apreq (textField & cfStrip & addDatalist suggestionsBlock) (fslI MsgQualificationBlockReason) Nothing <*> areq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgQualificationBlockNotify) (Just False) else singletonMap LicenceTableGrantFDrive $ LicenceTableGrantFDriveData - <$> apreq (selectField . fmap mkOptionList $ mapM qualOpt avsQualifications) (fslI MsgQualificationName) aLicQid + <$> apreq (selectField qualOpts) (fslI MsgQualificationName) aLicQid <*> apreq (textField & cfStrip & addDatalist suggestionsUnblock) (fslI MsgQualificationGrantReason) Nothing <*> apreq dayField (fslI MsgLmsQualificationValidUntil) Nothing -- apreq?! <*> aopt (convertField not not (boolField . Just $ SomeMessage MsgBoolIrrelevant)) (fslI MsgQualificationUserNoRenewal) Nothing diff --git a/src/Handler/Utils/Qualification.hs b/src/Handler/Utils/Qualification.hs index 50f3a9384..19888e2e6 100644 --- a/src/Handler/Utils/Qualification.hs +++ b/src/Handler/Utils/Qualification.hs @@ -299,8 +299,8 @@ qualificationUserUnblockByReason qid uids mbUnblockTime (qualificationChangeReas qualificationOption :: Entity Qualification -> Option QualificationId qualificationOption (Entity qid Qualification{..}) = let qsh = ciOriginal $ unSchoolKey qualificationSchool - in Option{ optionDisplay = ciOriginal qualificationName <> " (" <> qsh <> ")" - , optionExternalValue = "(" <> ciOriginal qualificationShorthand <> "___" <> qsh <> ")" + in Option{ optionDisplay = ciOriginal qualificationName <> " (" <> qsh <> ")" + , optionExternalValue = toPathPiece $ ciOriginal qualificationShorthand <> "___" <> qsh -- both a publicly known already , optionInternalValue = qid }