diff --git a/changes/TI-1895.other b/changes/TI-1895.other new file mode 100644 index 00000000000..d426659c698 --- /dev/null +++ b/changes/TI-1895.other @@ -0,0 +1 @@ +Exclude the dossier assignment slot from propertysheets for teamraum deployments. [amo] diff --git a/opengever/propertysheets/assignment.py b/opengever/propertysheets/assignment.py index d69abb5eed2..1debe44b7f0 100644 --- a/opengever/propertysheets/assignment.py +++ b/opengever/propertysheets/assignment.py @@ -1,4 +1,5 @@ from opengever.propertysheets import _ +from opengever.workspace import is_workspace_feature_enabled from zope.component import getUtility from zope.interface import implementer from zope.schema.interfaces import IVocabularyFactory @@ -21,8 +22,9 @@ def __call__(self, context): for term in get_document_assignment_slots_vocab(): assignment_terms.append(term) - for term in get_dossier_assignment_slots_vocab(): - assignment_terms.append(term) + if not is_workspace_feature_enabled(): + for term in get_dossier_assignment_slots_vocab(): + assignment_terms.append(term) return SimpleVocabulary(assignment_terms) diff --git a/opengever/propertysheets/definition.py b/opengever/propertysheets/definition.py index fe1af4f7ba1..51e954997e4 100644 --- a/opengever/propertysheets/definition.py +++ b/opengever/propertysheets/definition.py @@ -4,7 +4,6 @@ from opengever.propertysheets.default_from_member import attach_member_property_default_factory from opengever.propertysheets.exceptions import InvalidFieldType from opengever.propertysheets.exceptions import InvalidFieldTypeDefinition -from opengever.propertysheets.exceptions import InvalidSchemaAssignment from opengever.propertysheets.helpers import add_current_value_to_allowed_terms from opengever.propertysheets.helpers import is_choice_field from opengever.propertysheets.helpers import is_multiple_choice_field @@ -198,9 +197,11 @@ def assignments(self, values): term = assignment_slots.getTermByToken(token) assignments.append(term.value) except LookupError: - raise InvalidSchemaAssignment( - "The assignment '{}' is invalid.".format(token) - ) + # Missing slots should be ignored without raising an error. + # This allows custom properties to remain usable even if the corresponding slots no longer exist. + # Currently, this mainly occurs during testing or local development + # when switching between Gever and Teamraum. + continue self._assignments = tuple(assignments) diff --git a/opengever/propertysheets/tests/test_propertysheet_metaschema.py b/opengever/propertysheets/tests/test_propertysheet_metaschema.py index 586a3f71486..61253d2483e 100644 --- a/opengever/propertysheets/tests/test_propertysheet_metaschema.py +++ b/opengever/propertysheets/tests/test_propertysheet_metaschema.py @@ -410,3 +410,34 @@ def test_field_descriptions_are_translated(self, browser): ], [prop['description'] for prop in field_properties.values()] ) + + +class TestWorkSpacePropertysheetMetaschemaEndpoint(IntegrationTestCase): + features = ('workspace',) + + @browsing + def test_assignment_vocabularies_excluded_dossier_type(self, browser): + self.login(self.propertysheets_manager, browser) + + headers = self.api_headers.copy() + headers.update({'Accept-Language': 'de-ch'}) + + browser.open( + view="@propertysheet-metaschema", + headers=headers, + ) + + properties = browser.json['properties'] + self.assertEqual( + [ + u'Dokument', + u'Dokument (Typ: Anfrage)', + u'Dokument (Typ: Antrag)', + u'Dokument (Typ: Bericht)', + u'Dokument (Typ: Offerte)', + u'Dokument (Typ: Protokoll)', + u'Dokument (Typ: Reglement)', + u'Dokument (Typ: Vertrag)', + u'Dokument (Typ: Weisung)', + ], + properties['assignments']['items']['enumNames'])