diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/messages/uniworx/categories/courses/courses/de-de-formal.msg index 33a8e2f57..d18a54779 100644 --- a/messages/uniworx/categories/courses/courses/de-de-formal.msg +++ b/messages/uniworx/categories/courses/courses/de-de-formal.msg @@ -134,6 +134,7 @@ CourseUserSheets: Übungsblätter CsvColumnUserName: Voller Name des/der Teilnehmers/Teilnehmerin CsvColumnUserMatriculation: Matrikelnummer des/der Teilnehmers/Teilnehmerin CsvColumnUserSex: Geschlecht +CsvColumnUserBirthday: Geburtstag CsvColumnUserEmail: E-Mail-Adresse des/der Teilnehmers/Teilnehmerin CsvColumnUserCourseStudyFeatures: Alle relevanten Studiendaten des/der Teilnehmers/Teilnehmerin als Semikolon (;) separierte Liste CsvColumnUserRegistration: Zeitpunkt der Anmeldung zum Kurs (ISO 8601) diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/messages/uniworx/categories/courses/courses/en-eu.msg index a15956131..2bde12186 100644 --- a/messages/uniworx/categories/courses/courses/en-eu.msg +++ b/messages/uniworx/categories/courses/courses/en-eu.msg @@ -134,6 +134,7 @@ CourseUserSheets: Exercise sheets CsvColumnUserName: Participant's full name CsvColumnUserMatriculation: Participant's matriculation CsvColumnUserSex: Participant's sex +CsvColumnUserBirthday: Birthday CsvColumnUserEmail: Participant's email address CsvColumnUserCourseStudyFeatures: All relevant features of study for the participant, separated by semicolon (;) CsvColumnUserRegistration: Time of participant's enrollment (ISO 8601) diff --git a/messages/uniworx/categories/user/de-de-formal.msg b/messages/uniworx/categories/user/de-de-formal.msg index 9ebd9ddfa..459ba2255 100644 --- a/messages/uniworx/categories/user/de-de-formal.msg +++ b/messages/uniworx/categories/user/de-de-formal.msg @@ -13,6 +13,7 @@ AdminUserAuth: Authentifizierung AdminUserAuthTooltip: Abhängig von der Auswahl werden neue Benutzer über ihr neues FRADrive Konto benachrichtigt. AdminUserMatriculation: Matrikelnummer AdminUserSex: Geschlecht +AdminUserBirthday: Geburtsdatum AdminUserTelephone: Telefonnummer AdminUserMobile: Mobiltelefonnummer AdminUserFPersonalNumber: Personalnummer (nur Fraport AG) diff --git a/messages/uniworx/categories/user/en-eu.msg b/messages/uniworx/categories/user/en-eu.msg index 7b86db0d9..9d51a29a3 100644 --- a/messages/uniworx/categories/user/en-eu.msg +++ b/messages/uniworx/categories/user/en-eu.msg @@ -13,6 +13,7 @@ AdminUserAuth: Authentication AdminUserAuthTooltip: New users may be notified about their FRADrive account depending on this choice. AdminUserMatriculation: Matriculation AdminUserSex: Sex +AdminUserBirthday: Date of Birth AdminUserTelephone: Phone AdminUserMobile: Mobile AdminUserFPersonalNumber: Personnel number (Fraport AG only) diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index 024a150dc..1b6c4a69f 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -18,6 +18,7 @@ TableSubmissionGroup: Feste Abgabegruppe TableNoSubmissionGroup: Keine feste Abgabegruppe TableMatrikelNr: Matrikelnummer TableSex: Geschlecht +TableBirthday: Geburtsdatum TableSchool: Institut TableCourse: Kurs TableCourseMembers: Teilnehmer:innen diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/messages/uniworx/utils/table_column/en-eu.msg index 1367d7bb1..0c4162654 100644 --- a/messages/uniworx/utils/table_column/en-eu.msg +++ b/messages/uniworx/utils/table_column/en-eu.msg @@ -18,6 +18,7 @@ TableSubmissionGroup: Registered submission group TableNoSubmissionGroup: No registered submission group TableMatrikelNr: Matriculation TableSex: Sex +TableBirthday: Birthday TableSchool: Department TableCourse: Course TableCourseMembers: Participants diff --git a/models/users.model b/models/users.model index 8d3fc92ef..df89446df 100644 --- a/models/users.model +++ b/models/users.model @@ -37,7 +37,8 @@ User json -- Each Uni2work user has a corresponding row in this table; create notificationSettings NotificationSettings "default='{}'::jsonb" -- Bit-array for which events email notifications are requested by user; user-defined warningDays NominalDiffTime default=1209600 -- timedistance to pending deadlines for homepage infos csvOptions CsvOptions "default='{}'::jsonb" - sex Sex Maybe + sex Sex Maybe -- currently ignored + birthday Day Maybe -- for better identification showSex Bool default=false telephone Text Maybe mobile Text Maybe diff --git a/src/Foundation/Yesod/Auth.hs b/src/Foundation/Yesod/Auth.hs index 7d2c4be8a..5b7b6e969 100644 --- a/src/Foundation/Yesod/Auth.hs +++ b/src/Foundation/Yesod/Auth.hs @@ -278,6 +278,7 @@ decodeUser now UserDefaultConf{..} upsertMode ldapData = do , userWarningDays = userDefaultWarningDays , userShowSex = userDefaultShowSex , userSex = Nothing + , userBirthday = Nothing , userExamOfficeGetSynced = userDefaultExamOfficeGetSynced , userExamOfficeGetLabels = userDefaultExamOfficeGetLabels , userNotificationSettings = def diff --git a/src/Handler/Admin/Avs.hs b/src/Handler/Admin/Avs.hs index d82ae6365..9599ed97f 100644 --- a/src/Handler/Admin/Avs.hs +++ b/src/Handler/Admin/Avs.hs @@ -19,7 +19,7 @@ import qualified Data.Text as Text import qualified Data.CaseInsensitive as CI import qualified Data.Set as Set import qualified Data.Map as Map -import Database.Persist.Sql (updateWhereCount) +-- import Database.Persist.Sql (updateWhereCount) import Handler.Utils import Handler.Utils.Avs @@ -389,12 +389,14 @@ getProblemAvsSynchR = do mkind = if oks < no_req then Warning else Success addMessageI mkind $ MsgAvsSetLicences aLic oks no_req redirect ProblemAvsSynchR -- reload to update all tables - - procRes alic (LicenceTableRevokeFDriveData, selectedUsers) = do - runDB $ do - qId <- getKeyBy404 $ UniqueQualificationAvsLicence $ Just alic + + procRes alic (LicenceTableRevokeFDriveData, apids) = do + nups <- runDB $ do + qId <- getKeyBy404 $ UniqueQualificationAvsLicence $ Just alic + selectedUsers <- view _userAvsUser <<$>> selectList [UserAvsPersonId <-. Set.toList apids] [] forM_ selectedUsers $ upsertQualificationUser qId nowaday $ pred nowaday - addMessageI Success $ MsgRevokeFraDriveLicences alic oks + return $ length selectedUsers + addMessageI Success $ MsgRevokeFraDriveLicences alic nups redirect ProblemAvsSynchR -- must be outside runDB procRes _alic (LicenceTableGrantFDriveData{..}, apids ) = do diff --git a/src/Handler/Course/Users.hs b/src/Handler/Course/Users.hs index 63e32b8b9..f1dc4bf69 100644 --- a/src/Handler/Course/Users.hs +++ b/src/Handler/Course/Users.hs @@ -185,6 +185,7 @@ data UserTableCsv = UserTableCsv , csvUserFirstName :: UserFirstName , csvUserName :: UserDisplayName , csvUserSex :: Maybe Sex + , csvUserBirthday :: Maybe Day , csvUserMatriculation :: Maybe UserMatriculation , csvUserEPPN :: Maybe UserEduPersonPrincipalName , csvUserEmail :: UserEmail @@ -204,6 +205,7 @@ instance Csv.ToNamedRecord UserTableCsv where , "first-name" Csv..= csvUserFirstName , "name" Csv..= csvUserName , "sex" Csv..= csvUserSex + , "birthday" Csv..= csvUserBirthday , "matriculation" Csv..= csvUserMatriculation , "eduPersonPrincipalName" Csv..= csvUserEPPN , "email" Csv..= csvUserEmail @@ -228,6 +230,7 @@ instance CsvColumnsExplained UserTableCsv where , single "first-name" MsgCsvColumnUserFirstName , single "name" MsgCsvColumnUserName , single "sex" MsgCsvColumnUserSex + , single "birthday" MsgCsvColumnUserBirthday , single "matriculation" MsgCsvColumnUserMatriculation , single "email" MsgCsvColumnUserEmail , single "submission-group" MsgCsvColumnUserSubmissionGroup @@ -538,6 +541,7 @@ makeCourseUserTable cid acts restrict colChoices psValidator csvColumns = do <*> view (hasUser . _userFirstName) <*> view (hasUser . _userDisplayName) <*> view (hasUser . _userSex) + <*> view (hasUser . _userBirthday) <*> view (hasUser . _userMatrikelnummer) <*> view (hasUser . _userLdapPrimaryKey) <*> view (hasUser . _userEmail) diff --git a/src/Handler/LMS/Fake.hs b/src/Handler/LMS/Fake.hs index 691450543..b884e4fbf 100644 --- a/src/Handler/LMS/Fake.hs +++ b/src/Handler/LMS/Fake.hs @@ -105,6 +105,7 @@ fakeQualificationUsers (Entity qid Qualification{qualificationRefreshWithin}) (u userNotificationSettings = def userCsvOptions = def userSex = Nothing + userBirthday = Nothing userShowSex = userDefaultShowSex userTelephone = Nothing userMobile = Nothing diff --git a/src/Handler/Users/Add.hs b/src/Handler/Users/Add.hs index 0c45743a7..366cd43c2 100644 --- a/src/Handler/Users/Add.hs +++ b/src/Handler/Users/Add.hs @@ -23,6 +23,7 @@ data AdminUserForm = AdminUserForm , aufDisplayEmail :: UserEmail , aufMatriculation :: Maybe UserMatriculation , aufSex :: Maybe Sex + , aufBirthday :: Maybe Day , aufMobile :: Maybe Text , aufTelephone :: Maybe Text , aufFPersonalNumber :: Maybe Text @@ -64,6 +65,7 @@ adminUserForm template = renderAForm FormStandard <*> areq (emailField & cfCI) (fslI MsgAdminUserDisplayEmail) (aufDisplayEmail <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserMatriculation) (aufMatriculation <$> template) <*> aopt (selectField optionsFinite) (fslI MsgAdminUserSex) (aufSex <$> template) + <*> aopt dayField (fslI MsgAdminUserBirthday) (aufBirthday <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserMobile) (aufMobile <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserTelephone) (aufTelephone <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserFPersonalNumber) (aufFPersonalNumber <$> template) @@ -114,7 +116,8 @@ addNewUser' notifyUsr AdminUserForm{..} = do , userFirstName = aufFirstName , userSurname = aufSurname , userTitle = aufTitle - , userSex = aufSex + , userSex = aufSex + , userBirthday = aufBirthday , userMobile = aufMobile , userTelephone = aufTelephone , userCompanyPersonalNumber = aufFPersonalNumber diff --git a/src/Handler/Utils/Avs.hs b/src/Handler/Utils/Avs.hs index f87efe660..555cfd12c 100644 --- a/src/Handler/Utils/Avs.hs +++ b/src/Handler/Utils/Avs.hs @@ -370,6 +370,7 @@ upsertAvsUserById api = do , aufDisplayEmail = "" -- Email is unknown in this version of the avs query, to be updated later (FUTURE TODO) , aufMatriculation = Nothing , aufSex = Nothing + , aufBirthday = Nothing , aufMobile = Nothing , aufTelephone = Nothing , aufFPersonalNumber = avsInternalPersonalNo <$> canonical avsPersonInternalPersonalNo diff --git a/templates/profileData.hamlet b/templates/profileData.hamlet index 82500a248..39d17144a 100644 --- a/templates/profileData.hamlet +++ b/templates/profileData.hamlet @@ -29,6 +29,16 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later _{MsgTableMatrikelNr}