diff --git a/messages/uniworx/categories/admin/de-de-formal.msg b/messages/uniworx/categories/admin/de-de-formal.msg index 922d58f4c..3138ac164 100644 --- a/messages/uniworx/categories/admin/de-de-formal.msg +++ b/messages/uniworx/categories/admin/de-de-formal.msg @@ -132,8 +132,8 @@ AdminProblemsReopened n@Int: #{pluralDEeN n "Admin Problem"} erneut eröffnet AdminProblemNewCompany: Neue Firma über AVS automatisch erstellt; prüfen und ggf. Standardansprechpartner eintragen AdminProblemSupervisorNewCompany b@Bool: Standardansprechpartner #{boolText mempty "mit Standardumleitung" b} wechselte zu neuer Firma AdminProblemSupervisorLeftCompany b@Bool: Einziger Standardansprechpartner #{boolText mempty "mit Standardumleitung" b} dieses Fahrers wechselte zu neuer Firma -AdminProblemCompanySuperiorChange: Neuer firmenweiter Vorgesetzer. -AdminProblemCompanySuperiorPrevious: Ehemaliger Vorgesetzer: +AdminProblemCompanySuperiorChange: Neuer firmenweiter Vorgesetzter. +AdminProblemCompanySuperiorPrevious: Ehemaliger Vorgesetzter: AdminProblemNewlyUnsupervised: Fahrer hat keinen Firmenansprechpartner mehr nach AVS Firmenwechsel zu Firma AdminProblemUser: Betroffener ProblemTableMarkSolved: Als erledigt markieren diff --git a/messages/uniworx/categories/firm/de-de-formal.msg b/messages/uniworx/categories/firm/de-de-formal.msg index 486953843..8ea0ee728 100644 --- a/messages/uniworx/categories/firm/de-de-formal.msg +++ b/messages/uniworx/categories/firm/de-de-formal.msg @@ -60,6 +60,7 @@ FirmSupervisorIndependent: Ansprechpartner ohne jegliche Firmenzugehörigkeit FirmEmployeeOf fsh@CompanyShorthand: Firmenangehörige #{fsh} NoCompanySelected: Bitte wählen Sie mindestens eine Firma aus. TableIsDefaultSupervisor: Standardansprechpartner +TableSuperior: Vorgesetzter TableIsDefaultReroute: Standardumleitung FormFieldPostal: Benachrichtigungseinstellung FormFieldPostalTip: Gilt für alle Benachrichtigungen an diese Person, nicht nur für Umleitungen an diesen Ansprechpartner diff --git a/messages/uniworx/categories/firm/en-eu.msg b/messages/uniworx/categories/firm/en-eu.msg index 0ece590dd..4f7ce71fc 100644 --- a/messages/uniworx/categories/firm/en-eu.msg +++ b/messages/uniworx/categories/firm/en-eu.msg @@ -60,6 +60,7 @@ FirmSupervisorIndependent: Independent supervisors FirmEmployeeOf fsh@CompanyShorthand: #{fsh} associated users NoCompanySelected: Select at least one company, please. TableIsDefaultSupervisor: Default supervisor +TableSuperior: Superior TableIsDefaultReroute: Default reroute FormFieldPostal: Notification type FormFieldPostalTip: Affects all notifications to this person, not just reroutes to this supervisor diff --git a/src/Handler/Firm.hs b/src/Handler/Firm.hs index 16a3577be..f360b0072 100644 --- a/src/Handler/Firm.hs +++ b/src/Handler/Firm.hs @@ -97,7 +97,7 @@ firmActionMap mr isAdmin acts = mconcat (mkAct isAdmin <$> acts) <$> aopt boolField' (fslI MsgFirmActResetSuperKeep) (Just $ Just False) <*> aopt checkBoxField (fslI MsgFirmActResetMutualSupervision) (Just $ Just True ) mkAct _ FirmActAddSupervisors = singletonMap FirmActAddSupervisors $ FirmActAddSupervisorsData - <$> areq (textField & cfAnySeparatedSet) (fslI MsgTableIsDefaultSupervisor & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing + <$> areq (textField & cfAnySeparatedSet) (fslI MsgFirmSuperDefault & setTooltip MsgCourseParticipantsRegisterUsersFieldTip) Nothing <*> areq checkBoxField (fslI MsgTableIsDefaultReroute) (Just True) <*> aopt postalEmailField (fslI MsgFormFieldPostal & setTooltip MsgFormFieldPostalTip) Nothing <*> aopt (textField & cfStrip & addDatalist ucdefSuperReasons) @@ -804,24 +804,27 @@ mkFirmUserTable :: Bool -> CompanyId -> DB (FormResult (FirmUserActionData, Set mkFirmUserTable isAdmin cid = do mr <- getMessageRender let - mkSprOption (E.Value uid, E.Value udn, E.Value mbSpr) = do + reasonSuperior = Just $ tshow SupervisorReasonAvsSuperior + mkSprOption (E.Value uid, E.Value udn, E.Value mbSpr, E.Value mbmbReason) = do uuid <- toPathPiece <$> encryptUser uid - return (Option{ optionDisplay = udn, optionInternalValue = uid, optionExternalValue = uuid }, mbSpr) + return (Option{ optionDisplay = udn, optionInternalValue = uid, optionExternalValue = uuid }, mbSpr, mbmbReason == Just reasonSuperior) procOptions rawSupers = do procSupers <- traverse mkSprOption rawSupers return $ mkOptionListGrouped $ filter (notNull . snd) - [ (mr MsgFirmSuperDefault , [opt | (opt, Just True ) <- procSupers]) - , (mr MsgFirmSuperIrregular, [opt | (opt, Just False) <- procSupers]) - , (mr MsgFirmSuperForeign , [opt | (opt, Nothing ) <- procSupers]) + [ (mr MsgTableSuperior , [opt | (opt, _ , True ) <- procSupers]) + , (mr MsgFirmSuperDefault , [opt | (opt, Just True , False) <- procSupers]) + , (mr MsgFirmSuperIrregular, [opt | (opt, Just False, False) <- procSupers]) + , (mr MsgFirmSuperForeign , [opt | (opt, Nothing , False) <- procSupers]) ] rawSupers <- E.select $ do (usr :& usrCmp) <- E.from $ E.table @User `E.leftJoin` E.table @UserCompany `E.on` (\(usr :& usrCmp) -> usr E.^. UserId E.=?. usrCmp E.?. UserCompanyUser E.&&. usrCmp E.?. UserCompanyCompany E.==. E.justVal cid) E.where_ $ E.isTrue (usrCmp E.?. UserCompanySupervisor) + E.||. (usrCmp E.?. UserCompanyReason E.?=. E.val reasonSuperior) E.||. E.exists (firmQuerySupervisedBy cid Nothing usr) - return (usr E.^. UserId, usr E.^. UserDisplayName, usrCmp E.?. UserCompanySupervisor) + return (usr E.^. UserId, usr E.^. UserDisplayName, usrCmp E.?. UserCompanySupervisor, usrCmp E.?. UserCompanyReason) let -- supervisorField :: Field Handler UserId -- supervisorField = selectField' (Just $ SomeMessage MsgMultiNoSelection) $ procOptions rawSupers @@ -1214,7 +1217,8 @@ mkFirmSuperTable isAdmin cid = do , usr & firmCountForSupervisor cid (Just (E.^. UserSupervisorRerouteNotifications)) , usrCmp E.?. UserCompanySupervisor , usrCmp E.?. UserCompanySupervisorReroute - , E.exists (firmQuerySupervisedBy cid (Just (\usrSpr -> usrSpr E.^. UserSupervisorReason E.==. E.val reasonSuperior)) usr) + , (usrCmp E.?. UserCompanyReason E.?=. E.val reasonSuperior) E.||. + E.exists (firmQuerySupervisedBy cid (Just (\usrSpr -> usrSpr E.^. UserSupervisorReason E.==. E.val reasonSuperior)) usr) ) dbtRowKey = querySuperUser >>> (E.^. UserId) dbtProj = dbtProjSimple $ \(usr, supervised, rerouted, supervisor, reroute, isSuperior) -> do @@ -1236,14 +1240,17 @@ mkFirmSuperTable isAdmin cid = do , sortable (Just "supervised") (i18nCell MsgTableCompanyNrEmpSupervised) $ \(view resultSuperCompanySupervised -> nr) -> wgtCell $ word2widget nr , sortable (Just "rerouted") (i18nCell MsgTableCompanyNrEmpRerouted ) $ \(view resultSuperCompanyReroutes -> nr) -> wgtCell $ word2widget nr -- , sortable (Just "def-super") (i18nCell MsgTableIsDefaultSupervisor) $ \(view resultSuperCompanyDefaultSuper -> mb) -> case mb of { Nothing -> iconCell IconSupervisorForeign; Just True -> iconCell IconSupervisor; Just False -> iconSpacerCell } - , sortable (Just "def-super") (i18nCell MsgTableIsDefaultSupervisor) $ \row -> + , sortable (Just "def-super") (i18nCell MsgTableIsDefaultSupervisor) $ view resultSuperCompanyDefaultSuper >>> \case + Nothing -> iconCell IconSupervisorForeign + (Just True ) -> iconCell IconSupervisor + (Just False) -> iconSpacerCell + , sortable Nothing (i18nCell MsgTableSuperior) $ \row -> let mb = row ^. resultSuperCompanyDefaultSuper sp = row ^. resultSuperCompanySuperior in case (mb,sp) of - (_ , True) -> iconCell IconSuperior - (Nothing ,_) -> iconCell IconSupervisorForeign - (Just True ,_) -> iconCell IconSupervisor - (Just False,_) -> iconSpacerCell + (_ , False) -> iconSpacerCell + (Nothing , True ) -> iconCell IconSuperior <> iconCell IconSupervisorForeign + (Just _ , True ) -> iconCell IconSuperior , sortable (Just "def-reroute") (i18nCell MsgTableIsDefaultReroute) $ \(view resultSuperCompanyDefaultReroute -> mb) -> tickmarkCell (mb == Just True) , sortable Nothing (i18nCell MsgTableUserEdit) $ \(view resultSuperUser -> entUsr) -> cellEditUserModal entUsr ] @@ -1275,7 +1282,7 @@ mkFirmSuperTable isAdmin cid = do acts = mconcat [ guardMonoid isAdmin $ singletonMap FirmSuperActNotify $ pure FirmSuperActNotifyData , singletonMap FirmSuperActSwitchSuper $ FirmSuperActSwitchSuperData - <$> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgTableIsDefaultSupervisor) (Just $ Just True) + <$> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgFirmSuperDefault) (Just $ Just True) <*> aopt (boolField . Just $ SomeMessage MsgBoolIrrelevant) (fslI MsgTableIsDefaultReroute) Nothing <* aformMessage msgSupervisorUnchanged , singletonMap FirmSuperActRMSuperDef $ FirmSuperActRMSuperDefData