diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index d79a825ca..67666668f 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -719,6 +719,8 @@ StudyFeatureAge: Fachsemester StudyFeatureDegree: Abschluss FieldPrimary: Hauptfach FieldSecondary: Nebenfach +ShortFieldPrimary: HF +ShortFieldSecondary: NF NoStudyField: Kein Studienfach StudyFeatureType: StudyFeatureValid: Aktiv diff --git a/src/Foundation.hs b/src/Foundation.hs index eb0991496..60143db44 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -350,6 +350,17 @@ instance RenderMessage UniWorX StudyDegreeTerm where where mr :: RenderMessage UniWorX msg => msg -> Text mr = renderMessage foundation ls + +newtype ShortStudyFieldType = ShortStudyFieldType StudyFieldType +embedRenderMessageVariant ''UniWorX ''ShortStudyFieldType ("Short" <>) + +data StudyDegreeTermType = StudyDegreeTermType StudyDegree StudyTerms StudyFieldType + +instance RenderMessage UniWorX StudyDegreeTermType where + renderMessage foundation ls (StudyDegreeTermType deg trm typ) = (mr trm) <> " (" <> (mr $ ShortStudyDegree deg) <> ", " <> (mr $ ShortStudyFieldType typ) <> ")" + where + mr :: RenderMessage UniWorX msg => msg -> Text + mr = renderMessage foundation ls instance RenderMessage UniWorX ExamGrade where renderMessage _ _ = pack . (showFixed False :: Deci -> String) . fromRational . review numberGrade diff --git a/src/Handler/Utils/Form.hs b/src/Handler/Utils/Form.hs index 3e701a619..5e91321e2 100644 --- a/src/Handler/Utils/Form.hs +++ b/src/Handler/Utils/Form.hs @@ -374,9 +374,17 @@ studyFeaturesFieldFor mRestr isOptional oldFeatures mbuid = selectField $ do E.on $ feature E.^. StudyFeaturesDegree E.==. degree E.^. StudyDegreeId E.where_ $ ((feature E.^. StudyFeaturesId) `E.in_` E.valList oldFeatures) E.||. (isActiveUserStudyFeature feature E.&&. isCorrectType feature) - return (feature E.^. StudyFeaturesId, degree, field) + return (feature, degree, field) MsgRenderer mr <- getMsgRenderer - mkOptionList . nonEmptyOptions (mr MsgNoStudyField) <$> mapM (procOptions mr) rawOptions + let showTypes + | length rawOptions <= 1 + = False + | Just restr <- mRestr + , Set.size restr == 1 + = False + | otherwise + = True + mkOptionList . nonEmptyOptions (mr MsgNoStudyField) <$> mapM (procOptions showTypes mr) rawOptions where isActiveUserStudyFeature feature = case mbuid of Nothing -> E.false @@ -386,11 +394,13 @@ studyFeaturesFieldFor mRestr isOptional oldFeatures mbuid = selectField $ do Nothing -> E.true Just restr -> feature E.^. StudyFeaturesType `E.in_` E.valList (Set.toList restr) - procOptions :: (StudyDegreeTerm -> Text) -> (E.Value StudyFeaturesId, Entity StudyDegree, Entity StudyTerms) -> Handler (Option (Maybe StudyFeaturesId)) - procOptions mr (E.Value sfid, Entity _dgid sdegree, Entity _stid sterm) = do + procOptions :: Bool -> (forall msg. RenderMessage UniWorX msg => msg -> Text) -> (Entity StudyFeatures, Entity StudyDegree, Entity StudyTerms) -> Handler (Option (Maybe StudyFeaturesId)) + procOptions showTypes mr (Entity sfid sfeat, Entity _dgid sdegree, Entity _stid sterm) = do cfid <- encrypt sfid return Option - { optionDisplay = mr $ StudyDegreeTerm sdegree sterm + { optionDisplay = if + | showTypes -> mr $ StudyDegreeTermType sdegree sterm (studyFeaturesType sfeat) + | otherwise -> mr $ StudyDegreeTerm sdegree sterm , optionInternalValue = Just sfid , optionExternalValue = toPathPiece (cfid :: CryptoID UUID StudyFeaturesId) }