diff --git a/src/Handler/Exam/AutoOccurrence.hs b/src/Handler/Exam/AutoOccurrence.hs index 983830101..482f2d550 100644 --- a/src/Handler/Exam/AutoOccurrence.hs +++ b/src/Handler/Exam/AutoOccurrence.hs @@ -71,12 +71,9 @@ examAutoOccurrenceNudgeForm occId protoForm html = do cID <- encrypt occId (btnRes, wgt) <- identifyForm (FIDExamAutoOccurrenceNudge $ ciphertext cID) (buttonForm' [BtnExamAutoOccurrenceNudgeUp, BtnExamAutoOccurrenceNudgeDown]) html oldDataRes <- globalPostParamField PostExamAutoOccurrencePrevious secretJsonField - liftIO $ do - putStrLn "\n\nnudge" - print $ eaocNudge . eaofConfig <$> oldDataRes oldDataId <- newIdent - let protoForm' = fromMaybe def $ oldDataRes <|> protoForm + let protoForm' = fromMaybe def $ protoForm <|> oldDataRes genForm btn = protoForm' & _eaofConfig . _eaocNudge %~ Map.insertWith (+) occId n where n = case btn of BtnExamAutoOccurrenceNudgeUp -> 1 @@ -93,7 +90,7 @@ examAutoOccurrenceIgnoreRoomsForm occId protoForm html = do oldDataRes <- globalPostParamField PostExamAutoOccurrencePrevious secretJsonField oldDataId <- newIdent - let protoForm' = fromMaybe def $ oldDataRes <|> protoForm + let protoForm' = fromMaybe def $ protoForm <|> oldDataRes genForm btn = protoForm' & _eaofConfig . _eaocIgnoreRooms %~ action where action EAOIRAutomatic = EAOIRManual {eaoirmIgnored=Set.empty, eaoirmSorted=True} @@ -132,13 +129,15 @@ postEAutoOccurrenceR tid ssh csh examn = do ((calculateRes, _), _) <- runFormPost $ examAutoOccurrenceCalculateForm def - nudgeRes <- sequence . flip Map.fromSet (setOf (folded . _entityKey) occurrences) $ \occId -> - runFormPost $ examAutoOccurrenceNudgeForm occId (formResult' calculateRes) - - ignoreRoomsRes <- sequence . flip Map.fromSet (setOf (folded . _entityKey) occurrences) $ \occId -> - runFormPost $ examAutoOccurrenceIgnoreRoomsForm occId (formResult' calculateRes) + (nudgeRes, ignoreRes) <- mdo + nudgeRes <- sequence . flip Map.fromSet (setOf (folded . _entityKey) occurrences) $ \occId -> + runFormPost $ examAutoOccurrenceNudgeForm occId (formResult' . asum $ calculateRes : nudgeRes ^.. ifolded . ifiltered (\occId' _ -> occId' /= occId) . _1 . _1 ++ ignoreRes ^.. folded . _1 . _1) + ignoreRes <- sequence . flip Map.fromSet (setOf (folded . _entityKey) occurrences) $ \occId -> + runFormPost $ examAutoOccurrenceIgnoreRoomsForm occId (formResult' . asum $ calculateRes : nudgeRes ^.. folded . _1 . _1 ++ ignoreRes ^.. ifolded . ifiltered (\occId' _ -> occId' /= occId) . _1 . _1) + return $ (nudgeRes, ignoreRes) - let calculateRes' = asum $ calculateRes : nudgeRes ^.. folded . _1 . _1 ++ ignoreRoomsRes ^.. folded . _1 . _1 + + let calculateRes' = asum $ calculateRes : nudgeRes ^.. folded . _1 . _1 ++ ignoreRes ^.. folded . _1 . _1 calcResult <- formResultMaybe calculateRes' $ \ExamAutoOccurrenceCalculateForm{..} -> runDB $ do participants <- E.select . E.from $ \(registration `E.InnerJoin` user) -> do @@ -189,7 +188,7 @@ postEAutoOccurrenceR tid ssh csh examn = do , formAttrs = [("class", "buttongroup")] } - let ignoreRoomWgt = ignoreRoomsRes <&> \((_, ignoreRoomsView), ignoreRoomsEncoding) -> + let ignoreRoomWgt = ignoreRes <&> \((_, ignoreRoomsView), ignoreRoomsEncoding) -> wrapForm ignoreRoomsView def { formAction = Just . SomeRoute $ CExamR tid ssh csh examn EAutoOccurrenceR , formEncoding = ignoreRoomsEncoding