diff --git a/src/Handler/Utils/DateTime.hs b/src/Handler/Utils/DateTime.hs index cfe920688..754110bdb 100644 --- a/src/Handler/Utils/DateTime.hs +++ b/src/Handler/Utils/DateTime.hs @@ -62,7 +62,7 @@ localTimeToUTC = TZ.localTimeToUTCFull appTZ localTimeToUTCSimple :: LocalTime -> UTCTime localTimeToUTCSimple = TZ.localTimeToUTCTZ appTZ --- | Local midnight of given day +-- | Local midnight of given day; use Utils.DateTime.utctDayMidnight :: Day -> UTCTime instead to avoid Timezone conversion! toMidnight :: Day -> UTCTime toMidnight = toTimeOfDay 0 0 0 diff --git a/src/Handler/Utils/Qualification.hs b/src/Handler/Utils/Qualification.hs index 3f43d53d0..a0f4fb706 100644 --- a/src/Handler/Utils/Qualification.hs +++ b/src/Handler/Utils/Qualification.hs @@ -17,7 +17,6 @@ import qualified Data.Text as Text import qualified Database.Esqueleto.Experimental as E -- might need TypeApplications Lang-Pragma import qualified Database.Esqueleto.Utils as E -import Handler.Utils.DateTime (toMidnight) import Handler.Utils.Widgets (statusHtml) statusQualificationBlock :: Bool -> Html @@ -152,7 +151,7 @@ upsertQualificationUser qualificationUserQualification qualificationUserLastRef QualificationUser { qualificationUserFirstHeld = qualificationUserLastRefresh , qualificationUserScheduleRenewal = fromMaybe True mbScheduleRenewal - , qualificationUserLastNotified = toMidnight qualificationUserLastRefresh + , qualificationUserLastNotified = utctDayMidnight qualificationUserLastRefresh , .. } ( diff --git a/src/Jobs/Handler/LMS.hs b/src/Jobs/Handler/LMS.hs index 7ab8cfa27..c29f09ef2 100644 --- a/src/Jobs/Handler/LMS.hs +++ b/src/Jobs/Handler/LMS.hs @@ -410,7 +410,7 @@ dispatchJobLmsResults qid = JobHandlerAtomic act update luid [ LmsUserStatus =. Just LmsSuccess - , LmsUserStatusDay =. Just (toMidnight lmsResultSuccess) + , LmsUserStatusDay =. Just (utctDayMidnight lmsResultSuccess) , LmsUserReceived =. Just lmsResultTimestamp ] return Nothing @@ -422,7 +422,7 @@ dispatchJobLmsResults qid = JobHandlerAtomic act audit TransactionLmsSuccess -- always log success, since this is only transmitted once { transactionQualification = qid , transactionLmsIdent = lmsUserIdent - , transactionLmsDay = toMidnight lmsResultSuccess + , transactionLmsDay = utctDayMidnight lmsResultSuccess , transactionLmsUser = lmsUserUser , transactionNote = note , transactionReceived = lmsResultTimestamp diff --git a/src/Model/Types/Lms.hs b/src/Model/Types/Lms.hs index 951b001d3..48828607c 100644 --- a/src/Model/Types/Lms.hs +++ b/src/Model/Types/Lms.hs @@ -159,9 +159,6 @@ instance Csv.FromField LmsTimestamp where parseField i = do s <- Csv.parseField i d <- Time.parseTimeM True Time.defaultTimeLocale lmsTimestampFormat s - <|> (toMidnight <$> Time.parseTimeM True Time.defaultTimeLocale lmsDayFormat s) + <|> (utctDayMidnight <$> Time.parseTimeM True Time.defaultTimeLocale lmsDayFormat s) <|> iso8601ParseM s -- Know-How AG considers supplying iso8601 dates in the future return $ LmsTimestamp d - where - toMidnight :: Day -> UTCTime - toMidnight d = UTCTime { utctDay = d, utctDayTime = toEnum 0 } diff --git a/src/Utils/DateTime.hs b/src/Utils/DateTime.hs index fb08fa474..27ba25ecb 100644 --- a/src/Utils/DateTime.hs +++ b/src/Utils/DateTime.hs @@ -19,6 +19,7 @@ module Utils.DateTime , diffMinute, diffHour, diffDay , module Zones , day + , utctDayMidnight ) where import ClassyPrelude.Yesod hiding (lift, Proxy(..)) @@ -181,3 +182,7 @@ day = QuasiQuoter{..} quoteType = error "day used as type" quoteDec = error "day used as declaration" quoteExp dStr = maybe (fail $ "Could not parse ISO8601 day: “" <> dStr <> "”") (lift :: Day -> Q Exp) $ Time.iso8601ParseM dStr + +-- | use Handler.Utils.DateTime.toMidnight instead, if the local timezone is to be accounted for +utctDayMidnight :: Day -> UTCTime +utctDayMidnight d = UTCTime { utctDayTime = 0, utctDay = d }