_{MsgCorrectionSheets} _{MsgCourseParticipants nrParticipants}
_{MsgSheet} $if groupsPossible _{MsgNrSubmittorsTotal} _{MsgNrSubmissionsTotal} _{MsgNrSubmissionsNotAssigned} _{MsgNrSubmissionsNotCorrected} _{MsgCorrectionTime}
_{MsgGenericNumChange} _{MsgGenericMin} _{MsgGenericAvg} _{MsgGenericMax} $forall (sheetName, CorrectionInfo{ciSubmittors, ciSubmissions, ciAssigned, ciCorrected, ciMin, ciTot, ciMax}) <- Map.toList sheetMap
^{simpleLink (toWidget sheetName) (CSheetR tid ssh csh sheetName SSubsR)} $if groupsPossible #{ciSubmittors} #{ciSubmissions} $maybe ((splus,sfailed),_,_) <- Map.lookup sheetName assignment $if 0 < Set.size sfailed #{ciSubmissions - ciAssigned} (-#{show (Set.size splus)}, failed: #{show (Set.size sfailed)}) $elseif 0 < Set.size splus #{ciSubmissions - ciAssigned} (-#{show (Set.size splus)}) $else #{ciSubmissions - ciAssigned} $nothing #{ciSubmissions - ciAssigned} #{ciSubmissions - ciCorrected} #{showDiffDays ciMin} #{showAvgsDays ciTot ciCorrected} #{showDiffDays ciMax}

_{MsgCorrectionCorrectors}
_{MsgCorrector} _{MsgGenericAll} _{MsgCorProportion} _{MsgCorrectionTime} $forall shn <- sheetNames #{shn} $# ^{simpleLinkI (SomeMessage MsgMenuCorrectors) (CSheetR tid ssh csh shn SCorrR)}
_{MsgNrSubmissionsTotal} _{MsgNrSubmissionsNotCorrected} _{MsgCorDeficit} _{MsgGenericMin} _{MsgGenericAvg} _{MsgGenericMax} $forall _shn <- sheetNames _{MsgCorProportion} _{MsgNrSubmissionsTotalShort} _{MsgGenericNumChange} _{MsgNrSubmissionsNotCorrectedShort} _{MsgGenericAvg} $forall (CorrectionInfo{ciCorrector, ciSubmissions, ciCorrected, ciMin, ciTot, ciMax}) <- Map.elems corrMap $with (nameW,loadM) <- getCorrector ciCorrector
^{nameW} #{ciSubmissions} #{ciSubmissions - ciCorrected} $maybe deficit <- getCorrDeficit ciCorrector #{display deficit} #{showDiffDays ciMin} #{showAvgsDays ciTot ciCorrected} #{showDiffDays ciMax} $forall shn <- sheetNames $maybe SheetCorrector{sheetCorrectorLoad, sheetCorrectorState} <- Map.lookup shn loadM #{showCompactCorrectorLoad sheetCorrectorLoad sheetCorrectorState} $maybe CorrectionInfo{ciSubmissions,ciCorrected,ciTot} <- getCorrSheetStatus ciCorrector shn #{ciSubmissions} $maybe nrNew <- getCorrNewAssignment ciCorrector shn $# #{ciAssigned} `ciSubmissions` is here always identical to `ciAssigned` and also works for `ciCorrector == Nothing`. ciAssigned only useful in aggregate maps like `sheetMap` (+#{nrNew}) $nothing #{ciSubmissions - ciCorrected} #{showAvgsDays ciTot ciCorrected} $nothing $if 0 < length sheetNames
$forall shn <- sheetNames #{getLoadSum shn} ^{simpleLinkI (SomeMessage MsgMenuCorrectorsChange) (CSheetR tid ssh csh shn SCorrR)} ^{btnWdgt}

_{MsgAssignSubmissionsRandomWarning}