Grading Summary Refactor finished

This commit is contained in:
SJost 2018-12-20 19:18:48 +01:00
parent 7d726f48c3
commit fb8d0c049f
6 changed files with 60 additions and 47 deletions

View File

@ -407,8 +407,9 @@ SheetTypeNotGraded: Unbewertet
SheetTypeInfoNotGraded: Blätter ohne Wertung werden nirgends angerechnet, die Bewertung durch den Korrektor dient lediglich zur Information der Teilnehmer. SheetTypeInfoNotGraded: Blätter ohne Wertung werden nirgends angerechnet, die Bewertung durch den Korrektor dient lediglich zur Information der Teilnehmer.
SheetTypeInfoBonus: Bonus Blätter zählen normal, erhöhen aber nicht die maximal erreichbare Punktzahl bzw. Anzahl zu bestehender Blätter. SheetTypeInfoBonus: Bonus Blätter zählen normal, erhöhen aber nicht die maximal erreichbare Punktzahl bzw. Anzahl zu bestehender Blätter.
SheetGradingBonusIncluded: Erzielte Bonuspunkte wurden hier bereits zu den erreichten normalen Punkten hinzugezählt. SheetGradingBonusIncluded: Erzielte Bonuspunkte wurden hier bereits zu den erreichten normalen Punkten hinzugezählt.
SheetGradingSummaryTitle n@Int: Zusammenfassung über alle #{display n} Blätter SummaryTitle: Zusammenfassung über alle
SubmissionGradingSummaryTitle n@Int: Zusammenfassung über alle #{display n} Abgaben SheetGradingSummaryTitle count@Integer: #{display count} Blätter
SubmissionGradingSummaryTitle count@Integer: #{display count} Abgaben
SheetTypeBonus': Bonus SheetTypeBonus': Bonus
SheetTypeNormal': Normal SheetTypeNormal': Normal

View File

@ -9,19 +9,19 @@ import Utils.Lens
addBonusToPoints :: SheetTypeSummary -> SheetTypeSummary addBonusToPoints :: SheetTypeSummary -> SheetTypeSummary
addBonusToPoints sts = addBonusToPoints sts =
update _achievedPoints _sumSheetsPoints $ sts & _normalSummary . _achievedPasses %~ (min passmax . (passbonus +))
update _achievedPasses _numSheetsPasses sts & _normalSummary . _achievedPoints %~ (min ptsmax . (ptsbonus +))
where where
update lachieved lmax s = passmax = sts ^. _normalSummary . _numMarkedPasses
let bonus = s ^. _bonusSummary . lachieved passbonus = sts ^. _bonusSummary . _achievedPasses
valmax = s ^. _normalSummary . lmax ptsmax = sts ^. _normalSummary . _sumMarkedPoints
in s & _normalSummary . lachieved %~ min valmax . (bonus +) ptsbonus = sts ^. _bonusSummary . _achievedPoints
gradeSummaryWidget :: RenderMessage UniWorX msg => (Int -> msg) -> SheetTypeSummary -> Widget gradeSummaryWidget :: RenderMessage UniWorX msg => (Integer -> msg) -> SheetTypeSummary -> Widget
gradeSummaryWidget title sts = gradeSummaryWidget title sts =
let SheetTypeSummary{..} = addBonusToPoints sts let SheetTypeSummary{..} = addBonusToPoints sts
sumSummaries = normalSummary <> bonusSummary <> informationalSummary & _numSheets %~ (<> numNotGraded) sumSummaries = normalSummary <> bonusSummary <> informationalSummary & _numSheets %~ (<> numNotGraded)
hasPassings = positiveSum $ numSheetsPasses sumSummaries hasPasses = positiveSum $ numSheetsPasses sumSummaries
hasMarkedPasses = positiveSum $ numMarkedPasses sumSummaries hasMarkedPasses = positiveSum $ numMarkedPasses sumSummaries
hasPoints = positiveSum $ numSheetsPoints sumSummaries hasPoints = positiveSum $ numSheetsPoints sumSummaries
hasMarkedPoints = positiveSum $ numMarkedPoints sumSummaries hasMarkedPoints = positiveSum $ numMarkedPoints sumSummaries

View File

@ -10,7 +10,7 @@ import ClassyPrelude.Yesod
import Database.Persist.Quasi import Database.Persist.Quasi
-- import Data.Time -- import Data.Time
-- import Data.ByteString -- import Data.ByteString
import Model.Types import Model.Types hiding (_maxPoints, _passingPoints)
import Cron.Types import Cron.Types
import Data.Aeson (Value) import Data.Aeson (Value)

View File

@ -123,6 +123,8 @@ fromPoints = round
instance DisplayAble Points instance DisplayAble Points
instance DisplayAble a => DisplayAble (Sum a) where
display (Sum x) = display x
data SheetGrading data SheetGrading
= Points { maxPoints :: Points } = Points { maxPoints :: Points }
@ -162,7 +164,7 @@ data SheetGradeSummary = SheetGradeSummary
, numMarked :: Count -- Number of already marked sheets , numMarked :: Count -- Number of already marked sheets
, numMarkedPasses :: Count -- Number of already marked sheets with passes , numMarkedPasses :: Count -- Number of already marked sheets with passes
, numMarkedPoints :: Count -- Number of already marked sheets with points , numMarkedPoints :: Count -- Number of already marked sheets with points
, sumMarkedPoints :: Sum Point -- Achieveable points within marked sheets , sumMarkedPoints :: Sum Points -- Achieveable points within marked sheets
-- --
, achievedPasses :: Count -- Achieved passes (within marked sheets) , achievedPasses :: Count -- Achieved passes (within marked sheets)
, achievedPoints :: Sum Points -- Achieved points (within marked sheets) , achievedPoints :: Sum Points -- Achieved points (within marked sheets)
@ -214,7 +216,7 @@ data SheetTypeSummary = SheetTypeSummary
{ normalSummary { normalSummary
, bonusSummary , bonusSummary
, informationalSummary :: SheetGradeSummary , informationalSummary :: SheetGradeSummary
, numNotGraded :: Sum Int , numNotGraded :: Count
} deriving (Generic, Read, Show, Eq) } deriving (Generic, Read, Show, Eq)
instance Monoid SheetTypeSummary where instance Monoid SheetTypeSummary where

View File

@ -1,21 +1,25 @@
$# Displays gradings Summary for various purposes $# Displays gradings Summary for various purposes
$# Expects several variables: $# Expects several variables:
$# sumSummaries :: SheetGradeSummary -- summary over all grading types $# sumSummaries :: SheetGradeSummary -- summary over all grading types
$# hasPassing :: Maybe Int -- Should Passing be displayed? $# hasPasses :: Maybe Int -- Should Passing be displayed?
$# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets $# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets
$# hasPoints :: Maybe Points -- Should Points be displayed? $# hasPoints :: Maybe Points -- Should Points be displayed?
$# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets $# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets
$# -- $# --
<div> <div>
<h3>_{title $ getSum $ numSheets $ sumSummaries} <h3>_{MsgSummaryTitle} _{title $ getSum $ numSheets $ sumSummaries}
<table .table .table--striped> <table .table .table--striped>
<tr .table__row .table__row--head> <tr .table__row .table__row--head>
<th> <th>
$# empty cell for row headers $# empty cell for row headers
$maybe _ <- hasPassings $maybe _ <- hasMarkedPasses
<th .table__th colspan=2>_{MsgSheetGradingPassing'} <th .table__th colspan=2>_{MsgCorrected}
$maybe _ <- hasPasses
<th .table__th>_{MsgSheetGradingPassing'}
$maybe _ <- hasMarkedPoints
<th .table__th colspan=2>_{MsgCorrected}
$maybe _ <- hasPoints $maybe _ <- hasPoints
<th .table__th colspan=2>_{MsgSheetGradingPoints'} <th .table__th>_{MsgSheetGradingPoints'}
<th .table__th>_{MsgSheetGradingCount'} <th .table__th>_{MsgSheetGradingCount'}
$# Number of Sheet/Submissions used for calculating maximum passes/points $# Number of Sheet/Submissions used for calculating maximum passes/points
$forall row <- rowWdgts $forall row <- rowWdgts
@ -23,14 +27,18 @@ $# --
$maybe nrNoGrade <- positiveSum $ numNotGraded $maybe nrNoGrade <- positiveSum $ numNotGraded
<tr .table__row> <tr .table__row>
<th .table__th>_{MsgSheetTypeNotGraded} <th .table__th>_{MsgSheetTypeNotGraded}
$maybe _ <- hasPassings $maybe _ <- hasMarkedPasses
<td colspan=2> <td colspan=2>
$maybe _ <- hasPoints $maybe _ <- hasPasses
<td .table__td>
$maybe _ <- hasMarkedPoints
<td .table__td colspan=2> <td .table__td colspan=2>
$maybe _ <- hasPoints
<td .table__td>
<td .table__td>#{display nrNoGrade} <td .table__td>#{display nrNoGrade}
$maybe _ <- positiveSum $ bonusSummary ^. _numSheets $maybe _ <- positiveSum $ bonusSummary ^. _numSheets
<p>_{MsgSheetTypeInfoBonus} # <p>_{MsgSheetTypeInfoBonus} #
$maybe _ <- positiveSum =<< (bonusSummary ^. _achievedPoints) $maybe _ <- positiveSum $ bonusSummary ^. _achievedPoints
_{MsgSheetGradingBonusIncluded} _{MsgSheetGradingBonusIncluded}
$maybe _ <- positiveSum $ informationalSummary ^. _numSheets $maybe _ <- positiveSum $ informationalSummary ^. _numSheets
<p>_{MsgSheetTypeInfoNotGraded} <p>_{MsgSheetTypeInfoNotGraded}

View File

@ -2,7 +2,7 @@ $# Displays one row of the grading summary
$# Expects several variables: $# Expects several variables:
$# summary :: SheetGradeSummary -- summary to display $# summary :: SheetGradeSummary -- summary to display
$# sumHeader :: UniWorXMessage -- row header $# sumHeader :: UniWorXMessage -- row header
$# hasPassing :: Maybe Int -- Should Passing be displayed? $# hasPasses :: Maybe Int -- Should Passing be displayed?
$# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets $# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets
$# hasPoints :: Maybe Points -- Should Points be displayed? $# hasPoints :: Maybe Points -- Should Points be displayed?
$# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets $# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets
@ -10,29 +10,31 @@ $#
$# TODO: Durschnittliche Punktzahl anzeigen $# TODO: Durschnittliche Punktzahl anzeigen
$# TODO: Extra-Spalte für Punkte Bewertet = numMarkedPoints / Punkte Gesamt = sumSheetPoints $# TODO: Extra-Spalte für Punkte Bewertet = numMarkedPoints / Punkte Gesamt = sumSheetPoints
$# $#
$maybe nrSheets <- positiveSum $ summary ^. _numSheets $maybe _ <- positiveSum $ summary ^. _numSheets
<tr .table__row > <tr .table__row>
<th .table__th>_{sumHeader} <th .table__th>_{sumHeader}
$maybe _ <- hasPassings $maybe _ <- hasMarkedPasses
$with Sum pmax <- summary ^. _numGradePasses $with Sum pmax <- summary ^. _numMarkedPasses
$maybe Sum pacv <- summary ^. _achievedPasses $with Sum pacv <- summary ^. _achievedPasses
<td .table__td> <td .table__td>
$if pmax /= 0 $if pmax > 0
#{textPercentInt pacv pmax} #{textPercentInt pacv pmax}
<td .table__td> <td .table__td>
#{display pacv} / #{display pmax} #{display pacv} / #{display pmax}
$nothing $maybe _ <- hasPasses
<td .table__td colspan=2> <td .table__td>
#{display pmax } #{display $ summary ^. _numSheetsPasses}
$maybe _ <- hasMarkedPoints
$with Sum pmax <- summary ^. _sumMarkedPoints
$with Sum pacv <- summary ^. _achievedPoints
<td .table__td>
$if pmax > 0
#{textPercent $ realToFrac $ pacv / pmax}
<td .table__td>
#{display pacv} / #{display pmax}
\ (_{title $ getSum $ summary ^. _numMarkedPoints})
$maybe _ <- hasPoints $maybe _ <- hasPoints
$with Sum pmax <- summary ^. _sumGradePoints <td .table__td>
$maybe Sum pacv <- summary ^. _achievedPoints #{display (summary ^. _sumSheetsPoints)}
<td .table__td> \ (_{title $ getSum $ summary ^. _numSheetsPoints})
$if pmax /= 0 <td .table__td>#{display $ summary ^. _numSheets}
#{textPercent $ realToFrac $ pacv / pmax}
<td .table__td>
#{display pacv} / #{display pmax}
$nothing
<td .table__td colspan=2>
#{display pmax }
<td .table__td>#{display nrSheets}