From 82aef8a254e4d28f9a7f706d77558b7fdfd9af7b Mon Sep 17 00:00:00 2001 From: SJost Date: Wed, 19 Dec 2018 15:48:38 +0100 Subject: [PATCH] refactor sheetGradeSummary part 2 --- src/Handler/Utils/SheetType.hs | 25 ++++++++++------------ src/Model/Types.hs | 20 ++++++++--------- src/Utils.hs | 2 +- templates/widgets/gradingSummary.hamlet | 10 +++++---- templates/widgets/gradingSummaryRow.hamlet | 9 ++++++-- 5 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/Handler/Utils/SheetType.hs b/src/Handler/Utils/SheetType.hs index 150b7cd63..9b83f6270 100644 --- a/src/Handler/Utils/SheetType.hs +++ b/src/Handler/Utils/SheetType.hs @@ -9,25 +9,22 @@ import Utils.Lens addBonusToPoints :: SheetTypeSummary -> SheetTypeSummary addBonusToPoints sts = - sts & _normalSummary . _achievedPoints %~ maxBonusPts . addBonusPts - & _normalSummary . _achievedPasses %~ maxBonusPass . addBonusPass + update _achievedPoints _sumSheetsPoints $ + update _achievedPasses _numSheetsPasses sts where - bonusPoints = sts ^. _bonusSummary . _achievedPoints - maxPoints = sts ^. _normalSummary . _sumGradePoints - maxBonusPts = fmap $ min maxPoints - addBonusPts = maybeAdd bonusPoints - - bonusPasses = sts ^. _bonusSummary . _achievedPasses - maxPasses = sts ^. _normalSummary . _numGradePasses - maxBonusPass = fmap $ min maxPasses - addBonusPass = maybeAdd bonusPasses + update lachieved lmax s = + let bonus = s ^. _bonusSummary . lachieved + valmax = s ^. _normalSummary . lmax + in s & _normalSummary . lachieved %~ min valmax . (bonus +) gradeSummaryWidget :: RenderMessage UniWorX msg => (Int -> msg) -> SheetTypeSummary -> Widget gradeSummaryWidget title sts = let SheetTypeSummary{..} = addBonusToPoints sts - sumSummaries = normalSummary <> bonusSummary <> informationalSummary & _numSheets %~ (<> numNotGraded) - hasPassings = positiveSum $ numGradePasses sumSummaries - hasPoints = positiveSum $ sumGradePoints sumSummaries + sumSummaries = normalSummary <> bonusSummary <> informationalSummary & _numSheets %~ (<> numNotGraded) + hasPassings = positiveSum $ numSheetsPasses sumSummaries + hasMarkedPasses = positiveSum $ numMarkedPasses sumSummaries + hasPoints = positiveSum $ numSheetsPoints sumSummaries + hasMarkedPoints = positiveSum $ numMarkedPoints sumSummaries rowWdgts = [ $(widgetFile "widgets/gradingSummaryRow") | (sumHeader,summary) <- [ (MsgSheetTypeNormal' ,normalSummary) diff --git a/src/Model/Types.hs b/src/Model/Types.hs index 56743ac54..1d7389038 100644 --- a/src/Model/Types.hs +++ b/src/Model/Types.hs @@ -154,18 +154,18 @@ gradingPassed gr pts = either pBinary pPoints <$> gr ^? _passingBound data SheetGradeSummary = SheetGradeSummary - { numSheets :: Count -- Total number of sheets, includes all - , numSheetsPasses :: Count -- Number of sheets required to pass - , numSheetsPoints :: Count -- Number of sheets having points - , sumSheetsPoints :: Sum Points -- Total of all points in all sheets + { numSheets :: Count -- Total number of sheets, includes all + , numSheetsPasses :: Count -- Number of sheets required to pass FKA: numGradePasses + , numSheetsPoints :: Count -- Number of sheets having points FKA: sumGradePointsd + , sumSheetsPoints :: Sum Points -- Total of all points in all sheets -- Marking dependend - , numMarked :: Count -- Number of already marked sheets - , numMarkedPasses :: Count -- Number of already marked sheets with passes - , numMarkedPoints :: Count -- Number of already marked sheets with points - , sumMarkedPoints :: Sum Point -- Achieveable points within marked sheets + , numMarked :: Count -- Number of already marked sheets + , numMarkedPasses :: Count -- Number of already marked sheets with passes + , numMarkedPoints :: Count -- Number of already marked sheets with points + , sumMarkedPoints :: Sum Point -- Achieveable points within marked sheets -- - , achievedPasses :: Count -- Achieved passes (within marked sheets) - , achievedPoints :: Sum Points -- Achieved points (within marked sheets) + , achievedPasses :: Count -- Achieved passes (within marked sheets) + , achievedPoints :: Sum Points -- Achieved points (within marked sheets) } deriving (Generic, Read, Show, Eq) instance Monoid SheetGradeSummary where diff --git a/src/Utils.hs b/src/Utils.hs index 4bc4c1c9f..f61ed6981 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -337,7 +337,7 @@ ifMaybeM :: Monad m => Maybe a -> b -> (a -> m b) -> m b -- more convenient argu ifMaybeM Nothing dft _ = return dft ifMaybeM (Just x) _ act = act x -maybePositive :: (Num a, Ord a) => a -> Maybe a -- convenient for Shakespear: one $maybe instead of $with & $if +maybePositive :: (Num a, Ord a) => a -> Maybe a -- convenient for Shakespeare: one $maybe instead of $with & $if maybePositive a | a > 0 = Just a | otherwise = Nothing diff --git a/templates/widgets/gradingSummary.hamlet b/templates/widgets/gradingSummary.hamlet index 8221fc293..cb389d6a0 100644 --- a/templates/widgets/gradingSummary.hamlet +++ b/templates/widgets/gradingSummary.hamlet @@ -1,8 +1,10 @@ $# Displays gradings Summary for various purposes $# Expects several variables: -$# hasPassing :: Maybe Int -- Should Passing be displayed? -$# hasPoints :: Maybe Points -- Should Points be displayed? -$# summary :: SheetGradeSummary -- summary to display +$# sumSummaries :: SheetGradeSummary -- summary over all grading types +$# hasPassing :: Maybe Int -- Should Passing be displayed? +$# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets +$# hasPoints :: Maybe Points -- Should Points be displayed? +$# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets $# --

_{title $ getSum $ numSheets $ sumSummaries} @@ -27,7 +29,7 @@ $# -- #{display nrNoGrade} $maybe _ <- positiveSum $ bonusSummary ^. _numSheets -

_{MsgSheetTypeInfoBonus} +

_{MsgSheetTypeInfoBonus} # $maybe _ <- positiveSum =<< (bonusSummary ^. _achievedPoints) _{MsgSheetGradingBonusIncluded} $maybe _ <- positiveSum $ informationalSummary ^. _numSheets diff --git a/templates/widgets/gradingSummaryRow.hamlet b/templates/widgets/gradingSummaryRow.hamlet index 7b37b3176..42dc8da26 100644 --- a/templates/widgets/gradingSummaryRow.hamlet +++ b/templates/widgets/gradingSummaryRow.hamlet @@ -1,9 +1,14 @@ $# Displays one row of the grading summary $# Expects several variables: -$# hasPassing :: Maybe Int -- Should Passing be displayed? -$# hasPoints :: Maybe Points -- Should Points be displayed? $# summary :: SheetGradeSummary -- summary to display $# sumHeader :: UniWorXMessage -- row header +$# hasPassing :: Maybe Int -- Should Passing be displayed? +$# hasMarkedPasses :: Maybe Int -- Number of marked pass-sheets +$# hasPoints :: Maybe Points -- Should Points be displayed? +$# hasMarkedPoints :: Maybe Int -- Number of marked point-sheets +$# +$# TODO: Durschnittliche Punktzahl anzeigen +$# TODO: Extra-Spalte für Punkte Bewertet = numMarkedPoints / Punkte Gesamt = sumSheetPoints $# $maybe nrSheets <- positiveSum $ summary ^. _numSheets