From 772a5ee02c5140fa9cba49e52e911928eb95d65c Mon Sep 17 00:00:00 2001 From: SJost Date: Wed, 18 Oct 2017 15:57:55 +0200 Subject: [PATCH] Esqueleto for Term Overview --- src/Handler/Home.hs | 2 ++ src/Handler/Term.hs | 62 ++++++++++++++++++++++++++++--------------- templates/home.hamlet | 4 +-- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/Handler/Home.hs b/src/Handler/Home.hs index 21b6ea6ee..d00d69ca8 100644 --- a/src/Handler/Home.hs +++ b/src/Handler/Home.hs @@ -34,6 +34,8 @@ postHomeR :: Handler Html postHomeR = do ((infResult,_), _) <- runFormPost $ postButtonForm "Informatik" ((matResult,_), _) <- runFormPost $ postButtonForm "Mathematik" + $(logDebug) $ tshow infResult + $(logDebug) $ tshow matResult setMessage "ButtonTest" case infResult of (FormSuccess ()) -> setMessage "Informatik anlegen" -- does not work somehow diff --git a/src/Handler/Term.hs b/src/Handler/Term.hs index 662596477..e56599863 100644 --- a/src/Handler/Term.hs +++ b/src/Handler/Term.hs @@ -1,5 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE MultiParamTypeClasses #-} @@ -14,44 +15,61 @@ import Handler.Utils import qualified Data.Text as T import Yesod.Form.Bootstrap3 -import Colonnade +import Colonnade hiding (bool) import Yesod.Colonnade +import qualified Database.Esqueleto as E getTermShowR :: Handler TypedContent getTermShowR = do - terms <- runDB $ selectList [] [Desc TermStart] +-- terms <- runDB $ selectList [] [Desc TermStart] +------- ÄQUIVALENT: +-- term <- runDB $ E.select . E.from $ \(term) -> do +-- E.orderBy [E.desc $ term E.^. TermStart ] +-- return term +-- + termData <- runDB $ E.select . E.from $ \term -> do + E.orderBy [E.desc $ term E.^. TermStart ] + let courseCount :: E.SqlExpr (E.Value Int) + courseCount = E.sub_select . E.from $ \course -> do + E.where_ $ term E.^. TermId E.==. course E.^. CourseTermId + return E.countRows + return (term, courseCount) selectRep $ do - provideRep $ return $ toJSON terms + provideRep $ return $ toJSON $ map fst termData provideRep $ do let colonnadeTerms = mconcat - [ headed "Kürzel" $ (\t -> let tn = termName t in do - adminLink <- handlerToWidget $ isAuthorized (TermEditExistR tn) False + [ headed "Kürzel" $ \(Entity _ Term{..},_) -> do + -- Scrap this if to slow, create term edit page instead + adminLink <- handlerToWidget $ isAuthorized (TermEditExistR termName) False [whamlet| $if adminLink == Authorized - - #{termToText tn} + + #{termToText termName} $else - #{termToText tn} - |] ) - , headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart - , headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd - , headed "Aktiv" (\t -> if termActive t then tickmark else "") - -- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "") - , headed "Kursliste" $ (\t -> let tn = termName t in do - numCourses <- handlerToWidget $ runDB $ count [CourseTermId ==. TermKey tn ] + #{termToText termName} + |] + , headed "Beginn Vorlesungen" $ \(Entity _ Term{..},_) -> + fromString $ formatTimeGerWD termLectureStart + , headed "Ende Vorlesungen" $ \(Entity _ Term{..},_) -> + fromString $ formatTimeGerWD termLectureEnd + , headed "Aktiv" $ \(Entity _ Term{..},_) -> + bool "" tickmark termActive + , headed "Kursliste" $ \(Entity _ Term{..}, E.Value numCourses) -> [whamlet| - + #{show numCourses} Kurse - |] ) - , headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart - , headed "Semesterende" $ fromString.formatTimeGerWD.termEnd - , headed "Feiertage im Semester" $ - fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays + |] + , headed "Semesteranfang" $ \(Entity _ Term{..},_) -> + fromString $ formatTimeGerWD termStart + , headed "Semesterende" $ \(Entity _ Term{..},_) -> + fromString $ formatTimeGerWD termEnd + , headed "Feiertage im Semester" $ \(Entity _ Term{..},_) -> + fromString $ (intercalate ", ") $ map formatTimeGerWD termHolidays ] defaultLayout $ do setTitle "Freigeschaltete Semester" - encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms) + encodeHeadedWidgetTable tableDefault colonnadeTerms termData getTermEditR :: Handler Html diff --git a/templates/home.hamlet b/templates/home.hamlet index 04114a2a1..68aeb5f1e 100644 --- a/templates/home.hamlet +++ b/templates/home.hamlet @@ -65,9 +65,9 @@
  • Institut einmalig in Datenbank einfügen: -
    + ^{crInfWdgt} - + ^{crMatWdgt}