diff --git a/messages/uniworx/categories/user/de-de-formal.msg b/messages/uniworx/categories/user/de-de-formal.msg index b11ff586a..a3c630c46 100644 --- a/messages/uniworx/categories/user/de-de-formal.msg +++ b/messages/uniworx/categories/user/de-de-formal.msg @@ -94,6 +94,7 @@ UserHijack: Sitzung übernehmen UserAddSupervisor: Ansprechpartner hinzufügen UserSetSupervisor: Ansprechpartner ersetzen UserRemoveSupervisor: Alle Ansprechpartner entfernen +UserIsSupervisor: Ist Ansprechpartner AuthKindLDAP: Fraport AG Kennung AuthKindPWHash: FRADrive Kennung AuthKindNoLogin: Kein Login möglich diff --git a/messages/uniworx/categories/user/en-eu.msg b/messages/uniworx/categories/user/en-eu.msg index 9b33bfdc7..10c42830d 100644 --- a/messages/uniworx/categories/user/en-eu.msg +++ b/messages/uniworx/categories/user/en-eu.msg @@ -94,6 +94,7 @@ UserHijack: Hijack session UserAddSupervisor: Add supervisor UserSetSupervisor: Replace supervisors UserRemoveSupervisor: Set to unsupervised +UserIsSupervisor: Is supervisor AuthKindLDAP: Fraport AG account AuthKindPWHash: FRADrive account AuthKindNoLogin: No login diff --git a/src/Handler/Profile.hs b/src/Handler/Profile.hs index 5c2acdd0a..39730ffd5 100644 --- a/src/Handler/Profile.hs +++ b/src/Handler/Profile.hs @@ -370,7 +370,7 @@ validateSettings User{..} = do userPrefersPostal' <- use _stgPrefersPostal guardValidation MsgUserPrefersPostalInvalid $ - not $ userPrefersPostal' && postalNotSet + not $ userPrefersPostal' && (postalNotSet || isJust userCompanyDepartment) userPinPassword' <- use _stgPinPassword let pinBad = validCmdArgument =<< userPinPassword' diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index f5ae958e4..bfeef50a7 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -314,10 +314,15 @@ postUsersR = do ) , ( "avs-number", FilterColumn $ E.mkExistsFilter $ \user criterion -> E.from $ \usrAvs -> -- do - E.where_ $ usrAvs E.^. UserAvsUser E.==. user E.^.UserId + E.where_ $ user E.^. UserId E.==. usrAvs E.^. UserAvsUser E.&&. ((E.val criterion :: E.SqlExpr (E.Value (CI Text))) E.==. (E.explicitUnsafeCoerceSqlExprValue "citext" (usrAvs E.^. UserAvsNoPerson) :: E.SqlExpr (E.Value (CI Text))) ) ) + , ( "is-supervisor", FilterColumn $ \user criterion -> case criterion of + Last (Just True) -> E.exists . E.from $ \usrSpr -> E.where_ $ user E.^. UserId E.==. usrSpr E.^. UserSupervisorSupervisor + Last (Just False) -> E.notExists . E.from $ \usrSpr -> E.where_ $ user E.^. UserId E.==. usrSpr E.^. UserSupervisorSupervisor + _ -> E.val True :: E.SqlExpr (E.Value Bool) + ) ] , dbtFilterUI = \mPrev -> mconcat [ prismAForm (singletonFilter "user-search") mPrev $ aopt textField (fslI MsgName) @@ -329,6 +334,7 @@ postUsersR = do , prismAForm (singletonFilter "company-department" ) mPrev $ aopt textField (fslI MsgCompanyDepartment) , prismAForm (singletonFilter "user-company") mPrev $ aopt textField (fslI MsgTableCompany) , prismAForm (singletonFilter "user-supervisor") mPrev $ aopt textField (fslI MsgTableSupervisor) + , prismAForm (singletonFilter "is-supervisor" . maybePrism _PathPiece) mPrev $ aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgUserIsSupervisor) , prismAForm (singletonFilter "auth-ldap" . maybePrism _PathPiece) mPrev $ aopt (lift `hoistField` selectFieldList [(MsgAuthPWHash "", False), (MsgAuthLDAP, True)]) (fslI MsgAuthMode) , prismAForm (singletonFilter "school") mPrev $ aopt (lift `hoistField` selectFieldList schoolOptions) (fslI MsgCourseSchool) , prismAForm (singletonFilter "ldap-sync" . maybePrism _PathPiece) mPrev $ aopt utcTimeField (fslI MsgLdapSyncedBefore)