diff --git a/models/users b/models/users index 906219944..7903f5760 100644 --- a/models/users +++ b/models/users @@ -35,7 +35,7 @@ StudyFeatures -- Abschluss, Studiengang, Haupt/Nebenfachh und Fachsemester updated UTCTime default='NOW()' -- zuletzt als gültig gesehen valid Bool default=true UniqueStudyFeatures user degree field type semester - -- UniqueUserSubject user degree field -- There exists a counterexample + -- UniqueUserSubject ubuser degree field -- There exists a counterexample StudyDegree -- Studienabschluss key Int shorthand Text Maybe diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index 70e38ae21..deb566519 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -659,12 +659,24 @@ forceUserTableType = id userTableQuery :: UserTableWhere -> UserTableExpr -> E.SqlQuery ( E.SqlExpr (Entity User) , E.SqlExpr (E.Value UTCTime) - , E.SqlExpr (E.Value (Maybe CourseUserNoteId))) + , E.SqlExpr (E.Value (Maybe CourseUserNoteId)) + , E.SqlExpr (E.ValueList (Entity StudyFeatures), E.SqlExpr (Entity StudyDegree), E.SqlExpr (Entity StudyTerms)) + ) userTableQuery whereClause t@((user `E.InnerJoin` participant) `E.LeftOuterJoin` note) = do E.on $ E.just (participant E.^. CourseParticipantUser) E.==. note E.?. CourseUserNoteUser E.on $ participant E.^. CourseParticipantUser E.==. user E.^. UserId E.where_ $ whereClause t - return (user, participant E.^. CourseParticipantRegistration, note E.?. CourseUserNoteId) + -- let feature = E.case_ [E.when_ (E.isNothing $ participant E.^. CourseParticipantField) E.then_ E.nothing] + -- (E.else_ features ) + let dfeat :: _hole -- E.SqlQuery (E.ValueList (E.SqlExpr (Entity StudyFeatures), E.SqlExpr (Entity StudyDegree), E.SqlExpr (Entity StudyTerms))) + dfeat = E.subList_select $ E.from $ \(feature `E.InnerJoin` degree `E.InnerJoin` terms) -> do + E.on $ feature E.^. StudyFeaturesField E.==. terms E.^. StudyTermsId + E.on $ feature E.^. StudyFeaturesDegree E.==. degree E.^. StudyDegreeId + E.where_ $ (E.just (feature E.^. StudyFeaturesId)) E.==. (participant E.^. CourseParticipantField) + E.limit 1 + return (feature,degree,terms) + -- tr <- dfeat + return (user, participant E.^. CourseParticipantRegistration, note E.?. CourseUserNoteId, dfeat) instance HasEntity UserTableData User where hasEntity = _dbrOutput . _1 @@ -712,7 +724,7 @@ makeCourseUserTable whereClause colChoices psValidator = dbtStyle = def dbtSQLQuery = userTableQuery whereClause dbtRowKey ((user `E.InnerJoin` _participant) `E.LeftOuterJoin` _note) = user E.^. UserId - dbtProj = traverse $ \(user, E.Value registrationTime , E.Value userNoteId) -> return (user, registrationTime, userNoteId) + dbtProj = traverse $ \(user, E.Value registrationTime , E.Value userNoteId,_) -> return (user, registrationTime, userNoteId) -- TODO continue here dbtColonnade = colChoices dbtSorting = Map.fromList [] -- TODO dbtFilter = Map.fromList [] -- TODO diff --git a/src/Model.hs b/src/Model.hs index f070b082b..92df5772e 100644 --- a/src/Model.hs +++ b/src/Model.hs @@ -53,7 +53,6 @@ shortStudyDegree :: StudyDegree -> Markup shortStudyDegree StudyDegree{..} = toMarkup $ fromMaybe (tshow studyDegreeKey) studyDegreeShorthand - instance ToMarkup StudyTerms where toMarkup StudyTerms{..} = toMarkup $ fromMaybe (tshow studyTermsKey) (studyTermsName <|> studyTermsShorthand)