chore(users): add birthday field

This commit is contained in:
Steffen Jost 2023-01-18 18:51:53 +01:00
parent 53499fd637
commit 65ea64780f
15 changed files with 45 additions and 8 deletions

View File

@ -134,6 +134,7 @@ CourseUserSheets: Übungsblätter
CsvColumnUserName: Voller Name des/der Teilnehmers/Teilnehmerin CsvColumnUserName: Voller Name des/der Teilnehmers/Teilnehmerin
CsvColumnUserMatriculation: Matrikelnummer des/der Teilnehmers/Teilnehmerin CsvColumnUserMatriculation: Matrikelnummer des/der Teilnehmers/Teilnehmerin
CsvColumnUserSex: Geschlecht CsvColumnUserSex: Geschlecht
CsvColumnUserBirthday: Geburtstag
CsvColumnUserEmail: E-Mail-Adresse des/der Teilnehmers/Teilnehmerin CsvColumnUserEmail: E-Mail-Adresse des/der Teilnehmers/Teilnehmerin
CsvColumnUserCourseStudyFeatures: Alle relevanten Studiendaten des/der Teilnehmers/Teilnehmerin als Semikolon (;) separierte Liste CsvColumnUserCourseStudyFeatures: Alle relevanten Studiendaten des/der Teilnehmers/Teilnehmerin als Semikolon (;) separierte Liste
CsvColumnUserRegistration: Zeitpunkt der Anmeldung zum Kurs (ISO 8601) CsvColumnUserRegistration: Zeitpunkt der Anmeldung zum Kurs (ISO 8601)

View File

@ -134,6 +134,7 @@ CourseUserSheets: Exercise sheets
CsvColumnUserName: Participant's full name CsvColumnUserName: Participant's full name
CsvColumnUserMatriculation: Participant's matriculation CsvColumnUserMatriculation: Participant's matriculation
CsvColumnUserSex: Participant's sex CsvColumnUserSex: Participant's sex
CsvColumnUserBirthday: Birthday
CsvColumnUserEmail: Participant's email address CsvColumnUserEmail: Participant's email address
CsvColumnUserCourseStudyFeatures: All relevant features of study for the participant, separated by semicolon (;) CsvColumnUserCourseStudyFeatures: All relevant features of study for the participant, separated by semicolon (;)
CsvColumnUserRegistration: Time of participant's enrollment (ISO 8601) CsvColumnUserRegistration: Time of participant's enrollment (ISO 8601)

View File

@ -13,6 +13,7 @@ AdminUserAuth: Authentifizierung
AdminUserAuthTooltip: Abhängig von der Auswahl werden neue Benutzer über ihr neues FRADrive Konto benachrichtigt. AdminUserAuthTooltip: Abhängig von der Auswahl werden neue Benutzer über ihr neues FRADrive Konto benachrichtigt.
AdminUserMatriculation: Matrikelnummer AdminUserMatriculation: Matrikelnummer
AdminUserSex: Geschlecht AdminUserSex: Geschlecht
AdminUserBirthday: Geburtsdatum
AdminUserTelephone: Telefonnummer AdminUserTelephone: Telefonnummer
AdminUserMobile: Mobiltelefonnummer AdminUserMobile: Mobiltelefonnummer
AdminUserFPersonalNumber: Personalnummer (nur Fraport AG) AdminUserFPersonalNumber: Personalnummer (nur Fraport AG)

View File

@ -13,6 +13,7 @@ AdminUserAuth: Authentication
AdminUserAuthTooltip: New users may be notified about their FRADrive account depending on this choice. AdminUserAuthTooltip: New users may be notified about their FRADrive account depending on this choice.
AdminUserMatriculation: Matriculation AdminUserMatriculation: Matriculation
AdminUserSex: Sex AdminUserSex: Sex
AdminUserBirthday: Date of Birth
AdminUserTelephone: Phone AdminUserTelephone: Phone
AdminUserMobile: Mobile AdminUserMobile: Mobile
AdminUserFPersonalNumber: Personnel number (Fraport AG only) AdminUserFPersonalNumber: Personnel number (Fraport AG only)

View File

@ -18,6 +18,7 @@ TableSubmissionGroup: Feste Abgabegruppe
TableNoSubmissionGroup: Keine feste Abgabegruppe TableNoSubmissionGroup: Keine feste Abgabegruppe
TableMatrikelNr: Matrikelnummer TableMatrikelNr: Matrikelnummer
TableSex: Geschlecht TableSex: Geschlecht
TableBirthday: Geburtsdatum
TableSchool: Institut TableSchool: Institut
TableCourse: Kurs TableCourse: Kurs
TableCourseMembers: Teilnehmer:innen TableCourseMembers: Teilnehmer:innen

View File

@ -18,6 +18,7 @@ TableSubmissionGroup: Registered submission group
TableNoSubmissionGroup: No registered submission group TableNoSubmissionGroup: No registered submission group
TableMatrikelNr: Matriculation TableMatrikelNr: Matriculation
TableSex: Sex TableSex: Sex
TableBirthday: Birthday
TableSchool: Department TableSchool: Department
TableCourse: Course TableCourse: Course
TableCourseMembers: Participants TableCourseMembers: Participants

View File

@ -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 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 warningDays NominalDiffTime default=1209600 -- timedistance to pending deadlines for homepage infos
csvOptions CsvOptions "default='{}'::jsonb" csvOptions CsvOptions "default='{}'::jsonb"
sex Sex Maybe sex Sex Maybe -- currently ignored
birthday Day Maybe -- for better identification
showSex Bool default=false showSex Bool default=false
telephone Text Maybe telephone Text Maybe
mobile Text Maybe mobile Text Maybe

View File

@ -278,6 +278,7 @@ decodeUser now UserDefaultConf{..} upsertMode ldapData = do
, userWarningDays = userDefaultWarningDays , userWarningDays = userDefaultWarningDays
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userSex = Nothing , userSex = Nothing
, userBirthday = Nothing
, userExamOfficeGetSynced = userDefaultExamOfficeGetSynced , userExamOfficeGetSynced = userDefaultExamOfficeGetSynced
, userExamOfficeGetLabels = userDefaultExamOfficeGetLabels , userExamOfficeGetLabels = userDefaultExamOfficeGetLabels
, userNotificationSettings = def , userNotificationSettings = def

View File

@ -19,7 +19,7 @@ import qualified Data.Text as Text
import qualified Data.CaseInsensitive as CI import qualified Data.CaseInsensitive as CI
import qualified Data.Set as Set import qualified Data.Set as Set
import qualified Data.Map as Map import qualified Data.Map as Map
import Database.Persist.Sql (updateWhereCount) -- import Database.Persist.Sql (updateWhereCount)
import Handler.Utils import Handler.Utils
import Handler.Utils.Avs import Handler.Utils.Avs
@ -389,12 +389,14 @@ getProblemAvsSynchR = do
mkind = if oks < no_req then Warning else Success mkind = if oks < no_req then Warning else Success
addMessageI mkind $ MsgAvsSetLicences aLic oks no_req addMessageI mkind $ MsgAvsSetLicences aLic oks no_req
redirect ProblemAvsSynchR -- reload to update all tables redirect ProblemAvsSynchR -- reload to update all tables
procRes alic (LicenceTableRevokeFDriveData, selectedUsers) = do procRes alic (LicenceTableRevokeFDriveData, apids) = do
runDB $ do nups <- runDB $ do
qId <- getKeyBy404 $ UniqueQualificationAvsLicence $ Just alic qId <- getKeyBy404 $ UniqueQualificationAvsLicence $ Just alic
selectedUsers <- view _userAvsUser <<$>> selectList [UserAvsPersonId <-. Set.toList apids] []
forM_ selectedUsers $ upsertQualificationUser qId nowaday $ pred nowaday 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 redirect ProblemAvsSynchR -- must be outside runDB
procRes _alic (LicenceTableGrantFDriveData{..}, apids ) = do procRes _alic (LicenceTableGrantFDriveData{..}, apids ) = do

View File

@ -185,6 +185,7 @@ data UserTableCsv = UserTableCsv
, csvUserFirstName :: UserFirstName , csvUserFirstName :: UserFirstName
, csvUserName :: UserDisplayName , csvUserName :: UserDisplayName
, csvUserSex :: Maybe Sex , csvUserSex :: Maybe Sex
, csvUserBirthday :: Maybe Day
, csvUserMatriculation :: Maybe UserMatriculation , csvUserMatriculation :: Maybe UserMatriculation
, csvUserEPPN :: Maybe UserEduPersonPrincipalName , csvUserEPPN :: Maybe UserEduPersonPrincipalName
, csvUserEmail :: UserEmail , csvUserEmail :: UserEmail
@ -204,6 +205,7 @@ instance Csv.ToNamedRecord UserTableCsv where
, "first-name" Csv..= csvUserFirstName , "first-name" Csv..= csvUserFirstName
, "name" Csv..= csvUserName , "name" Csv..= csvUserName
, "sex" Csv..= csvUserSex , "sex" Csv..= csvUserSex
, "birthday" Csv..= csvUserBirthday
, "matriculation" Csv..= csvUserMatriculation , "matriculation" Csv..= csvUserMatriculation
, "eduPersonPrincipalName" Csv..= csvUserEPPN , "eduPersonPrincipalName" Csv..= csvUserEPPN
, "email" Csv..= csvUserEmail , "email" Csv..= csvUserEmail
@ -228,6 +230,7 @@ instance CsvColumnsExplained UserTableCsv where
, single "first-name" MsgCsvColumnUserFirstName , single "first-name" MsgCsvColumnUserFirstName
, single "name" MsgCsvColumnUserName , single "name" MsgCsvColumnUserName
, single "sex" MsgCsvColumnUserSex , single "sex" MsgCsvColumnUserSex
, single "birthday" MsgCsvColumnUserBirthday
, single "matriculation" MsgCsvColumnUserMatriculation , single "matriculation" MsgCsvColumnUserMatriculation
, single "email" MsgCsvColumnUserEmail , single "email" MsgCsvColumnUserEmail
, single "submission-group" MsgCsvColumnUserSubmissionGroup , single "submission-group" MsgCsvColumnUserSubmissionGroup
@ -538,6 +541,7 @@ makeCourseUserTable cid acts restrict colChoices psValidator csvColumns = do
<*> view (hasUser . _userFirstName) <*> view (hasUser . _userFirstName)
<*> view (hasUser . _userDisplayName) <*> view (hasUser . _userDisplayName)
<*> view (hasUser . _userSex) <*> view (hasUser . _userSex)
<*> view (hasUser . _userBirthday)
<*> view (hasUser . _userMatrikelnummer) <*> view (hasUser . _userMatrikelnummer)
<*> view (hasUser . _userLdapPrimaryKey) <*> view (hasUser . _userLdapPrimaryKey)
<*> view (hasUser . _userEmail) <*> view (hasUser . _userEmail)

View File

@ -105,6 +105,7 @@ fakeQualificationUsers (Entity qid Qualification{qualificationRefreshWithin}) (u
userNotificationSettings = def userNotificationSettings = def
userCsvOptions = def userCsvOptions = def
userSex = Nothing userSex = Nothing
userBirthday = Nothing
userShowSex = userDefaultShowSex userShowSex = userDefaultShowSex
userTelephone = Nothing userTelephone = Nothing
userMobile = Nothing userMobile = Nothing

View File

@ -23,6 +23,7 @@ data AdminUserForm = AdminUserForm
, aufDisplayEmail :: UserEmail , aufDisplayEmail :: UserEmail
, aufMatriculation :: Maybe UserMatriculation , aufMatriculation :: Maybe UserMatriculation
, aufSex :: Maybe Sex , aufSex :: Maybe Sex
, aufBirthday :: Maybe Day
, aufMobile :: Maybe Text , aufMobile :: Maybe Text
, aufTelephone :: Maybe Text , aufTelephone :: Maybe Text
, aufFPersonalNumber :: Maybe Text , aufFPersonalNumber :: Maybe Text
@ -64,6 +65,7 @@ adminUserForm template = renderAForm FormStandard
<*> areq (emailField & cfCI) (fslI MsgAdminUserDisplayEmail) (aufDisplayEmail <$> template) <*> areq (emailField & cfCI) (fslI MsgAdminUserDisplayEmail) (aufDisplayEmail <$> template)
<*> aopt (textField & cfStrip) (fslI MsgAdminUserMatriculation) (aufMatriculation <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserMatriculation) (aufMatriculation <$> template)
<*> aopt (selectField optionsFinite) (fslI MsgAdminUserSex) (aufSex <$> 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 MsgAdminUserMobile) (aufMobile <$> template)
<*> aopt (textField & cfStrip) (fslI MsgAdminUserTelephone) (aufTelephone <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserTelephone) (aufTelephone <$> template)
<*> aopt (textField & cfStrip) (fslI MsgAdminUserFPersonalNumber) (aufFPersonalNumber <$> template) <*> aopt (textField & cfStrip) (fslI MsgAdminUserFPersonalNumber) (aufFPersonalNumber <$> template)
@ -114,7 +116,8 @@ addNewUser' notifyUsr AdminUserForm{..} = do
, userFirstName = aufFirstName , userFirstName = aufFirstName
, userSurname = aufSurname , userSurname = aufSurname
, userTitle = aufTitle , userTitle = aufTitle
, userSex = aufSex , userSex = aufSex
, userBirthday = aufBirthday
, userMobile = aufMobile , userMobile = aufMobile
, userTelephone = aufTelephone , userTelephone = aufTelephone
, userCompanyPersonalNumber = aufFPersonalNumber , userCompanyPersonalNumber = aufFPersonalNumber

View File

@ -370,6 +370,7 @@ upsertAvsUserById api = do
, aufDisplayEmail = "" -- Email is unknown in this version of the avs query, to be updated later (FUTURE TODO) , aufDisplayEmail = "" -- Email is unknown in this version of the avs query, to be updated later (FUTURE TODO)
, aufMatriculation = Nothing , aufMatriculation = Nothing
, aufSex = Nothing , aufSex = Nothing
, aufBirthday = Nothing
, aufMobile = Nothing , aufMobile = Nothing
, aufTelephone = Nothing , aufTelephone = Nothing
, aufFPersonalNumber = avsInternalPersonalNo <$> canonical avsPersonInternalPersonalNo , aufFPersonalNumber = avsInternalPersonalNo <$> canonical avsPersonInternalPersonalNo

View File

@ -29,6 +29,16 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
_{MsgTableMatrikelNr} _{MsgTableMatrikelNr}
<dd .deflist__dd> <dd .deflist__dd>
#{matnr} #{matnr}
$maybe sex <- userSex
<dt .deflist__dt>
_{MsgTableSex}
<dd .deflist__dd>
_{sex}
$maybe bday <- userBirthday
<dt .deflist__dt>
_{MsgTableBirthday}
<dd .deflist__dd>
^{formatTimeW SelFormatDate bday}
<dt .deflist__dt> <dt .deflist__dt>
_{MsgPrefersPostal} _{MsgPrefersPostal}
<dd .deflist__dd> <dd .deflist__dd>

View File

@ -97,6 +97,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def { csvFormat = csvPreset # CsvPresetRFC } , userCsvOptions = def { csvFormat = csvPreset # CsvPresetRFC }
, userSex = Just SexMale , userSex = Just SexMale
, userBirthday = Nothing
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing
@ -136,6 +137,7 @@ fillDb = do
, userCsvOptions = def { csvFormat = csvPreset # CsvPresetExcel } , userCsvOptions = def { csvFormat = csvPreset # CsvPresetExcel }
, userSex = Just SexMale , userSex = Just SexMale
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userBirthday = Nothing
, userMobile = Nothing , userMobile = Nothing
, userTelephone = Nothing , userTelephone = Nothing
, userCompanyPersonalNumber = Nothing , userCompanyPersonalNumber = Nothing
@ -178,6 +180,7 @@ fillDb = do
, userLastLdapSynchronisation = Nothing , userLastLdapSynchronisation = Nothing
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userSex = Just SexMale , userSex = Just SexMale
, userBirthday = Just $ n_day $ 35 * (-365)
, userCsvOptions = def , userCsvOptions = def
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Just "+49 69 690-71706" , userTelephone = Just "+49 69 690-71706"
@ -217,6 +220,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def , userCsvOptions = def
, userSex = Just SexMale , userSex = Just SexMale
, userBirthday = Just $ n_day $ 27 * (-365)
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing
@ -255,6 +259,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def , userCsvOptions = def
, userSex = Just SexNotApplicable , userSex = Just SexNotApplicable
, userBirthday = Just $ n_day 3
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing
@ -293,6 +298,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def , userCsvOptions = def
, userSex = Just SexFemale , userSex = Just SexFemale
, userBirthday = Nothing
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing
@ -331,6 +337,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def , userCsvOptions = def
, userSex = Just SexMale , userSex = Just SexMale
, userBirthday = Nothing
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing
@ -399,6 +406,7 @@ fillDb = do
, userLdapPrimaryKey = Nothing , userLdapPrimaryKey = Nothing
, userCsvOptions = def , userCsvOptions = def
, userSex = Nothing , userSex = Nothing
, userBirthday = Nothing
, userShowSex = userDefaultShowSex , userShowSex = userDefaultShowSex
, userTelephone = Nothing , userTelephone = Nothing
, userMobile = Nothing , userMobile = Nothing