This commit is contained in:
SJost 2019-02-05 23:11:31 +01:00
parent 1eb751b5f0
commit 7a684f6cb6
3 changed files with 45 additions and 26 deletions

View File

@ -474,7 +474,7 @@ tagAccessPredicate AuthTime = APDB $ \route _ -> case route of
(Just (Entity _ Course{courseRegisterFrom, courseRegisterTo})) (Just (Entity _ Course{courseRegisterFrom, courseRegisterTo}))
| not registered | not registered
, maybe False (now >=) courseRegisterFrom -- Nothing => no registration allowed , maybe False (now >=) courseRegisterFrom -- Nothing => no registration allowed
, maybe True (now <=) courseRegisterTo -> return Authorized , maybe True (now <=) courseRegisterTo -> return Authorized
(Just (Entity _ Course{courseDeregisterUntil})) (Just (Entity _ Course{courseDeregisterUntil}))
| registered | registered
, maybe True (now <=) courseDeregisterUntil -> return Authorized , maybe True (now <=) courseDeregisterUntil -> return Authorized

View File

@ -444,25 +444,28 @@ getSheetNewR tid ssh csh = do
E.orderBy [E.desc (sheet E.^. SheetActiveFrom)] E.orderBy [E.desc (sheet E.^. SheetActiveFrom)]
E.limit 1 E.limit 1
return sheet return sheet
now <- liftIO getCurrentTime
let template = case lastSheets of let template = case lastSheets of
((Entity {entityVal=Sheet{..}}):_) -> Just $ SheetForm ((Entity {entityVal=Sheet{..}}):_) ->
{ sfName = stepTextCounterCI sheetName let addTime = addWeeks $ max 1 $ succ $ weekDiff sheetActiveTo now
, sfDescription = sheetDescription in Just $ SheetForm
, sfType = sheetType { sfName = stepTextCounterCI sheetName
, sfGrouping = sheetGrouping , sfDescription = sheetDescription
, sfVisibleFrom = addOneWeek <$> sheetVisibleFrom , sfType = sheetType
, sfActiveFrom = addOneWeek sheetActiveFrom , sfGrouping = sheetGrouping
, sfActiveTo = addOneWeek sheetActiveTo , sfVisibleFrom = addTime <$> sheetVisibleFrom
, sfSubmissionMode = sheetSubmissionMode , sfActiveFrom = addTime sheetActiveFrom
, sfUploadMode = sheetUploadMode , sfActiveTo = addTime sheetActiveTo
, sfSheetF = Nothing , sfSubmissionMode = sheetSubmissionMode
, sfHintFrom = addOneWeek <$> sheetHintFrom , sfUploadMode = sheetUploadMode
, sfHintF = Nothing , sfSheetF = Nothing
, sfSolutionFrom = addOneWeek <$> sheetSolutionFrom , sfHintFrom = addTime <$> sheetHintFrom
, sfSolutionF = Nothing , sfHintF = Nothing
, sfMarkingF = Nothing , sfSolutionFrom = addTime <$> sheetSolutionFrom
, sfMarkingText = sheetMarkingText , sfSolutionF = Nothing
} , sfMarkingF = Nothing
, sfMarkingText = sheetMarkingText
}
_other -> Nothing _other -> Nothing
let action newSheet = -- More specific error message for new sheet could go here, if insertUnique returns Nothing let action newSheet = -- More specific error message for new sheet could go here, if insertUnique returns Nothing
insertUnique $ newSheet insertUnique $ newSheet

View File

@ -5,7 +5,8 @@ module Handler.Utils.DateTime
, getTimeLocale, getDateTimeFormat , getTimeLocale, getDateTimeFormat
, validDateTimeFormats, dateTimeFormatOptions , validDateTimeFormats, dateTimeFormatOptions
, formatTimeMail , formatTimeMail
, addOneWeek , addOneWeek, addWeeks
, weekDiff
) where ) where
import Import import Import
@ -14,7 +15,7 @@ import Data.Time.Zones
import qualified Data.Time.Zones as TZ import qualified Data.Time.Zones as TZ
import Data.Time hiding (formatTime, localTimeToUTC, utcToLocalTime) import Data.Time hiding (formatTime, localTimeToUTC, utcToLocalTime)
import Data.Time.Clock (addUTCTime,nominalDay) -- import Data.Time.Clock (addUTCTime,nominalDay)
import qualified Data.Time.Format as Time import qualified Data.Time.Format as Time
import Data.Set (Set) import Data.Set (Set)
@ -132,7 +133,22 @@ dateTimeFormatOptions sel = do
addOneWeek :: UTCTime -> UTCTime addOneWeek :: UTCTime -> UTCTime
addOneWeek = addUTCTime (7 * nominalDay) addOneWeek = addWeeks 1
addWeeks :: Integer -> UTCTime -> UTCTime
addWeeks n utct = utct { utctDay = newDay }
where
oldDay = utctDay utct
-- newDay = addGregorianDurationRollOver $ stimes n calendarWeek -- only available in newer version 1.9 of Data.Time.Calendar
newDay = addDays (7*n) oldDay
weekDiff :: UTCTime -> UTCTime -> Integer
-- ^ Difference between times, rounded down to weeks
weekDiff old new = dayDiff `div` 7
where
dayOld = utctDay old
dayNew = utctDay new
dayDiff = diffDays dayNew dayOld
-- addOneTerm? -> Move Handler.Utils.DateTime -- addOneTerm? -> Move Handler.Utils.DateTime