diff --git a/messages/uniworx/categories/firm/de-de-formal.msg b/messages/uniworx/categories/firm/de-de-formal.msg index 70d351f25..8f27c24c4 100644 --- a/messages/uniworx/categories/firm/de-de-formal.msg +++ b/messages/uniworx/categories/firm/de-de-formal.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Steffen Jost +# SPDX-FileCopyrightText: 2023-24 Steffen Jost # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -15,11 +15,15 @@ FirmActionInfo: Betrifft alle Firmenangehörigen unter Ihrer Aufsicht. FirmActNotify: Mitteilung versenden FirmActResetSupervision: Ansprechpartner für alle Firmenangehörigen zurücksetzen FirmActResetSuperKeep: Bisherige Ansprechpartner der Firmenangehörigen zusätzlich beibehalten? +FirmActRemoveSupers: Alle rein firmenbezogenen Ansprechpartnerbeziehungen für diese Personen entfernen? FirmActResetMutualSupervision: Ansprechpartner beaufsichtigen sich gegenseitig +FirmActResetSupersKeepAll: Alle behalten +FirmActResetSupersRemoveAps: Nur Standardansprechpartner entfernen +FirmActResetSupersRemoveAll: Alle entfernen FirmActAddSupervisors: Ansprechpartner hinzufügen FirmActAddSupersEmpty: Es konnten keine Ansprechpartner hinzugefügt werden FirmActAddSupersSet n@Int64 postal@(Maybe Bool): #{n} Standardansprechpartner geändert #{maybeBoolMessage postal "" "und auf Briefversand geschaltet" "und Benachrichtigungen per Email gesetzt"}, aber nicht nicht aktiviert. -RemoveSupervisors ndef@Int64 nact@Int64: #{ndef} Standard Ansprechpartner entfernt#{bool ", aber keine aktiven Ansprechpartnerbeziehungen wurden deaktiviert" (", " <> tshow nact <> " aktive Ansprechpartnerbeziehungen gelöscht") (nact > 0)} +RemoveSupervisors ndef@Int64: #{ndef} Standardansprechpartner entfernt. FirmActChangeContactUser: Kontaktinformationen von allen Firmenangehörigen ändern FirmActChangeContactFirm: Kontaktinformationen der Firma ändern FirmActChangeContactFirmInfo: Firmenkontaktinformationen werden nur für neue Firmenangehörige verwendet, für die sonst keine Kontaktinformationen vorliegen. @@ -33,7 +37,8 @@ FirmUserActRemove: Firmenassoziation entfernen FirmUserActMkSuper: Zum Firmenansprechpartner ernennen FirmUserActChangeDetailsResult n@Int64 t@Int64: Firmenassoziation von #{n}/#{t} #{pluralDE n "Firmenangehörigen" "Firmenangehörige"} wurden aktualisiert FirmUserActChangeResult n@Int64 t@Int64: Benachrichtigungseinstellung für #{n}/#{t} #{pluralDE n "Firmenangehörigen" "Firmenangehörige"} wurden geändert -FirmuserActRemoveResult uc@Int64 sup@Int64 sub@Int64: #{uc} #{pluralDE uc "Firmenassoziation" "Firmenassoziationen"} entfernt. #{noneMoreDE sup "" (tshow sup <> "Ansprechpartnerbeziehungen wegen entferntem Ansprechpartner gelöschtt. ")} #{noneMoreDE sub "" (tshow sup <> "Ansprechpartnerbeziehungen wegen entfernten Angesprochenen gelöscht.")} +FirmUserActRemoveResult uc@Int64: #{uc} #{pluralDE uc "Firmenassoziation" "Firmenassoziationen"} entfernt. +FirmRemoveSupervision sup@Int64 sub@Int64: #{noneMoreDE sup "" (tshow sup <> " Ansprechpartnerbeziehungen wegen entferntem Ansprechpartner gelöscht. ")} #{noneOneMoreDE sub "Keine Ansprechpartnerbeziehung" "Eine Ansprechpartnerbeziehung" (tshow sup <> " Ansprechpartnerbeziehungen")} wegen entferntem Angesprochenem gelöscht. FirmNewSupervisor: Neue individuelle Ansprechpartner hinzufügen FirmSetSupervisor: Existierende Ansprechpartner hinzufügen FirmSetSupersReport nusr@Int64 nspr@Int64 nrem@Int64: Für #{nusr} Firmenangehörige wurden #{nspr} individuelle Ansprechpartner eingetragen#{bool "." (" und " <> tshow nrem <> " individuelle Ansprechpartnerbeziehungen gelöscht.") (nrem >0)} @@ -42,7 +47,7 @@ FirmSuperActNotify: Mitteilung versenden FirmSuperActSwitchSuper: Standard Firmenansprechpartner abändern FirmSuperActSwitchSuperInfo: Betrifft keine firmenfremden Ansprechpartner und ändert keine aktiven individuellen Ansprechpartnerbeziehungen. Gegebenfalls im Anschluss die Funktion "Ansprechpartner auf Firmenstandard zurücksetzen" nutzen. FirmSuperActRMSuperDef: Firmenansprechpartner entfernen -FirmSuperActRMSuperActive: Auch aktive Ansprechpartnerbeziehungen innerhalb dieser Firma beenden +FirmSuperActRMSuperActive: Aktive Ansprechpartnerbeziehungen innerhalb dieser Firma beenden? FirmsNotification: Firmen E-Mail versenden FirmNotification fsh@CompanyShorthand: E-Mail an #{fsh} senden FirmsNotificationTitle: Firmen benachrichtigen diff --git a/messages/uniworx/categories/firm/en-eu.msg b/messages/uniworx/categories/firm/en-eu.msg index b1fb27b3f..fe4dbc045 100644 --- a/messages/uniworx/categories/firm/en-eu.msg +++ b/messages/uniworx/categories/firm/en-eu.msg @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Steffen Jost +# SPDX-FileCopyrightText: 2023-24 Steffen Jost # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -15,11 +15,15 @@ FirmActionInfo: Affects alle company associates under your supervision. FirmActNotify: Send message FirmActResetSupervision: Reset supervisors for all company associates FirmActResetSuperKeep: Additionally keep existing supervisors of company associates? +FirmActRemoveSupers: Terminate all company related supervisonships? FirmActResetMutualSupervision: Supervisors supervise each other +FirmActResetSupersKeepAll: Keep all +FirmActResetSupersRemoveAps: Remove default supervisors only +FirmActResetSupersRemoveAll: Remove all FirmActAddSupervisors: Add supervisors FirmActAddSupersEmpty: No supervisors added FirmActAddSupersSet n postal: #{n} default company supervisors changed #{maybeBoolMessage postal "" "and switched to postal notifications" "and switched to email notifications"}, but not yet activated. -RemoveSupervisors ndef nact: #{ndef} default supervisors removed#{bool ", but no active supervisions were deactivated" (" and " <> tshow nact <> " active supervisions terminated") (nact > 0)} +RemoveSupervisors ndef: #{ndef} default supervisors removed. FirmActChangeContactUser: Change contact data for all company associates FirmActChangeContactFirm: Change company contact data FirmActChangeContactFirmInfo: The company contact data is only used for new company associates that would habe no contact information of their own otherwise. @@ -33,7 +37,8 @@ FirmUserActRemove: Delete company association FirmUserActMkSuper: Mark as company supervisor FirmUserActChangeDetailsResult n t: #{n}/#{t} #{pluralENs n "company association"} updated FirmUserActChangeResult n t: Notification settings changed for #{n}/#{t} company #{pluralENs n "associate"} -FirmuserActRemoveResult uc sup sub: #{pluralENsN uc "Company association"} deleted. #{noneMoreEN sup "" ((pluralENsN sup "supervision") <> " removed due to eliminated supervisors.")} #{noneMoreEN sub "" ((pluralENsN sub "supervision") <> " removed due to eliminated supervisees.")} +FirmUserActRemoveResult uc: #{pluralENsN uc "Company association"} deleted. +FirmRemoveSupervision sup sub: #{noneMoreEN sup "" ((pluralENsN sup "supervision") <> " removed due to eliminated supervisors.")} #{noneMoreEN sub "No supervision" (pluralENsN sub "supervision")} removed due to eliminated supervisees. FirmNewSupervisor: Appoint new individual supervisors FirmSetSupervisor: Add existing supervisors FirmSetSupersReport nusr nspr nrem: #{nspr} individual supervisors set for #{nusr} company associates#{bool "." (" and " <> tshow nrem <> " other individual supervisions terminated.") (nrem >0)} @@ -42,7 +47,7 @@ FirmSuperActNotify: Send message FirmSuperActSwitchSuper: Change default company supervisor FirmSuperActSwitchSuperInfo: Does not affect company-external supervisors and does not change any active individual supervisions. Additionally use reset action, if desired. FirmSuperActRMSuperDef: Remove default supervisor -FirmSuperActRMSuperActive: Also remove active supervisions within this company +FirmSuperActRMSuperActive: Terminate active supervisions within this company? FirmsNotification: Send company notification e-mail FirmNotification fsh: Send e-mail to #{fsh} FirmsNotificationTitle: Company notification diff --git a/src/Handler/Firm.hs b/src/Handler/Firm.hs index b0086c847..e059888e9 100644 --- a/src/Handler/Firm.hs +++ b/src/Handler/Firm.hs @@ -742,29 +742,28 @@ embedRenderMessage ''UniWorX ''FirmUserAction id data FirmUserActionData = FirmUserActNotifyData | FirmUserActResetSupervisionData - { firmUserActResetKeepOldSupers :: Maybe Bool - -- , firmUserActResetMutualSupervision :: Maybe Bool + { firmUserActResetSupers :: Maybe Bool } | FirmUserActSetSupervisorData - { firmUserActSetSuperNames :: Maybe (Set Text) - , firmUserActSetSuperIds :: Maybe [UserId] - , firmUserActSetSuperReason :: Maybe Text - , firmUserActSetSuperReroute :: Bool - , firmUserActSetSuperKeep :: Bool + { firmUserActSetSuperNames :: Maybe (Set Text) + , firmUserActSetSuperIds :: Maybe [UserId] + , firmUserActSetSuperReason :: Maybe Text + , firmUserActSetSuperReroute :: Bool + , firmUserActResetSupers :: Maybe Bool } | FirmUserActMkSuperData - { firmUserActMkSuperReroute :: Maybe Bool } + { firmUserActMkSuperReroute :: Maybe Bool } | FirmUserActChangeDetailsData - { firmUserActDetailPriority :: Maybe Int - , firmUserActDetailReason :: Maybe Text + { firmUserActDetailPriority :: Maybe Int + , firmUserActDetailReason :: Maybe Text } | FirmUserActChangeContactData - { firmUserActPostalAddr :: Maybe StoredMarkup - , firmUserActUseCompanyPostal :: Maybe Bool - , firmUserActPostalPref :: Maybe Bool + { firmUserActPostalAddr :: Maybe StoredMarkup + , firmUserActUseCompanyPostal :: Maybe Bool + , firmUserActPostalPref :: Maybe Bool } | FirmUserActRemoveData - { firmUserActRemoveKeepSuper :: Bool + { firmUserActRemoveSupers :: Bool } deriving (Eq, Ord, Show, Generic) @@ -968,25 +967,24 @@ mkFirmUserTable isAdmin cid = do acts = mconcat [ guardMonoid isAdmin $ singletonMap FirmUserActNotify $ pure FirmUserActNotifyData , singletonMap FirmUserActResetSupervision $ FirmUserActResetSupervisionData - <$> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFirmActResetSuperKeep) (Just $ Just False) - -- <*> aopt checkBoxField (fslI MsgFirmActResetMutualSupervision) (Just $ Just True ) + <$> aopt (boolFieldCustom (SomeMessage MsgFirmActResetSupersRemoveAll) (SomeMessage MsgFirmActResetSupersRemoveAps) $ Just $ SomeMessage MsgFirmActResetSupersKeepAll) (fslI MsgFirmActResetSuperKeep) (Just $ Just False) , singletonMap FirmUserActSetSupervisor $ FirmUserActSetSupervisorData <$> aopt (textField & cfAnySeparatedSet) (fslI MsgFirmNewSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing <*> aopt supervisorsField (fslI MsgFirmSetSupervisor & setTooltip MsgMultiSelectTip) Nothing - <*> aopt (textField & cfStrip & addDatalist superReasons) (fslI MsgUserSupervisorReason & setTooltip MsgUserSupervisorReasonTooltip) Nothing - <*> areq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just False) - <*> areq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFirmActResetSuperKeep) (Just False) + <*> aopt (textField & cfStrip & addDatalist superReasons) (fslI MsgUserSupervisorReason & setTooltip MsgUserSupervisorReasonTooltip) Nothing + <*> areq boolField' (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just False) + <*> aopt (boolFieldCustom (SomeMessage MsgFirmActResetSupersRemoveAll) (SomeMessage MsgFirmActResetSupersRemoveAps) $ Just $ SomeMessage MsgFirmActResetSupersKeepAll) (fslI MsgFirmActResetSuperKeep) (Just $ Just False) , singletonMap FirmUserActMkSuper $ FirmUserActMkSuperData <$> aopt checkBoxField (fslI MsgTableIsDefaultReroute) (Just $ Just True) - , singletonMap FirmUserActChangeDetails $ FirmUserActChangeDetailsData - <$> aopt intField (fslI MsgCompanyUserPriority & setTooltip MsgCompanyUserPriorityTip) Nothing - <*> aopt (textField & cfStrip & addDatalist userReasons) (fslI MsgUserCompanyReason & setTooltip (SomeMessages [SomeMessage MsgUserCompanyReasonTooltip, SomeMessage MsgNullDeletes])) Nothing , singletonMap FirmUserActChangeContact $ FirmUserActChangeContactData <$> aopt htmlField (fslI MsgPostAddress & setTooltip (SomeMessages [SomeMessage MsgPostAddressTip, SomeMessage MsgUtilEmptyNoChangeTip])) Nothing <*> aopt boolField' (fslI MsgCompanyUserUseCompanyAddress & setTooltip MsgCompanyUserUseCompanyAddressTip) Nothing <*> aopt postalEmailField (fslI MsgFormFieldPostal & setTooltip MsgFormFieldPostalTip) Nothing + , singletonMap FirmUserActChangeDetails $ FirmUserActChangeDetailsData + <$> aopt intField (fslI MsgCompanyUserPriority & setTooltip MsgCompanyUserPriorityTip) Nothing + <*> aopt (textField & cfStrip & addDatalist userReasons) (fslI MsgUserCompanyReason & setTooltip (SomeMessages [SomeMessage MsgUserCompanyReasonTooltip, SomeMessage MsgNullDeletes])) Nothing , singletonMap FirmUserActRemove $ FirmUserActRemoveData - <$> areq (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFirmActResetSuperKeep) (Just False) + <$> areq boolField' (fslI MsgFirmActRemoveSupers) (Just True) ] dbtParams = DBParamsForm { dbParamsFormMethod = POST @@ -1053,6 +1051,10 @@ postFirmUsersR fsh = do -- return usr <*> mkFirmUserTable isAdmin cid + let resetSupers :: Maybe Bool -> NonEmpty UserId -> DB Int64 + resetSupers Nothing _ = return 0 + resetSupers (Just False) uids = deleteDefaultSupervisorsForUsers [] [] uids + resetSupers (Just True ) uids = deleteWhereCount [UserSupervisorUser <-. toList uids] formResult fusrRes $ \case (_, uids) | null uids -> addMessageI Error MsgUtilEmptyChoice (FirmUserActNotifyData , uids) -> do @@ -1060,9 +1062,7 @@ postFirmUsersR fsh = do redirect (FirmCommR fsh, [(toPathPiece GetRecipient, toPathPiece cID) | cID <- cuids]) (FirmUserActResetSupervisionData{..}, set2NonEmpty (error "Unexpected empty user list in getFirmUserR action handler.") -> uids) -> do -- set guaranteed to be non-empty due to first case clause runDB $ do - delSupers <- if firmUserActResetKeepOldSupers == Just False - then deleteDefaultSupervisorsForUsers [] [] uids - else return 0 + delSupers <- resetSupers firmUserActResetSupers uids newSupers <- addDefaultSupervisors Nothing cid uids addMessageI Info $ MsgFirmResetSupervision delSupers newSupers reloadKeepGetParams $ FirmUsersR fsh -- reload to reflect changes @@ -1081,8 +1081,7 @@ postFirmUsersR fsh = do
  • #{usr} |] in addMessageModal Error (i18n . MsgCourseParticipantsRegisterNotFoundInAvs $ length usersNotFound) (Right msgContent) - delSupers <- runDB - $ bool (deleteDefaultSupervisorsForUsers [cid] [] uids) (return 0) firmUserActSetSuperKeep + delSupers <- runDB $ resetSupers firmUserActResetSupers uids <* putMany [UserSupervisor s u firmUserActSetSuperReroute (Just cid) firmUserActSetSuperReason | u <- toList uids, s <- newSupers] addMessageI Success $ MsgFirmSetSupersReport nrUsers nrSupers delSupers reloadKeepGetParams $ FirmUsersR fsh -- reload to reflect changes @@ -1119,11 +1118,15 @@ postFirmUsersR fsh = do allok = bool Warning Success $ nrChanged == total addMessageI allok $ MsgFirmUserActChangeResult nrChanged total reloadKeepGetParams $ FirmUsersR fsh -- reload to reflect changes - (FirmUserActRemoveData{}, Set.toList -> uids) -> do - (nrUc, nrSuper, nrSubs) <- runDB $ deleteCompanyUser cid uids + (FirmUserActRemoveData{..}, Set.toList -> uids) -> do + let optRemove = if firmUserActRemoveSupers then id else const $ return 0 + (nrUc, nrSuper, nrSubs) <- runDB $ (,,) + <$> deleteWhereCount [UserCompanyCompany ==. cid, UserCompanyUser <-. uids] + <*> optRemove (deleteWhereCount [UserSupervisorCompany ==. Just cid, UserSupervisorSupervisor <-. uids]) + <*> optRemove (deleteWhereCount [UserSupervisorCompany ==. Just cid, UserSupervisorUser <-. uids]) let total = fromIntegral $ length uids - allok = bool Warning Success $ nrUc == total - addMessageI allok $ MsgFirmuserActRemoveResult nrUc nrSuper nrSubs + allok = bool Warning Success $ total == nrUc + addMessageI allok $ someMessages [MsgFirmUserActRemoveResult nrUc, MsgFirmRemoveSupervision nrSuper nrSubs] reloadKeepGetParams $ FirmUsersR fsh -- reload to reflect changes formFirmAction <- runFirmActionFormPost cid (FirmUsersR fsh) isAdmin [FirmActNotify, FirmActResetSupervision, FirmActAddSupervisors, FirmActChangeContactFirm, FirmActChangeContactUser] @@ -1153,7 +1156,7 @@ data FirmSuperActionData = FirmSuperActNotifyData , firmSuperActSwitchReroute :: Maybe Bool } | FirmSuperActRMSuperDefData - { firmSuperActRMSuperActive :: Maybe Bool } + { firmSuperActRMSuperActive :: Bool } deriving (Eq, Ord, Show, Generic) @@ -1296,11 +1299,11 @@ mkFirmSuperTable isAdmin cid = do acts = mconcat [ guardMonoid isAdmin $ singletonMap FirmSuperActNotify $ pure FirmSuperActNotifyData , singletonMap FirmSuperActSwitchSuper $ FirmSuperActSwitchSuperData - <$> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFirmSuperDefault) (Just $ Just True) - <*> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgTableIsDefaultReroute) Nothing + <$> aopt boolField' (fslI MsgFirmSuperDefault) (Just $ Just True) + <*> aopt boolField' (fslI MsgTableIsDefaultReroute) Nothing <* aformMessage msgSupervisorUnchanged , singletonMap FirmSuperActRMSuperDef $ FirmSuperActRMSuperDefData - <$> aopt checkBoxField (fslI MsgFirmSuperActRMSuperActive) (Just $ Just True) + <$> areq boolField' (fslI MsgFirmSuperActRMSuperActive) (Just True) ] dbtParams = DBParamsForm { dbParamsFormMethod = POST @@ -1344,19 +1347,14 @@ postFirmSupersR fsh = do formResult fsprRes $ \case (_, uids) | null uids -> addMessageI Error MsgUtilEmptyChoice (FirmSuperActRMSuperDefData{..}, Set.toList -> uids) -> do - (nrRmSuper,nrRmActual) <- runDB $ (,) + let optRemove = if firmSuperActRMSuperActive then id else const $ return 0 + (nrRmSuper,nrRmSupers,nrRmSubs) <- runDB $ (,,) <$> updateWhereCount [UserCompanyUser <-. uids, UserCompanyCompany ==. cid] [UserCompanySupervisor =. False, UserCompanySupervisorReroute =. False] - <*> if firmSuperActRMSuperActive /= Just True - then return 0 - else E.deleteCount $ do - spr <- E.from $ E.table @UserSupervisor - E.where_ $ spr E.^. UserSupervisorSupervisor `E.in_` E.vals uids - E.&&. E.exists (do - usr <- E.from $ E.table @UserCompany - E.where_ $ usr E.^. UserCompanyCompany E.==. E.val cid - E.&&. usr E.^. UserCompanyUser E.==. spr E.^. UserSupervisorUser - ) - addMessageI Info $ MsgRemoveSupervisors nrRmSuper nrRmActual + <*> optRemove (deleteWhereCount [UserSupervisorCompany ==. Just cid, UserSupervisorSupervisor <-. uids]) + <*> optRemove (deleteWhereCount [UserSupervisorCompany ==. Just cid, UserSupervisorUser <-. uids]) + let total = fromIntegral $ length uids + allok = bool Warning Success $ total == nrRmSuper + addMessageI allok $ someMessages [MsgRemoveSupervisors nrRmSuper, MsgFirmRemoveSupervision nrRmSupers nrRmSubs] reloadKeepGetParams $ FirmUsersR fsh -- reload to reflect changes (FirmSuperActSwitchSuperData{..}, Set.toList -> uids) -> do let (fltrSpr, changes) = case (firmSuperActSwitchSuper, firmSuperActSwitchReroute) of diff --git a/src/Handler/Qualification.hs b/src/Handler/Qualification.hs index 4d35ca154..e2934401d 100644 --- a/src/Handler/Qualification.hs +++ b/src/Handler/Qualification.hs @@ -543,7 +543,7 @@ postQualificationR sid qsh = do Ex.groupBy (qblock Ex.^. QualificationUserBlockReason) let countRows' :: Ex.SqlExpr (Ex.Value Int64) = Ex.countRows Ex.orderBy [Ex.desc countRows'] - Ex.limit 7 + Ex.limit 9 pure (qblock Ex.^. QualificationUserBlockReason) mkOption :: Ex.Value Text -> Option Text mkOption (Ex.unValue -> t) = Option{ optionDisplay = t, optionInternalValue = t, optionExternalValue = toPathPiece t } diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index 890f6fce7..ea60efdb2 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -191,18 +191,19 @@ postUsersR = do fmap (setOf $ folded . _Value . _Just) . Ex.select . Ex.distinct $ do usrc <- Ex.from $ Ex.table @UserSupervisor E.where_ $ E.isJust (usrc E.^. UserSupervisorReason) + Ex.limit 9 return $ usrc E.^. UserSupervisorReason acts :: Map UserAction (AForm Handler UserActionData) acts = mconcat [ singletonMap UserLdapSync $ pure UserLdapSyncData , singletonMap UserAvsSync $ pure UserAvsSyncData , singletonMap UserAddSupervisor $ UserAddSupervisorData - <$> apopt (textField & cfAnySeparatedSet) (fslI MsgTableSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing - <*> apopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just True) + <$> apopt (textField & cfAnySeparatedSet) (fslI MsgTableSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing + <*> apopt boolField' (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just False) <*> aopt (textField & cfStrip & addDatalist superReasons) (fslI MsgUserSupervisorReason & setTooltip MsgUserSupervisorReasonTooltip) Nothing , singletonMap UserSetSupervisor $ UserSetSupervisorData - <$> apopt (textField & cfAnySeparatedSet) (fslI MsgTableSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing - <*> apopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just True) + <$> apopt (textField & cfAnySeparatedSet) (fslI MsgTableSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing + <*> apopt boolField' (fslI MsgMailSupervisorReroute & setTooltip MsgMailSupervisorRerouteTooltip) (Just False) <*> aopt (textField & cfStrip & addDatalist superReasons) (fslI MsgUserSupervisorReason & setTooltip MsgUserSupervisorReasonTooltip) Nothing , singletonMap UserRemoveSupervisor $ pure UserRemoveSupervisorData , singletonMap UserRemoveSubordinates $ pure UserRemoveSubordinatesData diff --git a/src/Handler/Utils/Company.hs b/src/Handler/Utils/Company.hs index b3f428b83..86f88ef03 100644 --- a/src/Handler/Utils/Company.hs +++ b/src/Handler/Utils/Company.hs @@ -222,7 +222,8 @@ defaultSupervisorReasonFilter :: [Filter UserSupervisor] defaultSupervisorReasonFilter = [UserSupervisorReason ==. Nothing] ||. [UserSupervisorReason ==. Just (tshow SupervisorReasonCompanyDefault)] --- ||. [UserSupervisorReason <-. [Just $ tshow r | r <- [SupervisorReasonCompanyDefault, SupervisorReasonAvsSuperior]]] + ||. [UserSupervisorReason ==. Just (tshow SupervisorReasonAvsSuperior )] +-- ||. [UserSupervisorReason <-. Nothing : [Just $ tshow r | r <- [SupervisorReasonCompanyDefault, SupervisorReasonAvsSuperior]]] -- Does <-. work with Nothing? -- | remove supervisors for given users; maybe restricted to those linked to given companies or supervisors deleteDefaultSupervisorsForUsers :: [CompanyId] -> [UserId] -> NonEmpty UserId -> DB Int64 @@ -232,14 +233,6 @@ deleteDefaultSupervisorsForUsers cids sprs usrs = $ bcons (notNull sprs) (UserSupervisorSupervisor <-. sprs) $ (UserSupervisorUser <-. toList usrs) : defaultSupervisorReasonFilter --- | deletes user company association and all company related supervision --- WARNING: does not check for admin problems! -deleteCompanyUser :: CompanyId -> [UserId] -> DB (Int64, Int64, Int64) -deleteCompanyUser cid uids = (,,) - <$> deleteWhereCount [UserCompanyCompany ==. cid, UserCompanyUser <-. uids] - <*> deleteWhereCount ((UserSupervisorCompany ==. Just cid):(UserSupervisorSupervisor <-. uids) : defaultSupervisorReasonFilter) - <*> deleteWhereCount ((UserSupervisorCompany ==. Just cid):(UserSupervisorUser <-. uids) : defaultSupervisorReasonFilter) - -- | retrieve maximum company user priority fo a user getCompanyUserMaxPrio :: UserId -> DB Int getCompanyUserMaxPrio uid = do diff --git a/src/Jobs/Handler/SynchroniseAvs.hs b/src/Jobs/Handler/SynchroniseAvs.hs index 5651f9558..0e290328d 100644 --- a/src/Jobs/Handler/SynchroniseAvs.hs +++ b/src/Jobs/Handler/SynchroniseAvs.hs @@ -146,8 +146,7 @@ dispatchJobSynchroniseAvsLicences = JobHandlerException $ do -- when (synchLevel , avsLicenceSynchMaxChanges = maxChanges } <- getsYesod $ view _appAvsLicenceSynchConf - let -- TODO: enable a cron job by setting - procLic :: AvsLicence -> Bool -> Set AvsPersonId -> Handler () + let procLic :: AvsLicence -> Bool -> Set AvsPersonId -> Handler () procLic aLic up apids | n <- Set.size apids, n > 0 = let subtype = Text.cons (bool '↧' '↥' up) $ Text.singleton $ licence2char aLic diff --git a/templates/i18n/firm-supervisors/de-de-formal.hamlet b/templates/i18n/firm-supervisors/de-de-formal.hamlet index ddd921f87..2f7af42c8 100644 --- a/templates/i18n/firm-supervisors/de-de-formal.hamlet +++ b/templates/i18n/firm-supervisors/de-de-formal.hamlet @@ -5,10 +5,15 @@ $# $# SPDX-License-Identifier: AGPL-3.0-or-later
    - Bitte beachten, dass Ansprechpartner-Beziehung unabhängig von Firmenzugehörigkeit zwischen Einzelpersonen bestehen. - Daraus folgt zum Beispiel, dass wenn x ein Standard-Ansprechpartner für Firma a ist - und wenn y sowohl Firma a als auch b angehört, - dass dann x als firmenfremd in der Liste der Ansprechpartner von Firma b angezeigt wird. +

    + Bitte beachten: Ansprechpartner-Beziehung bestehen unabhängig von Firmenzugehörigkeit zwischen Einzelpersonen! # + +

    + Daraus folgt zum Beispiel, dass wenn x ein Standard-Ansprechpartner für Firma a ist # + und wenn y sowohl Firma a als auch b angehört, # + dass x als firmenfremd in der Liste der Ansprechpartner von Firma b angezeigt wird. # + Dies kann hier mit der Aktion "Firmenansprechpartner entfernen" nicht geändert werden, # + da die Ansprechpartnerbeziehung ja über eine andere Firma weiter existiert. ^{firmContactInfo} diff --git a/templates/i18n/firm-supervisors/en-eu.hamlet b/templates/i18n/firm-supervisors/en-eu.hamlet index 09a6a37c5..c8033a873 100644 --- a/templates/i18n/firm-supervisors/en-eu.hamlet +++ b/templates/i18n/firm-supervisors/en-eu.hamlet @@ -5,9 +5,12 @@ $# $# SPDX-License-Identifier: AGPL-3.0-or-later

    - Note that supervision is company independent. - For example, if x is a regular supervisor for company a and y belongs to companies a and b, - then x will be listed as a foreign supervisor for company b. +

    + Note that supervisionship is company independent! # +

    + For example, if x is a regular supervisor for company a and y belongs to companies a and b, # + then x will be listed as a foreign supervisor for company b. # + This cannot be changed through action "Remove default supervisor" here, since the external supervisionship persists. ^{firmContactInfo}