Esqueleto for Term Overview

This commit is contained in:
SJost 2017-10-18 15:57:55 +02:00
parent 0cd0425903
commit 772a5ee02c
3 changed files with 44 additions and 24 deletions

View File

@ -34,6 +34,8 @@ postHomeR :: Handler Html
postHomeR = do postHomeR = do
((infResult,_), _) <- runFormPost $ postButtonForm "Informatik" ((infResult,_), _) <- runFormPost $ postButtonForm "Informatik"
((matResult,_), _) <- runFormPost $ postButtonForm "Mathematik" ((matResult,_), _) <- runFormPost $ postButtonForm "Mathematik"
$(logDebug) $ tshow infResult
$(logDebug) $ tshow matResult
setMessage "ButtonTest" setMessage "ButtonTest"
case infResult of case infResult of
(FormSuccess ()) -> setMessage "Informatik anlegen" -- does not work somehow (FormSuccess ()) -> setMessage "Informatik anlegen" -- does not work somehow

View File

@ -1,5 +1,6 @@
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE MultiParamTypeClasses #-}
@ -14,44 +15,61 @@ import Handler.Utils
import qualified Data.Text as T import qualified Data.Text as T
import Yesod.Form.Bootstrap3 import Yesod.Form.Bootstrap3
import Colonnade import Colonnade hiding (bool)
import Yesod.Colonnade import Yesod.Colonnade
import qualified Database.Esqueleto as E
getTermShowR :: Handler TypedContent getTermShowR :: Handler TypedContent
getTermShowR = do 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 selectRep $ do
provideRep $ return $ toJSON terms provideRep $ return $ toJSON $ map fst termData
provideRep $ do provideRep $ do
let colonnadeTerms = mconcat let colonnadeTerms = mconcat
[ headed "Kürzel" $ (\t -> let tn = termName t in do [ headed "Kürzel" $ \(Entity _ Term{..},_) -> do
adminLink <- handlerToWidget $ isAuthorized (TermEditExistR tn) False -- Scrap this if to slow, create term edit page instead
adminLink <- handlerToWidget $ isAuthorized (TermEditExistR termName) False
[whamlet| [whamlet|
$if adminLink == Authorized $if adminLink == Authorized
<a href=@{TermEditExistR tn}> <a href=@{TermEditExistR termName}>
#{termToText tn} #{termToText termName}
$else $else
#{termToText tn} #{termToText termName}
|] ) |]
, headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart , headed "Beginn Vorlesungen" $ \(Entity _ Term{..},_) ->
, headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd fromString $ formatTimeGerWD termLectureStart
, headed "Aktiv" (\t -> if termActive t then tickmark else "") , headed "Ende Vorlesungen" $ \(Entity _ Term{..},_) ->
-- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "") fromString $ formatTimeGerWD termLectureEnd
, headed "Kursliste" $ (\t -> let tn = termName t in do , headed "Aktiv" $ \(Entity _ Term{..},_) ->
numCourses <- handlerToWidget $ runDB $ count [CourseTermId ==. TermKey tn ] bool "" tickmark termActive
, headed "Kursliste" $ \(Entity _ Term{..}, E.Value numCourses) ->
[whamlet| [whamlet|
<a href=@{CourseListTermR tn}> <a href=@{CourseListTermR termName}>
#{show numCourses} Kurse #{show numCourses} Kurse
|] ) |]
, headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart , headed "Semesteranfang" $ \(Entity _ Term{..},_) ->
, headed "Semesterende" $ fromString.formatTimeGerWD.termEnd fromString $ formatTimeGerWD termStart
, headed "Feiertage im Semester" $ , headed "Semesterende" $ \(Entity _ Term{..},_) ->
fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays fromString $ formatTimeGerWD termEnd
, headed "Feiertage im Semester" $ \(Entity _ Term{..},_) ->
fromString $ (intercalate ", ") $ map formatTimeGerWD termHolidays
] ]
defaultLayout $ do defaultLayout $ do
setTitle "Freigeschaltete Semester" setTitle "Freigeschaltete Semester"
encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms) encodeHeadedWidgetTable tableDefault colonnadeTerms termData
getTermEditR :: Handler Html getTermEditR :: Handler Html

View File

@ -65,9 +65,9 @@
<li .list-group-item> <li .list-group-item>
Institut einmalig in Datenbank einfügen: Institut einmalig in Datenbank einfügen:
<form .form-inline method=post action=@{HomeR} enctype=#{crInfEnctype}> <form .form-inline method=post action=@{HomeR} enctype=#{crInfEnctype}>
^{crInfWdgt} ^{crInfWdgt}
<form .form-inline method=post action=@{HomeR} enctype=#{crMatEnctype}> <form .form-inline method=post action=@{HomeR} enctype=#{crMatEnctype}>
^{crMatWdgt} ^{crMatWdgt}
<li .list-group-item> <li .list-group-item>