chore(qualifications): workaround for pagination error

This commit is contained in:
Steffen Jost 2023-03-01 12:37:07 +01:00
parent a97c8168da
commit d8d7b8ccc5
7 changed files with 19 additions and 9 deletions

View File

@ -23,4 +23,5 @@ AvsLicenceRollfeld: Rollfeld Fahrberechtigung
PaginationSize: Einträge pro Seite PaginationSize: Einträge pro Seite
PaginationPage: Angzeigte Seite PaginationPage: Angzeigte Seite
PaginationError: Paginierung Parameter dürfen nicht negativ sein PaginationError: Paginierung Parameter dürfen nicht negativ sein
PaginationWorkaround n@Int64: Hinweis: Die Tabelle ist momentan auf maximal #{n} Zeilen beschränkt aufgrund eines Programmierfehlers in der Paginierungsautomatik. Wir hoffen dieses Problem möglichst bald in einer der kommenden Versionen lösen zu können.

View File

@ -23,4 +23,5 @@ AvsLicenceRollfeld: Maneuvering area driving licence
PaginationSize: Rows per Page PaginationSize: Rows per Page
PaginationPage: Page to show PaginationPage: Page to show
PaginationError: Pagination parameter must not be negative PaginationError: Pagination parameter must not be negative
PaginationWorkaround n: Note: the table is currently limited to at most #{n} rows due to an unfortunate problem with the pagination mechanic. We hope the resolve the issue soon in a following release.

View File

@ -43,7 +43,7 @@ data PaginationParameters = PaginationParameters { pagLimit, pagOffset:: Int64 }
deriving (Eq, Show) deriving (Eq, Show)
instance Default PaginationParameters where instance Default PaginationParameters where
def = PaginationParameters { pagLimit = 100, pagOffset = 0} def = PaginationParameters { pagLimit = 500, pagOffset = 0}
makePaginationForm :: Maybe PaginationParameters -> Form PaginationParameters makePaginationForm :: Maybe PaginationParameters -> Form PaginationParameters
makePaginationForm tmpl = identifyForm FIDPaginationWorkaround . validateForm validatePaginationForm $ \html -> makePaginationForm tmpl = identifyForm FIDPaginationWorkaround . validateForm validatePaginationForm $ \html ->

View File

@ -252,16 +252,17 @@ isExpiryAct :: QualificationTableActionData -> Bool -- const true, but this may
isExpiryAct QualificationActExpireData = True isExpiryAct QualificationActExpireData = True
isExpiryAct QualificationActUnexpireData = True isExpiryAct QualificationActUnexpireData = True
qualificationTableQuery :: QualificationId -> (_ -> E.SqlExpr (E.Value Bool)) -> QualificationTableExpr qualificationTableQuery :: QualificationId -> (_ -> E.SqlExpr (E.Value Bool)) -> Bool -> QualificationTableExpr
-> E.SqlQuery ( E.SqlExpr (Entity QualificationUser) -> E.SqlQuery ( E.SqlExpr (Entity QualificationUser)
, E.SqlExpr (Entity User) , E.SqlExpr (Entity User)
, E.SqlExpr (Maybe (Entity LmsUser)) , E.SqlExpr (Maybe (Entity LmsUser))
) )
qualificationTableQuery qid fltr (qualUser `E.InnerJoin` user `E.LeftOuterJoin` lmsUser) = do qualificationTableQuery qid fltr isAdmin (qualUser `E.InnerJoin` user `E.LeftOuterJoin` lmsUser) = do
E.on $ user E.^. UserId E.=?. lmsUser E.?. LmsUserUser E.on $ user E.^. UserId E.=?. lmsUser E.?. LmsUserUser
E.&&. E.val qid E.=?. lmsUser E.?. LmsUserQualification -- NOTE: condition was once erroneously placed in where-clause, which does not work E.&&. E.val qid E.=?. lmsUser E.?. LmsUserQualification -- NOTE: condition was once erroneously placed in where-clause, which does not work
E.on $ user E.^. UserId E.==. qualUser E.^. QualificationUserUser E.on $ user E.^. UserId E.==. qualUser E.^. QualificationUserUser
E.where_ $ fltr qualUser E.&&. (E.val qid E.==. qualUser E.^. QualificationUserQualification) E.where_ $ fltr qualUser E.&&. (E.val qid E.==. qualUser E.^. QualificationUserQualification)
when isAdmin $ E.limit 2000 -- WORKAROUND Pagination Bug
return (qualUser, user, lmsUser) return (qualUser, user, lmsUser)
@ -286,7 +287,7 @@ mkQualificationTable isAdmin (Entity qid quali) acts cols psValidator = do
dbtIdent :: Text dbtIdent :: Text
dbtIdent = "qualification" dbtIdent = "qualification"
fltrSvs = if isAdmin then const E.true else \quser -> quser E.^. QualificationUserUser `Ex.in_` E.vals svs fltrSvs = if isAdmin then const E.true else \quser -> quser E.^. QualificationUserUser `Ex.in_` E.vals svs
dbtSQLQuery q = qualificationTableQuery qid fltrSvs q dbtSQLQuery q = qualificationTableQuery qid fltrSvs isAdmin q
dbtRowKey = queryUser >>> (E.^. UserId) dbtRowKey = queryUser >>> (E.^. UserId)
dbtProj = dbtProjFilteredPostId dbtProj = dbtProjFilteredPostId
dbtColonnade = cols dbtColonnade = cols

View File

@ -10,6 +10,7 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
<p> <p>
Momentan werden aus Effizienzgründen alle Tabellen beschnitten und abgekürzt. # Momentan werden aus Effizienzgründen alle Tabellen beschnitten und abgekürzt. #
Auch die Funktion zum Import unbekannter Führerscheininhaber ist derzeit auf ein paar Hundert beschränkt. Auch die Funktion zum Import unbekannter Führerscheininhaber ist derzeit auf ein paar Hundert beschränkt.
$# _{MsgPaginationWorkaround (pagLimit pagResult) }
<section> <section>
<h2> <h2>

View File

@ -37,5 +37,8 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
#{icon IconNotificationError} #{icon IconNotificationError}
_{MsgLmsErrorNoRefreshElearning} _{MsgLmsErrorNoRefreshElearning}
^{lmsTable} <p>
_{MsgPaginationWorkaround nlimit}
<p>
^{lmsTable}

View File

@ -36,6 +36,9 @@ $# SPDX-License-Identifier: AGPL-3.0-or-later
<p> <p>
#{icon IconNotificationError} #{icon IconNotificationError}
_{MsgLmsErrorNoRefreshElearning} _{MsgLmsErrorNoRefreshElearning}
^{qualificationTable}
$if isAdmin
<p>
_{MsgPaginationWorkaround 2000}
<p>
^{qualificationTable}