diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/messages/uniworx/categories/qualification/de-de-formal.msg index 14ea89611..90efbf2db 100644 --- a/messages/uniworx/categories/qualification/de-de-formal.msg +++ b/messages/uniworx/categories/qualification/de-de-formal.msg @@ -10,6 +10,7 @@ TableQualificationCountActiveTooltip: Anzahl Personen mit momentan gültiger Qua TableQualificationCountTotal: Gesamt TableLmsUser: Prüfling TableLmsIdent: Identifikation +TableLmsElearning: E-Lernen TableLmsPin: E-Lernen Pin TableLmsResetPin: Pin zurücksetzen? TableLmsDelete: Löschen? diff --git a/messages/uniworx/categories/qualification/en-eu.msg b/messages/uniworx/categories/qualification/en-eu.msg index 988f43c6b..b321ffbbd 100644 --- a/messages/uniworx/categories/qualification/en-eu.msg +++ b/messages/uniworx/categories/qualification/en-eu.msg @@ -4,13 +4,14 @@ QualificationDescription: Description QualificationValidDuration: Validity period QualificationAuditDuration: Audit log keept QualificationRefreshWithin: Refresh within -QualificationElearningStart: Start e-learning automaticallyTableLmsUser: Examinee +QualificationElearningStart: Start e-learning automatically TableQualificationCountActive: Active TableQualificationCountActiveTooltip: Number of currently valid qualifcation holders TableQualificationCountTotal: Total TableLmsUser: Examinee TableLmsIdent: Identifier TableLmsPin: E-learning pin +TableLmsElearning: E-learning TableLmsResetPin: Reset pin? TableLmsDelete: Delete? TableLmsStaff: Staff? diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/messages/uniworx/utils/table_column/de-de-formal.msg index e91267835..7b4b75b64 100644 --- a/messages/uniworx/utils/table_column/de-de-formal.msg +++ b/messages/uniworx/utils/table_column/de-de-formal.msg @@ -61,4 +61,5 @@ SelectColumn: Auswahl CsvExport: CSV-Export TableProportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%) TableProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'} -TableExamFinished: Ergebnisse sichtbar ab \ No newline at end of file +TableExamFinished: Ergebnisse sichtbar ab +TableDiffDaysTooltip: Zeitspanne nach ISO 8601. Beispiel: "P2Y3M4D" ist eine Zeitspanne von 2 Jahren, 3 Monaten und 4 Tagen. \ No newline at end of file diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/messages/uniworx/utils/table_column/en-eu.msg index 5913fddca..b0adcf737 100644 --- a/messages/uniworx/utils/table_column/en-eu.msg +++ b/messages/uniworx/utils/table_column/en-eu.msg @@ -61,4 +61,5 @@ SelectColumn: Selection CsvExport: CSV export TableProportion c of' prop: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%) TableProportionNoRatio c of': #{c}/#{of'} -TableExamFinished: Results visible from \ No newline at end of file +TableExamFinished: Results visible from +TableDiffDaysTooltip: Duration given according to ISO 8601. Example: "P2Y3M4D" is a period of 2 years, 3 months and 4 days. \ No newline at end of file diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index d834fbced..2f90ebfe7 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -85,23 +85,34 @@ mkLmsAllTable = do in anchorCell (LmsR (qualificationSchool quali) qsh) $ toWgt qnm , sortable Nothing (i18nCell MsgQualificationDescription) $ \(view resultAllQualification -> quali) -> maybeCell (qualificationDescription quali) markupCellLargeModal + , sortable Nothing (i18nCell MsgQualificationValidDuration & cellTooltip MsgTableDiffDaysTooltip) $ + foldMap (textCell . formatCalendarDiffDays . fromMonths) . view (resultAllQualification . _qualificationValidDuration) + , sortable Nothing (i18nCell MsgQualificationRefreshWithin & cellTooltip MsgTableDiffDaysTooltip) $ + foldMap (textCell . formatCalendarDiffDays ) . view (resultAllQualification . _qualificationRefreshWithin) + -- , sortable Nothing (i18nCell MsgQualificationRefreshWithin) $ foldMap textCell . view (resultAllQualification . _qualificationRefreshWithin . to formatCalendarDiffDays) -- does not work, since there is a maybe in between + , sortable (Just "qelearning") (i18nCell MsgTableLmsElearning & cellTooltip MsgQualificationElearningStart) + $ tickmarkCell . view (resultAllQualification . _qualificationElearningStart) , sortable Nothing (i18nCell MsgTableQualificationCountActive & cellTooltip MsgTableQualificationCountActiveTooltip) $ \(view resultAllQualificationActive -> n) -> wgtCell $ word2widget n - , sortable Nothing (i18nCell MsgTableQualificationCountTotal) $ \(view resultAllQualificationTotal -> n) -> wgtCell $ word2widget n + , sortable Nothing (i18nCell MsgTableQualificationCountTotal) $ wgtCell . word2widget . view resultAllQualificationTotal + -- \(view resultAllQualificationTotal -> n) -> wgtCell $ word2widget n ] dbtSorting = mconcat [ sortSchool $ to (E.^. QualificationSchool) - , singletonMap "qshort" $ SortColumn (E.^. QualificationShorthand) - , singletonMap "qname" $ SortColumn (E.^. QualificationName) + , singletonMap "qshort" $ SortColumn (E.^. QualificationShorthand) + , singletonMap "qname" $ SortColumn (E.^. QualificationName) + , singletonMap "qelearning" $ SortColumn (E.^. QualificationElearningStart) ] dbtFilter = mconcat [ fltrSchool $ to (E.^. QualificationSchool) + , singletonMap "qelearning" . FilterColumn $ E.mkExactFilter (E.^. QualificationElearningStart) ] dbtFilterUI = mconcat [ - fltrSchoolUI + fltrSchoolUI + , \mPrev -> prismAForm (singletonFilter "qelearning" . maybePrism _PathPiece) mPrev $ aopt (hoistField lift checkBoxField) (fslI MsgTableLmsElearning) ] dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } dbtParams = def diff --git a/src/Handler/Utils/DateTime.hs b/src/Handler/Utils/DateTime.hs index 2ce9a0a02..e04a8e455 100644 --- a/src/Handler/Utils/DateTime.hs +++ b/src/Handler/Utils/DateTime.hs @@ -5,7 +5,7 @@ module Handler.Utils.DateTime , localTimeToUTC, TZ.LocalToUTCResult(..), localTimeToUTCSimple , toTimeOfDay , toMidnight, beforeMidnight, toMidday, toMorning - , formatDiffDays + , formatDiffDays, formatCalendarDiffDays , formatTime' , formatTime, formatTimeW, formatTimeMail , formatTimeRange, formatTimeRangeW, formatTimeRangeMail @@ -216,6 +216,8 @@ formatDiffDays t inHours = tshow $ convertBy nominalHour inMinutes = tshow $ convertBy nominalMinute +formatCalendarDiffDays :: CalendarDiffDays -> Text +formatCalendarDiffDays = pack . iso8601Show setYear :: Integer -> Day -> Day setYear year date = fromGregorian year m d diff --git a/src/Utils/DateTime.hs b/src/Utils/DateTime.hs index a5c013b4a..8df9cc792 100644 --- a/src/Utils/DateTime.hs +++ b/src/Utils/DateTime.hs @@ -13,6 +13,7 @@ module Utils.DateTime , minNominalYear, avgNominalYear , diffMinute, diffHour, diffDay , module Zones + , fromMonths , day ) where @@ -25,9 +26,11 @@ import Data.Time.Zones as Zones (TZ) import Data.Time.Zones.TH as Zones (includeSystemTZ) import Data.Time.Zones (localTimeToUTCTZ, timeZoneForUTCTime) import Data.Time.Format (FormatTime) +import Data.Time.Format.Instances () import Data.Time.Clock.System (systemEpochDay) import qualified Data.Time.Format.ISO8601 as Time import qualified Data.Time.Format as Time +import Data.Time.Calendar (CalendarDiffDays, calendarMonth, scaleCalendarDiffDays) import qualified Data.List.NonEmpty as NonEmpty @@ -43,8 +46,6 @@ import Database.Persist.Sql (PersistFieldSql(..)) import Utils.PathPiece -import Data.Time.Format.Instances () - import Algebra.Lattice import Algebra.Lattice.Ordered @@ -160,6 +161,13 @@ diffMinute = 60 diffHour = 3600 diffDay = 86400 +---------------------- +-- CalendarDiffDays -- +---------------------- + +fromMonths :: Word -> CalendarDiffDays +fromMonths m = scaleCalendarDiffDays (toInteger m) calendarMonth + --------- -- Day -- ---------