diff --git a/test/Handler/Utils/ExamSpec.hs b/test/Handler/Utils/ExamSpec.hs index 0d83c3b17..01ca48b63 100644 --- a/test/Handler/Utils/ExamSpec.hs +++ b/test/Handler/Utils/ExamSpec.hs @@ -10,8 +10,7 @@ import Test.Hspec.QuickCheck (prop) import qualified Data.Map as Map import qualified Data.Text as Text - -import Control.Applicative (ZipList(..)) +import qualified Data.CaseInsensitive as CI import Handler.Utils.Exam @@ -41,7 +40,7 @@ instance Arbitrary ExamOccurrence where -- examAutoOccurrence (hash -> seed) rule ExamAutoOccurrenceConfig{..} occurrences users spec :: Spec spec = do - prop "property test" $ do -- TODO + prop "examAutoOccurrence Surname, no Nudges, no preselection" $ do -- TODO rawUsers <- listOf1 $ Entity <$> arbitrary <*> arbitrary -- user surnames anpassen, sodass interessante instanz adjustedUsers <- forM rawUsers $ \Entity {entityKey, entityVal} -> do @@ -60,14 +59,20 @@ spec = do | otherwise = pure acc occurrences <- Map.fromList <$> createOccurrences [] --let occurrences = Map.empty :: Map ExamOccurrenceId Natural - let (maybeMapping, userMap) = examAutoOccurrence seed rule config occurrences users + let result@(_maybeMapping, userMap) = examAutoOccurrence seed rule config occurrences users pure $ ioProperty $ do - print $ Map.map (userSurname . fst) users - shouldSatisfy users $ not . null - shouldSatisfy occurrences $ not . null - -- TODO test with some users fixed to certain rooms + -- every user got assigned a room + shouldBe (length userMap) (length users) + shouldSatisfy userMap $ all isJust + -- no room is overfull + shouldSatisfy userMap $ fitsInRooms occurrences + -- all users match the shown ranges + shouldSatisfy result $ showsCorrectRanges users + -- TODO test with some users fixed/preselected to certain rooms + -- TODO test with ExamRoomManual, ExamRoomFifo, (ExamRoomSurname), ExamRoomMatriculation, ExamRoomRandom where -- name list copied from test/Database/Fill.hs + surnames :: [Text] surnames = [ "Smith", "Johnson", "Williams", "Brown" , "Jones", "Miller", "Davis", "Garcia" , "Rodriguez", "Wilson", "Martinez", "Anderson" @@ -77,89 +82,50 @@ spec = do , "Clark", "Lewis", "Robinson", "Walker" , "Perez", "Hall", "Young", "Allen" ] + seed :: () seed = () - --seed = FixedHash (-7234408896601100696) + rule :: ExamOccurrenceRule rule = ExamRoomSurname config :: ExamAutoOccurrenceConfig - config = def --{eaocNudge = Map.singleton occ20Id (-11)} - --ExamAutoOccurrenceConfig {eaocMinimizeRooms = False, eaocFinenessCost = 1 % 5, eaocNudge = fromList [(SqlBackendKey {unSqlBackendKey = 4},-11)], eaocNudgeSize = 1 % 20} - {- - occurrences :: Map ExamOccurrenceId Natural - occurrences = Map.empty --TODO - --fromList [(SqlBackendKey {unSqlBackendKey = 1},5),(SqlBackendKey {unSqlBackendKey = 2},15),(SqlBackendKey {unSqlBackendKey = 3},10),(SqlBackendKey {unSqlBackendKey = 4},20),(SqlBackendKey {unSqlBackendKey = 5},10)] - users :: Map UserId User - users = Map.empty --TODO - -} + config = def + -- TODO adjust with different nudges, depended on occurrences list/map + -- def {eaocNudge = Map.singleton occ20Id (-11)} + --ExamAutoOccurrenceConfig {eaocMinimizeRooms = False, eaocFinenessCost = 1 % 5, eaocNudge = fromList [(SqlBackendKey {unSqlBackendKey = 4},-11)], eaocNudgeSize = 1 % 20} + occurrenceMap :: Map UserId (Maybe ExamOccurrenceId) -> Map ExamOccurrenceId [UserId] + occurrenceMap userMap = foldl' (\acc (userId, maybeOccurrenceId) -> appendJust maybeOccurrenceId userId acc) + Map.empty $ Map.toAscList userMap + where + appendJust :: Maybe ExamOccurrenceId -> UserId -> Map ExamOccurrenceId [UserId] -> Map ExamOccurrenceId [UserId] + appendJust Nothing _userId = id + appendJust (Just occurrenceId) userId = Map.insertWith (++) occurrenceId [userId] fitsInRooms :: Map ExamOccurrenceId Natural - -> (Maybe (ExamOccurrenceMapping ExamOccurrenceId), Map UserId (Maybe ExamOccurrenceId)) + -> Map UserId (Maybe ExamOccurrenceId) -> Bool - fitsInRooms _occurrences (Nothing, _userMap) = False - fitsInRooms occurrences (Just (examOccurrenceMappingMapping -> m), _userMap) - = all (\(roomId, mappingSet) -> maybe False ((< length mappingSet) . fromIntegral) $ lookup roomId occurrences) $ Map.toAscList m - - -{- -newtype FixedHash = FixedHash Int - -instance Hashable FixedHash where - hashWithSalt _salt (FixedHash h) = h -seed = FixedHash -7234408896601100696 -rule = ExamRoomSurname -config = ExamAutoOccurrenceConfig {eaocMinimizeRooms = False, eaocFinenessCost = 1 % 5, eaocNudge = fromList [(SqlBackendKey {unSqlBackendKey = 4},-11)], eaocNudgeSize = 1 % 20} -occurrences = fromList [(SqlBackendKey {unSqlBackendKey = 1},5),(SqlBackendKey {unSqlBackendKey = 2},15),(SqlBackendKey {unSqlBackendKey = 3},10),(SqlBackendKey {unSqlBackendKey = 4},20),(SqlBackendKey {unSqlBackendKey = 5},10)] --} - -{- -trace result of arguments with erroneous output (users split into multiple lines for better: -let traceMsg = "\n\n\n-------------\nseed: " ++ show seed - ++ "\nrule: " ++ show rule - ++ "\nconfig: " ++ show config - ++ "\noccurrences: " ++ show occurrences - ++ "\nusers: " ++ show users - ++ "\n-------------\n" - in Debug.trace traceMsg $ ------------------------------------------------------------------------------------- -seed: -7234408896601100696 -rule: ExamRoomSurname -config: ExamAutoOccurrenceConfig {eaocMinimizeRooms = False, eaocFinenessCost = 1 % 5, eaocNudge = fromList [(SqlBackendKey {unSqlBackendKey = 4},-11)], eaocNudgeSize = 1 % 20} -occurrences: fromList [(SqlBackendKey {unSqlBackendKey = 1},5),(SqlBackendKey {unSqlBackendKey = 2},15),(SqlBackendKey {unSqlBackendKey = 3},10),(SqlBackendKey {unSqlBackendKey = 4},20),(SqlBackendKey {unSqlBackendKey = 5},10)] -users: fromList [(SqlBackendKey {unSqlBackendKey = 2},(User {userSurname = "Hamann", userDisplayName = "Feli Hamann", userDisplayEmail = "felix.hamann@campus.lmu.de", userEmail = "felix.hamann@campus.lmu.de", userIdent = "felix.hamann@campus.lmu.de", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Nothing, userFirstName = "Felix", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 2, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ';', csvUseCrLf = True, csvQuoting = QuoteAll, csvEncoding = CP1252}, csvTimestamp = False}, userSex = Just SexMale, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 4},(User {userSurname = "Musterstudent", userDisplayName = "Max Musterstudent", userDisplayEmail = "max@max.com", userEmail = "max@campus.lmu.de", userIdent = "max@campus.lmu.de", userAuthentication = AuthLDAP, userLastAuthentication = Just 2021-01-04 13:25:03.752361 UTC, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "1299", userFirstName = "Max", userTitle = Nothing, userMaxFavourites = 7, userMaxFavouriteTerms = 2, userTheme = ThemeAberdeenReds, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Just SexMale, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 5},(User {userSurname = "v\246n T\235rr\246r\191", userDisplayName = "Tina Tester", userDisplayEmail = "tina@tester.example", userEmail = "tester@campus.lmu.de", userIdent = "tester@campus.lmu.de", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "999", userFirstName = "Sabrina", userTitle = Just "Magister", userMaxFavourites = 5, userMaxFavouriteTerms = 2, userTheme = ThemeAberdeenReds, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Just SexNotApplicable, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 277},(User {userSurname = "Thomas", userDisplayName = "William Thomas", userDisplayEmail = "William.Thomas@example.invalid", userEmail = "William.Thomas@example.invalid", userIdent = "William.Thomas@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "41446818", userFirstName = "William", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 282},(User {userSurname = "Thompson", userDisplayName = "William Thompson", userDisplayEmail = "William.Thompson@example.invalid", userEmail = "William.Thompson@example.invalid", userIdent = "William.Thompson@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "61745950", userFirstName = "William", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 523},(User {userSurname = "Brown", userDisplayName = "Joseph Brown", userDisplayEmail = "Joseph.Brown@example.invalid", userEmail = "Joseph.Brown@example.invalid", userIdent = "Joseph.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "56956566", userFirstName = "Joseph", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 526},(User {userSurname = "Davis", userDisplayName = "Joseph Davis", userDisplayEmail = "Joseph.Davis@example.invalid", userEmail = "Joseph.Davis@example.invalid", userIdent = "Joseph.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "94367997", userFirstName = "Joseph", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 531},(User {userSurname = "Anderson", userDisplayName = "Joseph Anderson", userDisplayEmail = "Joseph.Anderson@example.invalid", userEmail = "Joseph.Anderson@example.invalid", userIdent = "Joseph.Anderson@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "31448209", userFirstName = "Joseph", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 551},(User {userSurname = "Allen", userDisplayName = "Joseph Allen", userDisplayEmail = "Joseph.Allen@example.invalid", userEmail = "Joseph.Allen@example.invalid", userIdent = "Joseph.Allen@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "63947610", userFirstName = "Joseph", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 651},(User {userSurname = "Brown", userDisplayName = "Charles Brown", userDisplayEmail = "Charles.Brown@example.invalid", userEmail = "Charles.Brown@example.invalid", userIdent = "Charles.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "34896034", userFirstName = "Charles", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 670},(User {userSurname = "Gonzalez", userDisplayName = "Charles Gonzalez", userDisplayEmail = "Charles.Gonzalez@example.invalid", userEmail = "Charles.Gonzalez@example.invalid", userIdent = "Charles.Gonzalez@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "17481093", userFirstName = "Charles", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 843},(User {userSurname = "Brown", userDisplayName = "Patricia Brown", userDisplayEmail = "Patricia.Brown@example.invalid", userEmail = "Patricia.Brown@example.invalid", userIdent = "Patricia.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "41986570", userFirstName = "Patricia", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 846},(User {userSurname = "Davis", userDisplayName = "Patricia Davis", userDisplayEmail = "Patricia.Davis@example.invalid", userEmail = "Patricia.Davis@example.invalid", userIdent = "Patricia.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "01036878", userFirstName = "Patricia", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 871},(User {userSurname = "Allen", userDisplayName = "Patricia Allen", userDisplayEmail = "Patricia.Allen@example.invalid", userEmail = "Patricia.Allen@example.invalid", userIdent = "Patricia.Allen@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "33463057", userFirstName = "Patricia", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 910},(User {userSurname = "Davis", userDisplayName = "Jennifer Davis", userDisplayEmail = "Jennifer.Davis@example.invalid", userEmail = "Jennifer.Davis@example.invalid", userIdent = "Jennifer.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "55795001", userFirstName = "Jennifer", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1048},(User {userSurname = "Martin", userDisplayName = "Elizabeth Martin", userDisplayEmail = "Elizabeth.Martin@example.invalid", userEmail = "Elizabeth.Martin@example.invalid", userIdent = "Elizabeth.Martin@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "20439978", userFirstName = "Elizabeth", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1056},(User {userSurname = "Clark", userDisplayName = "Elizabeth Clark", userDisplayEmail = "Elizabeth.Clark@example.invalid", userEmail = "Elizabeth.Clark@example.invalid", userIdent = "Elizabeth.Clark@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "43931689", userFirstName = "Elizabeth", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1102},(User {userSurname = "Davis", userDisplayName = "Barbara Davis", userDisplayEmail = "Barbara.Davis@example.invalid", userEmail = "Barbara.Davis@example.invalid", userIdent = "Barbara.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "61041809", userFirstName = "Barbara", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1103},(User {userSurname = "Garcia", userDisplayName = "Barbara Garcia", userDisplayEmail = "Barbara.Garcia@example.invalid", userEmail = "Barbara.Garcia@example.invalid", userIdent = "Barbara.Garcia@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "83831882", userFirstName = "Barbara", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1109},(User {userSurname = "Thomas", userDisplayName = "Barbara Thomas", userDisplayEmail = "Barbara.Thomas@example.invalid", userEmail = "Barbara.Thomas@example.invalid", userIdent = "Barbara.Thomas@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "03345760", userFirstName = "Barbara", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1120},(User {userSurname = "Clark", userDisplayName = "Barbara Clark", userDisplayEmail = "Barbara.Clark@example.invalid", userEmail = "Barbara.Clark@example.invalid", userIdent = "Barbara.Clark@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "58680705", userFirstName = "Barbara", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1124},(User {userSurname = "Perez", userDisplayName = "Barbara Perez", userDisplayEmail = "Barbara.Perez@example.invalid", userEmail = "Barbara.Perez@example.invalid", userIdent = "Barbara.Perez@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "41808680", userFirstName = "Barbara", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1220},(User {userSurname = "Perez", userDisplayName = "Anthony Jamesson Perez", userDisplayEmail = "Anthony.Jamesson.Perez@example.invalid", userEmail = "Anthony.Jamesson.Perez@example.invalid", userIdent = "Anthony.Jamesson.Perez@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "82814982", userFirstName = "Anthony Jamesson", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1355},(User {userSurname = "Brown", userDisplayName = "Paul Brown", userDisplayEmail = "Paul.Brown@example.invalid", userEmail = "Paul.Brown@example.invalid", userIdent = "Paul.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "74285536", userFirstName = "Paul", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1359},(User {userSurname = "Garcia", userDisplayName = "Paul Garcia", userDisplayEmail = "Paul.Garcia@example.invalid", userEmail = "Paul.Garcia@example.invalid", userIdent = "Paul.Garcia@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "86082169", userFirstName = "Paul", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1362},(User {userSurname = "Martinez", userDisplayName = "Paul Martinez", userDisplayEmail = "Paul.Martinez@example.invalid", userEmail = "Paul.Martinez@example.invalid", userIdent = "Paul.Martinez@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "85611156", userFirstName = "Paul", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1363},(User {userSurname = "Anderson", userDisplayName = "Paul Anderson", userDisplayEmail = "Paul.Anderson@example.invalid", userEmail = "Paul.Anderson@example.invalid", userIdent = "Paul.Anderson@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "55314499", userFirstName = "Paul", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1483},(User {userSurname = "Brown", userDisplayName = "Andrew Brown", userDisplayEmail = "Andrew.Brown@example.invalid", userEmail = "Andrew.Brown@example.invalid", userIdent = "Andrew.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "75667403", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1486},(User {userSurname = "Davis", userDisplayName = "Andrew Davis", userDisplayEmail = "Andrew.Davis@example.invalid", userEmail = "Andrew.Davis@example.invalid", userIdent = "Andrew.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "88120189", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1487},(User {userSurname = "Garcia", userDisplayName = "Andrew Garcia", userDisplayEmail = "Andrew.Garcia@example.invalid", userEmail = "Andrew.Garcia@example.invalid", userIdent = "Andrew.Garcia@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "20608609", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1491},(User {userSurname = "Anderson", userDisplayName = "Andrew Anderson", userDisplayEmail = "Andrew.Anderson@example.invalid", userEmail = "Andrew.Anderson@example.invalid", userIdent = "Andrew.Anderson@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "69381224", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1497},(User {userSurname = "Jackson", userDisplayName = "Andrew Jackson", userDisplayEmail = "Andrew.Jackson@example.invalid", userEmail = "Andrew.Jackson@example.invalid", userIdent = "Andrew.Jackson@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "08741828", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1504},(User {userSurname = "Clark", userDisplayName = "Andrew Clark", userDisplayEmail = "Andrew.Clark@example.invalid", userEmail = "Andrew.Clark@example.invalid", userIdent = "Andrew.Clark@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "66829818", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Nothing, userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1509},(User {userSurname = "Hall", userDisplayName = "Andrew Hall", userDisplayEmail = "Andrew.Hall@example.invalid", userEmail = "Andrew.Hall@example.invalid", userIdent = "Andrew.Hall@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "06810371", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1510},(User {userSurname = "Young", userDisplayName = "Andrew Young", userDisplayEmail = "Andrew.Young@example.invalid", userEmail = "Andrew.Young@example.invalid", userIdent = "Andrew.Young@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "03707580", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1511},(User {userSurname = "Allen", userDisplayName = "Andrew Allen", userDisplayEmail = "Andrew.Allen@example.invalid", userEmail = "Andrew.Allen@example.invalid", userIdent = "Andrew.Allen@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "77293111", userFirstName = "Andrew", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1515},(User {userSurname = "Brown", userDisplayName = "Andrew Jamesson Brown", userDisplayEmail = "Andrew.Jamesson.Brown@example.invalid", userEmail = "Andrew.Jamesson.Brown@example.invalid", userIdent = "Andrew.Jamesson.Brown@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "48707057", userFirstName = "Andrew Jamesson", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1534},(User {userSurname = "Gonzalez", userDisplayName = "Andrew Jamesson Gonzalez", userDisplayEmail = "Andrew.Jamesson.Gonzalez@example.invalid", userEmail = "Andrew.Jamesson.Gonzalez@example.invalid", userIdent = "Andrew.Jamesson.Gonzalez@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "76523377", userFirstName = "Andrew Jamesson", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing)),(SqlBackendKey {unSqlBackendKey = 1934},(User {userSurname = "Davis", userDisplayName = "Susan Davis", userDisplayEmail = "Susan.Davis@example.invalid", userEmail = "Susan.Davis@example.invalid", userIdent = "Susan.Davis@example.invalid", userAuthentication = AuthLDAP, userLastAuthentication = Nothing, userCreated = 2021-01-04 13:25:03.752361 UTC, userLastLdapSynchronisation = Nothing, userLdapPrimaryKey = Nothing, userTokensIssuedAfter = Nothing, userMatrikelnummer = Just "30728879", userFirstName = "Susan", userTitle = Nothing, userMaxFavourites = 12, userMaxFavouriteTerms = 12, userTheme = ThemeDefault, userDateTimeFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y %R"}, userDateFormat = DateTimeFormat {unDateTimeFormat = "%a %d %b %Y"}, userTimeFormat = DateTimeFormat {unDateTimeFormat = "%R"}, userDownloadFiles = False, userLanguages = Just (Languages ["de-de-formal","de-de","de"]), -userNotificationSettings = [(NTSubmissionRatedGraded,True),(NTSubmissionRated,True),(NTSubmissionEdited,True),(NTSubmissionUserCreated,True),(NTSubmissionUserDeleted,True),(NTSheetActive,True),(NTSheetHint,True),(NTSheetSolution,True),(NTSheetSoonInactive,False),(NTSheetInactive,True),(NTCorrectionsAssigned,True),(NTCorrectionsNotDistributed,True),(NTUserRightsUpdate,True),(NTUserAuthModeUpdate,True),(NTExamRegistrationActive,True),(NTExamRegistrationSoonInactive,False),(NTExamDeregistrationSoonInactive,True),(NTExamResult,True),(NTAllocationStaffRegister,True),(NTAllocationAllocation,True),(NTAllocationRegister,True),(NTAllocationNewCourse,False),(NTAllocationOutdatedRatings,True),(NTAllocationUnratedApplications,True),(NTAllocationResults,True),(NTExamOfficeExamResults,True),(NTExamOfficeExamResultsChanged,True),(NTCourseRegistered,True)], userWarningDays = 1209600s, userCsvOptions = CsvOptions {csvFormat = CsvFormatOptions {csvDelimiter = ',', csvUseCrLf = True, csvQuoting = QuoteMinimal, csvEncoding = UTF8}, csvTimestamp = False}, userSex = Nothing, userShowSex = False},Nothing))] --} + fitsInRooms occurrences userMap + = all roomIsBigEnough $ Map.toAscList $ occurrenceMap userMap + where + roomIsBigEnough :: (ExamOccurrenceId, [UserId]) -> Bool + roomIsBigEnough (roomId, userIds) = case lookup roomId occurrences of + Nothing -> False + (Just capacity) -> length userIds <= fromIntegral capacity + showsCorrectRanges :: Map UserId (User, Maybe ExamOccurrenceId) + -> (Maybe (ExamOccurrenceMapping ExamOccurrenceId), Map UserId (Maybe ExamOccurrenceId)) + -> Bool + showsCorrectRanges _users (Nothing, _userMap) = False + showsCorrectRanges users (Just (examOccurrenceMappingMapping -> m), userMap) + = all userFitsInRange $ Map.toAscList $ occurrenceMap userMap + where + userFitsInRange :: (ExamOccurrenceId, [UserId]) -> Bool + userFitsInRange (roomId, userIds) = flip all userIds $ \userId -> + case (Map.lookup roomId m, Map.lookup userId users) of + (Just ranges, Just (User {userSurname}, _fixedRoom)) + -> any fitsInRange ranges + where + ciSurname :: [CI Char] + ciSurname = map CI.mk $ Text.unpack userSurname + fitsInRange :: ExamOccurrenceMappingDescription -> Bool + fitsInRange ExamOccurrenceMappingRange {eaomrStart, eaomrEnd} + = eaomrStart <= ciSurname && (take (length eaomrEnd) ciSurname <= eaomrEnd) + fitsInRange ExamOccurrenceMappingSpecial {} + = True -- FIXME what is the meaning of special? + _otherwise -> False