module Handler.Term where import Import import Handler.Utils import qualified Data.Map as Map -- import qualified Data.Text as T import Yesod.Form.Bootstrap3 -- import Colonnade hiding (bool) import qualified Database.Esqueleto as E validateTerm :: Term -> [Text] validateTerm (Term{..}) = [ msg | (False, msg) <- [ --startOk ( termStart `withinTerm` termName , "Jahreszahl im Namenskürzel stimmt nicht mit Semesterbeginn überein." ) , -- endOk ( termStart < termEnd , "Semester darf nicht enden, bevor es begann." ) , -- startOk ( termLectureStart < termLectureEnd , "Vorlesungszeit muss vor ihrem Ende anfgangen." ) , -- lecStartOk ( termStart <= termLectureStart , "Semester muss vor der Vorlesungszeit beginnen." ) , -- lecEndOk ( termEnd >= termLectureEnd , "Vorlesungszeit muss vor dem Semester enden." ) ] ] getTermShowR :: Handler TypedContent getTermShowR = do -- terms <- runDB $ selectList [] [Desc TermStart] ------- ÄQUIVALENT: -- term <- runDB $ E.select . E.from $ \(term) -> do -- E.orderBy [E.desc $ term E.^. TermStart ] -- return term -- let termData :: E.SqlExpr (Entity Term) -> E.SqlQuery (E.SqlExpr (Entity Term), E.SqlExpr (E.Value Int64)) termData term = do -- E.orderBy [E.desc $ term E.^. TermStart ] let courseCount = E.sub_select . E.from $ \course -> do E.where_ $ term E.^. TermId E.==. course E.^. CourseTerm return E.countRows return (term, courseCount) selectRep $ do provideRep $ toJSON . map fst <$> runDB (E.select $ E.from termData) provideRep $ do let colonnadeTerms = widgetColonnade $ mconcat [ sortable Nothing "Kürzel" $ \(Entity tid _, _) -> anchorCell (TermCourseListR tid) [whamlet|#{toPathPiece tid}|] , sortable (Just "lecture-start") (i18nCell MsgLectureStart) $ \(Entity _ Term{..},_) -> cell $ formatTime SelFormatDate termLectureStart >>= toWidget , sortable (Just "lecture-end") "Ende Vorlesungen" $ \(Entity _ Term{..},_) -> cell $ formatTime SelFormatDate termLectureEnd >>= toWidget , sortable Nothing "Aktiv" $ \(Entity _ Term{..},_) -> textCell $ (bool "" tickmark termActive :: Text) , sortable Nothing "Kurse" $ \(_, E.Value numCourses) -> cell [whamlet|_{MsgNumCourses numCourses}|] , sortable (Just "start") "Semesteranfang" $ \(Entity _ Term{..},_) -> cell $ formatTime SelFormatDate termStart >>= toWidget , sortable (Just "end") "Semesterende" $ \(Entity _ Term{..},_) -> cell $ formatTime SelFormatDate termEnd >>= toWidget , sortable Nothing "Feiertage im Semester" $ \(Entity _ Term{..},_) -> cell $ do termHolidays' <- mapM (formatTime SelFormatDate) termHolidays [whamlet|