From c49b329d18849daf1001e0645c4dcac82b526ce3 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Mon, 3 Apr 2023 14:57:23 +0000 Subject: [PATCH] chore(avs): use AVSNO as matriculation --- .../uniworx/utils/table_column/de-de-formal.msg | 4 ++-- messages/uniworx/utils/table_column/en-eu.msg | 4 ++-- src/Handler/Tutorial/Users.hs | 2 +- src/Handler/Users.hs | 15 ++++++++------- src/Handler/Utils/Avs.hs | 5 +++-- src/Handler/Utils/Table/Columns.hs | 4 ++-- test/Database/Fill.hs | 2 +- 7 files changed, 19 insertions(+), 17 deletions(-) diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index 681b63f78..f0ce25d50 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -16,7 +16,7 @@ TableTerm !ident-ok: Semester TableCourseSchool: Institut TableSubmissionGroup: Feste Abgabegruppe TableNoSubmissionGroup: Keine feste Abgabegruppe -TableMatrikelNr: Matrikelnummer +TableMatrikelNr: AVS Nr TableSex: Geschlecht TableBirthday: Geburtsdatum TableSchool: Institut @@ -56,7 +56,7 @@ TableTutorialTime: Zeit TableTutorialDeregisterUntil: Abmeldungen bis TableActionsHead: Aktionen TableNoFilter: Keine Einschränkung -TableUserMatriculation: Matrikelnummer +TableUserMatriculation: ASV Nummer TableColumnStudyFeatures: Studiendaten TableSchoolShort: Kürzel TableSchoolName !ident-ok: Name diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/messages/uniworx/utils/table_column/en-eu.msg index 0c4162654..642837c6d 100644 --- a/messages/uniworx/utils/table_column/en-eu.msg +++ b/messages/uniworx/utils/table_column/en-eu.msg @@ -16,7 +16,7 @@ TableTerm: Semester TableCourseSchool: Department TableSubmissionGroup: Registered submission group TableNoSubmissionGroup: No registered submission group -TableMatrikelNr: Matriculation +TableMatrikelNr: AVS No TableSex: Sex TableBirthday: Birthday TableSchool: Department @@ -56,7 +56,7 @@ TableTutorialDeregisterUntil: Deregister until TableActionsHead: Actions TableTutorialTime: Time TableNoFilter: No restriction -TableUserMatriculation: Matriculation +TableUserMatriculation: AVS Number TableColumnStudyFeatures: Features of study TableSchoolShort: Shorthand TableSchoolName: Name diff --git a/src/Handler/Tutorial/Users.hs b/src/Handler/Tutorial/Users.hs index d3a4333be..ae3330ba3 100644 --- a/src/Handler/Tutorial/Users.hs +++ b/src/Handler/Tutorial/Users.hs @@ -80,7 +80,7 @@ postTUsersR tid ssh csh tutn = do psValidator = def & defaultSortingByName & restrictSorting (\name _ -> none (== name) ["note", "registration", "tutorials", "exams", "submission-group", "state"]) -- We need to be careful to restrict allowed sorting/filter to not expose sensitive information - & restrictFilter (\name _ -> none (== name) ["tutorial", "exam", "submission-group", "active", "has-personalised-sheet-files"]) + & restrictFilter (\name _ -> none (== name) ["tutorial", "exam", "submission-group", "active", "has-personalised-sheet-files"]) isInTut q = E.exists $ do tutorialParticipant <- E.from $ E.table @TutorialParticipant E.where_ $ tutorialParticipant E.^. TutorialParticipantUser E.==. queryUser q E.^. UserId diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index 29f3d71f3..2c68d028a 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -99,9 +99,7 @@ postUsersR = do , sortable (Just "name") (i18nCell MsgName) $ \DBRow{ dbrOutput = Entity uid User{..} } -> anchorCellM (AdminUserR <$> encrypt uid) (nameWidget userDisplayName userSurname) --- , sortable (Just "matriculation") (i18nCell MsgTableMatrikelNr) $ \DBRow{ dbrOutput = Entity uid User{..} } -> anchorCellM --- (AdminUserR <$> encrypt uid) --- (toWgt userMatrikelnummer) + , sortable (Just "matriculation") (i18nCell MsgTableMatrikelNr) $ \DBRow{ dbrOutput = entUsr } -> cellHasMatrikelnummerLinked entUsr , sortable (Just "user-company") (i18nCell MsgTableCompany) $ \DBRow{ dbrOutput = Entity uid _ } -> flip (set' cellContents) mempty $ do -- why does sqlCell not work here? Mismatch "YesodDB UniWorX" and "RWST (Maybe (Env,FileEnv), UniWorX, [Lang]) Enctype Ints (HandlerFor UniWorX" companies' <- liftHandler . runDB . E.select $ E.from $ \(usrComp `E.InnerJoin` comp) -> do E.on $ usrComp E.^. UserCompanyCompany E.==. comp E.^. CompanyId @@ -215,6 +213,9 @@ postUsersR = do , ( "display-name" , SortColumn $ \user -> user E.^. UserDisplayName ) + , ( "matriculation" + , SortColumn $ \user -> user E.^. UserMatrikelnummer + ) , ( "personal-number" , SortColumn $ \user -> user E.^. UserCompanyPersonalNumber ) @@ -262,10 +263,10 @@ postUsersR = do Just needle -> (E.castString (user E.^. UserEmail) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) E.||. (E.castString (user E.^. UserDisplayEmail) `E.ilike` (E.%) E.++. E.val needle E.++. (E.%)) ) --- , ( "matriculation", FilterColumn $ \user (criteria :: Set.Set Text) -> if --- | Set.null criteria -> E.true -- TODO: why can this be eFalse and work still? --- | otherwise -> E.any (\c -> user E.^. UserMatrikelnummer `E.hasInfix` E.val c) criteria --- ) + , ( "matriculation", FilterColumn $ \user (criteria :: Set.Set Text) -> if + | Set.null criteria -> E.true + | otherwise -> E.any (\c -> user E.^. UserMatrikelnummer `E.hasInfix` E.val c) criteria + ) , ( "personal-number", FilterColumn $ \user (criteria :: Set.Set Text) -> if | Set.null criteria -> E.true -- TODO: why can this be eFalse and work still? | otherwise -> E.any (\c -> user E.^. UserCompanyPersonalNumber `E.hasInfix` E.val c) criteria diff --git a/src/Handler/Utils/Avs.hs b/src/Handler/Utils/Avs.hs index 4c44017fa..6ca6c5700 100644 --- a/src/Handler/Utils/Avs.hs +++ b/src/Handler/Utils/Avs.hs @@ -434,7 +434,7 @@ upsertAvsUserById api = do , audSurname = avsSurname , audDisplayName = avsFirstName <> Text.cons ' ' avsSurname , audDisplayEmail = "" -- Email is unknown in this version of the avs query, to be updated later (FUTURE TODO) - , audMatriculation = Nothing + , audMatriculation = Just $ tshow avsPersonPersonNo , audSex = Nothing , audBirthday = Nothing , audMobile = Nothing @@ -460,7 +460,7 @@ upsertAvsUserById api = do return mbUid (Just (Entity _ UserAvs{userAvsUser=uid}) - , Just AvsDataPerson{avsPersonPersonCards, avsPersonInternalPersonalNo, avsPersonFirstName= Text.strip -> avsFirstName, avsPersonLastName= Text.strip -> avsSurname}) -> do -- known user, update address and pinPassword + , Just AvsDataPerson{avsPersonPersonCards, avsPersonInternalPersonalNo, avsPersonPersonNo, avsPersonFirstName= Text.strip -> avsFirstName, avsPersonLastName= Text.strip -> avsSurname}) -> do -- known user, update address and pinPassword let (mbCompany, mbCoFirmAddr, _) = guessLicenceAddress avsPersonPersonCards userFirmAddr = plaintextToStoredMarkup <$> mbCoFirmAddr pinCard = Set.lookupMax avsPersonPersonCards @@ -470,6 +470,7 @@ upsertAvsUserById api = do update uid [ UserFirstName =. avsFirstName -- update in case of name changes via AVS; might be changed again through LDAP , UserSurname =. avsSurname , UserDisplayName =. avsFirstName <> Text.cons ' ' avsSurname + , UserMatrikelnummer =. Just (tshow avsPersonPersonNo) -- TODO: Deactivate this update after Q2/2023; this is only needed since UserMatrikelnummer was used for AVSNO later , UserCompanyPersonalNumber =. avsInternalPersonalNo <$> canonical avsPersonInternalPersonalNo ] oldCards <- selectList [UserAvsCardPersonId ==. api] [] diff --git a/src/Handler/Utils/Table/Columns.hs b/src/Handler/Utils/Table/Columns.hs index 83d391458..473b3c484 100644 --- a/src/Handler/Utils/Table/Columns.hs +++ b/src/Handler/Utils/Table/Columns.hs @@ -442,8 +442,8 @@ fltrUserMatriculationUI :: DBFilterUI fltrUserMatriculationUI mPrev = prismAForm (singletonFilter "user-matriculation") mPrev $ aopt textField (fslI MsgTableUserMatriculation) -colUserMatriclenr :: (IsDBTable m c, HasUser a) => Colonnade Sortable a (DBCell m c) -colUserMatriclenr = sortable (Just "user-matriclenumber") (i18nCell MsgTableMatrikelNr) cellHasMatrikelnummer +colUserMatriclenr :: (IsDBTable m c, HasEntity a User) => Colonnade Sortable a (DBCell m c) +colUserMatriclenr = sortable (Just "user-matriclenumber") (i18nCell MsgTableMatrikelNr) cellHasMatrikelnummerLinked sortUserMatriclenr :: IsString d => (t -> E.SqlExpr (Entity User)) -> (d, SortColumn t r') sortUserMatriclenr queryUser = ("user-matriclenumber", SortColumn $ queryUser >>> (E.^. UserMatrikelnummer)) diff --git a/test/Database/Fill.hs b/test/Database/Fill.hs index c9dd1dbca..7e9badc5e 100644 --- a/test/Database/Fill.hs +++ b/test/Database/Fill.hs @@ -163,7 +163,7 @@ fillDb = do , userAuthentication = pwSimple , userLastAuthentication = Nothing , userTokensIssuedAfter = Nothing - , userMatrikelnummer = Nothing + , userMatrikelnummer = Just "94094094094" , userEmail = "e12345@fraport.de" , userDisplayEmail = "jost@tcs.ifi.lmu.de" , userDisplayName = "Steffen Jost"