|
|
|
|
@ -138,6 +138,8 @@ type DailyTableExpr =
|
|
|
|
|
`E.InnerJoin` E.SqlExpr (Entity TutorialParticipant)
|
|
|
|
|
`E.InnerJoin` E.SqlExpr (Entity User)
|
|
|
|
|
`E.LeftOuterJoin` E.SqlExpr (Maybe (Entity UserAvs))
|
|
|
|
|
`E.LeftOuterJoin` E.SqlExpr (Maybe (Entity UserDay))
|
|
|
|
|
`E.LeftOuterJoin` E.SqlExpr (Maybe (Entity TutorialParticipantDay))
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type DailyTableOutput = E.SqlQuery
|
|
|
|
|
@ -146,6 +148,8 @@ type DailyTableOutput = E.SqlQuery
|
|
|
|
|
, E.SqlExpr (Entity TutorialParticipant)
|
|
|
|
|
, E.SqlExpr (Entity User)
|
|
|
|
|
, E.SqlExpr (Maybe (Entity UserAvs))
|
|
|
|
|
, E.SqlExpr (Maybe (Entity UserDay))
|
|
|
|
|
, E.SqlExpr (Maybe (Entity TutorialParticipantDay))
|
|
|
|
|
, E.SqlExpr (E.Value (Maybe CompanyId))
|
|
|
|
|
, E.SqlExpr (E.Value (Maybe [QualificationId]))
|
|
|
|
|
)
|
|
|
|
|
@ -155,6 +159,8 @@ type DailyTableData = DBRow
|
|
|
|
|
, Entity TutorialParticipant
|
|
|
|
|
, Entity User
|
|
|
|
|
, Maybe (Entity UserAvs)
|
|
|
|
|
, Maybe (Entity UserDay)
|
|
|
|
|
, Maybe (Entity TutorialParticipantDay)
|
|
|
|
|
, E.Value (Maybe CompanyId)
|
|
|
|
|
, E.Value (Maybe [QualificationId])
|
|
|
|
|
)
|
|
|
|
|
@ -179,6 +185,12 @@ queryUser = $(sqlMIXproj' ''DailyTableExpr 4)
|
|
|
|
|
queryUserAvs :: DailyTableExpr -> E.SqlExpr (Maybe (Entity UserAvs))
|
|
|
|
|
queryUserAvs = $(sqlMIXproj' ''DailyTableExpr 5)
|
|
|
|
|
|
|
|
|
|
queryUserDay :: DailyTableExpr -> E.SqlExpr (Maybe (Entity UserDay))
|
|
|
|
|
queryUserDay = $(sqlMIXproj' ''DailyTableExpr 6)
|
|
|
|
|
|
|
|
|
|
queryParticipantDay :: DailyTableExpr -> E.SqlExpr (Maybe (Entity TutorialParticipantDay))
|
|
|
|
|
queryParticipantDay = $(sqlMIXproj' ''DailyTableExpr 7)
|
|
|
|
|
|
|
|
|
|
resultCourse :: Lens' DailyTableData (Entity Course)
|
|
|
|
|
resultCourse = _dbrOutput . _1
|
|
|
|
|
|
|
|
|
|
@ -194,11 +206,17 @@ resultUser = _dbrOutput . _4
|
|
|
|
|
resultUserAvs :: Traversal' DailyTableData UserAvs
|
|
|
|
|
resultUserAvs = _dbrOutput . _5 . _Just . _entityVal
|
|
|
|
|
|
|
|
|
|
resultUserDay :: Traversal' DailyTableData UserDay
|
|
|
|
|
resultUserDay = _dbrOutput . _6 . _Just . _entityVal
|
|
|
|
|
|
|
|
|
|
resultParticipantDay :: Traversal' DailyTableData TutorialParticipantDay
|
|
|
|
|
resultParticipantDay = _dbrOutput . _7 . _Just . _entityVal
|
|
|
|
|
|
|
|
|
|
resultCompanyId :: Traversal' DailyTableData CompanyId
|
|
|
|
|
resultCompanyId = _dbrOutput . _6 . _unValue . _Just
|
|
|
|
|
resultCompanyId = _dbrOutput . _8 . _unValue . _Just
|
|
|
|
|
|
|
|
|
|
resultCourseQualis :: Traversal' DailyTableData [QualificationId]
|
|
|
|
|
resultCourseQualis = _dbrOutput . _7 . _unValue . _Just
|
|
|
|
|
resultCourseQualis = _dbrOutput . _9 . _unValue . _Just
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
instance HasEntity DailyTableData User where
|
|
|
|
|
@ -213,21 +231,27 @@ instance HasUser DailyTableData where
|
|
|
|
|
mkDailyTable :: Bool -> SchoolId -> Day -> DB (FormResult (DailyTableActionData, Set TutorialId), Widget)
|
|
|
|
|
mkDailyTable isAdmin ssh nd = do
|
|
|
|
|
tutLessons <- getDayTutorials' ssh (nd,nd)
|
|
|
|
|
dday <- formatTime SelFormatDate nd
|
|
|
|
|
let
|
|
|
|
|
tutIds = Map.keys tutLessons
|
|
|
|
|
dbtSQLQuery :: DailyTableExpr -> DailyTableOutput
|
|
|
|
|
dbtSQLQuery (crs `E.InnerJoin` tut `E.InnerJoin` tpu `E.InnerJoin` usr `E.LeftOuterJoin` avs) = do
|
|
|
|
|
EL.on $ tut E.^. TutorialCourse E.==. crs E.^. CourseId
|
|
|
|
|
EL.on $ tut E.^. TutorialId E.==. tpu E.^. TutorialParticipantTutorial
|
|
|
|
|
EL.on $ usr E.^. UserId E.==. tpu E.^. TutorialParticipantUser
|
|
|
|
|
dbtSQLQuery (crs `E.InnerJoin` tut `E.InnerJoin` tpu `E.InnerJoin` usr `E.LeftOuterJoin` avs `E.LeftOuterJoin` udy `E.LeftOuterJoin` tdy) = do
|
|
|
|
|
EL.on $ tut E.^. TutorialId E.=?. tdy E.?. TutorialParticipantDayTutorial
|
|
|
|
|
E.&&. usr E.^. UserId E.=?. tdy E.?. TutorialParticipantDayUser
|
|
|
|
|
E.&&. E.val nd E.=?. tdy E.?. TutorialParticipantDayDay
|
|
|
|
|
EL.on $ usr E.^. UserId E.=?. udy E.?. UserDayUser
|
|
|
|
|
E.&&. E.val nd E.=?. udy E.?. UserDayDay
|
|
|
|
|
EL.on $ usr E.^. UserId E.=?. avs E.?. UserAvsUser
|
|
|
|
|
EL.on $ usr E.^. UserId E.==. tpu E.^. TutorialParticipantUser
|
|
|
|
|
EL.on $ tut E.^. TutorialId E.==. tpu E.^. TutorialParticipantTutorial
|
|
|
|
|
EL.on $ tut E.^. TutorialCourse E.==. crs E.^. CourseId
|
|
|
|
|
E.where_ $ tut E.^. TutorialId `E.in_` E.valList tutIds
|
|
|
|
|
let associatedQualifications = E.subSelectMaybe . EL.from $ \cq -> do
|
|
|
|
|
E.where_ $ cq E.^. CourseQualificationCourse E.==. crs E.^. CourseId
|
|
|
|
|
let cqQual = cq E.^. CourseQualificationQualification
|
|
|
|
|
cqOrder = [E.asc $ cq E.^. CourseQualificationSortOrder, E.asc cqQual]
|
|
|
|
|
return $ E.arrayAggWith E.AggModeAll cqQual cqOrder
|
|
|
|
|
return (crs, tut, tpu, usr, avs, selectCompanyUserPrime usr, associatedQualifications)
|
|
|
|
|
return (crs, tut, tpu, usr, avs, udy, tdy, selectCompanyUserPrime usr, associatedQualifications)
|
|
|
|
|
dbtRowKey = queryTutorial >>> (E.^. TutorialId)
|
|
|
|
|
dbtProj = dbtProjId
|
|
|
|
|
dbtColonnade = mconcat
|
|
|
|
|
@ -249,6 +273,12 @@ mkDailyTable isAdmin ssh nd = do
|
|
|
|
|
, colUserNameModalHdr MsgCourseParticipant ForProfileDataR
|
|
|
|
|
, colUserMatriclenr isAdmin
|
|
|
|
|
, sortable (Just "card-no") (i18nCell MsgAvsCardNo) $ \(preview $ resultUserAvs . _userAvsLastCardNo . _Just -> cn :: Maybe AvsFullCardNo) -> cellMaybe (textCell . tshowAvsFullCardNo) cn
|
|
|
|
|
, sortable (Just "permit") (i18nCell MsgTutorialDrivingPermit) $ \(view $ resultParticipant . _entityVal . _tutorialParticipantDrivingPermit -> x) -> maybeCell x $ textCell . tshow
|
|
|
|
|
, sortable (Just "eye-exam") (i18nCell MsgTutorialEyeExam) $ \(view $ resultParticipant . _entityVal . _tutorialParticipantEyeExam -> x) -> maybeCell x $ textCell . tshow
|
|
|
|
|
, sortable (Just "note-tutorial") (i18nCell MsgTutorialNote) $ \(view $ resultParticipant . _entityVal . _tutorialParticipantNote -> x) -> maybeCell x textCell
|
|
|
|
|
, sortable (Just "attendance") (i18nCell $ MsgTutorialDayAttendance dday) $ \(preview $ resultParticipantDay . _tutorialParticipantDayAttendance -> x) -> maybeCell x tickmarkCell
|
|
|
|
|
, sortable (Just "note-attend") (i18nCell $ MsgTutorialDayNote dday) $ \(preview $ resultParticipantDay . _tutorialParticipantDayNote . _Just -> x) -> maybeCell x textCell
|
|
|
|
|
, sortable (Just "parking") (i18nCell MsgTableUserParkingToken) $ \(preview $ resultUserDay . _userDayParkingToken -> x) -> maybeCell x tickmarkCell
|
|
|
|
|
]
|
|
|
|
|
dbtSorting = Map.fromList
|
|
|
|
|
[ sortUserNameLink queryUser
|
|
|
|
|
@ -258,6 +288,12 @@ mkDailyTable isAdmin ssh nd = do
|
|
|
|
|
, ("user-company" , SortColumn $ queryUser >>> selectCompanyUserPrime)
|
|
|
|
|
, ("booking-company", SortColumn $ queryParticipant >>> (E.^. TutorialParticipantCompany))
|
|
|
|
|
, ("card-no" , SortColumn $ queryUserAvs >>> (E.?. UserAvsLastCardNo))
|
|
|
|
|
, ("permit" , SortColumnNullsInv $ queryParticipant >>> (E.^. TutorialParticipantDrivingPermit))
|
|
|
|
|
, ("eye-exam" , SortColumnNullsInv $ queryParticipant >>> (E.^. TutorialParticipantEyeExam))
|
|
|
|
|
, ("note-tutorial" , SortColumn $ queryParticipant >>> (E.^. TutorialParticipantNote))
|
|
|
|
|
, ("attendance" , SortColumnNullsInv $ queryParticipantDay >>> (E.?. TutorialParticipantDayAttendance))
|
|
|
|
|
, ("note-attend" , SortColumn $ queryParticipantDay >>> (E.?. TutorialParticipantDayNote))
|
|
|
|
|
, ("parking" , SortColumnNullsInv $ queryUserDay >>> (E.?. UserDayParkingToken))
|
|
|
|
|
]
|
|
|
|
|
dbtFilter = Map.fromList
|
|
|
|
|
[ fltrUserNameEmail queryUser
|
|
|
|
|
|