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
((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

View File

@ -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
<a href=@{TermEditExistR tn}>
#{termToText tn}
<a href=@{TermEditExistR termName}>
#{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|
<a href=@{CourseListTermR tn}>
<a href=@{CourseListTermR termName}>
#{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

View File

@ -65,9 +65,9 @@
<li .list-group-item>
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}
<form .form-inline method=post action=@{HomeR} enctype=#{crMatEnctype}>
<form .form-inline method=post action=@{HomeR} enctype=#{crMatEnctype}>
^{crMatWdgt}
<li .list-group-item>