From b0a761842ed424fda397e62f39e696304f5216b3 Mon Sep 17 00:00:00 2001 From: daniele-andreotti Date: Fri, 5 Jul 2024 10:54:18 +0200 Subject: [PATCH] Us 49038 come fare per (#1) * added ct 'Come fare per' and 'Step' * updated ct profile * blacked * flaked --- setup.py | 4 +- .../contenttypes/behaviors/__init__.py | 0 .../behaviors/additional_help_infos.py | 5 +- .../contenttypes/behaviors/argomenti.py | 27 ++++ .../contenttypes/behaviors/configure.zcml | 38 +++-- .../contenttypes/behaviors/contatti.py | 22 +++ .../behaviors/descrizione_estesa.py | 40 ++++++ src/iosanita/contenttypes/configure.zcml | 5 - src/iosanita/contenttypes/content/__init__.py | 0 .../contenttypes/content/come_fare_per.py | 9 ++ src/iosanita/contenttypes/content/step.py | 9 ++ .../contenttypes/interfaces/come_fare_per.py | 131 ++++++++++++++++++ src/iosanita/contenttypes/interfaces/step.py | 61 ++++++++ src/iosanita/contenttypes/permissions.zcml | 9 +- .../contenttypes/profiles/default/rolemap.xml | 19 ++- .../contenttypes/profiles/default/types.xml | 12 ++ .../profiles/default/types/ComeFarePer.xml | 105 ++++++++++++++ .../profiles/default/types/Step.xml | 101 ++++++++++++++ test_plone60.cfg | 32 +++++ 19 files changed, 597 insertions(+), 32 deletions(-) create mode 100644 src/iosanita/contenttypes/behaviors/__init__.py create mode 100644 src/iosanita/contenttypes/behaviors/descrizione_estesa.py create mode 100644 src/iosanita/contenttypes/content/__init__.py create mode 100644 src/iosanita/contenttypes/content/come_fare_per.py create mode 100644 src/iosanita/contenttypes/content/step.py create mode 100644 src/iosanita/contenttypes/interfaces/come_fare_per.py create mode 100644 src/iosanita/contenttypes/interfaces/step.py create mode 100644 src/iosanita/contenttypes/profiles/default/types.xml create mode 100644 src/iosanita/contenttypes/profiles/default/types/ComeFarePer.xml create mode 100644 src/iosanita/contenttypes/profiles/default/types/Step.xml diff --git a/setup.py b/setup.py index 21499b8..01cbea1 100644 --- a/setup.py +++ b/setup.py @@ -57,9 +57,9 @@ "z3c.jbot", "plone.api>=1.8.4", "plone.app.dexterity", - "collective.venue[geolocation]", "collective.volto.blocksfield", - "redturtle.volto>=5.0.0", + "collective.venue[geolocation]", + "redturtle.volto", "plone.restapi", "collective.taxonomy", ], diff --git a/src/iosanita/contenttypes/behaviors/__init__.py b/src/iosanita/contenttypes/behaviors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/iosanita/contenttypes/behaviors/additional_help_infos.py b/src/iosanita/contenttypes/behaviors/additional_help_infos.py index 05a97c9..021c33d 100644 --- a/src/iosanita/contenttypes/behaviors/additional_help_infos.py +++ b/src/iosanita/contenttypes/behaviors/additional_help_infos.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from collective.volto.blocksfield.field import BlocksField from iosanita.contenttypes import _ +from collective.volto.blocksfield.field import BlocksField from plone.app.dexterity import textindexer from plone.autoform.interfaces import IFormFieldProvider from plone.dexterity.interfaces import IDexterityContent @@ -8,10 +8,9 @@ from zope.component import adapter from zope.interface import implementer from zope.interface import provider +from zope import schema -# TODO: valutare se aggiungere 'box_aiuto', in alcuni CT e' obbligatorio -# e bisognerebbe metterlo unifrme per tutti in barba alle linee guida @provider(IFormFieldProvider) class IAdditionalHelpInfos(model.Schema): ulteriori_informazioni = BlocksField( diff --git a/src/iosanita/contenttypes/behaviors/argomenti.py b/src/iosanita/contenttypes/behaviors/argomenti.py index 844c164..4b76829 100644 --- a/src/iosanita/contenttypes/behaviors/argomenti.py +++ b/src/iosanita/contenttypes/behaviors/argomenti.py @@ -12,6 +12,7 @@ from zope.component import adapter from zope.interface import implementer from zope.interface import provider +from plone.dexterity.interfaces import IDexterityContent class IArgomentiSchema(model.Schema): @@ -31,6 +32,20 @@ class IArgomentiSchema(model.Schema): required=False, default=[], ) + correlato_in_evidenza = RelationList( + title=_("correlato_in_evidenza_label", default="Correlato in evidenza"), + description=_( + "correlato_in_evidenza_help", + default="Seleziona un correlato da mettere in evidenza per questo" + " contenuto.", + ), + value_type=RelationChoice( + title=_("Correlato in evidenza"), + vocabulary="plone.app.vocabularies.Catalog", + ), + required=False, + default=[], + ) form.widget( "tassonomia_argomenti", @@ -40,6 +55,12 @@ class IArgomentiSchema(model.Schema): "selectableTypes": ["Pagina Argomento"], }, ) + form.widget( + "correlato_in_evidenza", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={"maximumSelectionSize": 1}, + ) textindexer.searchable("tassonomia_argomenti") @@ -48,6 +69,12 @@ class IArgomentiSchema(model.Schema): class IArgomenti(IArgomentiSchema): """ """ + model.fieldset( + "correlati", + label=_("correlati_label", default="Contenuti collegati"), + fields=["correlato_in_evidenza"], + ) + @provider(IFormFieldProvider) class IArgomentiEvento(IArgomentiSchema): diff --git a/src/iosanita/contenttypes/behaviors/configure.zcml b/src/iosanita/contenttypes/behaviors/configure.zcml index f391c64..3f7348c 100644 --- a/src/iosanita/contenttypes/behaviors/configure.zcml +++ b/src/iosanita/contenttypes/behaviors/configure.zcml @@ -39,26 +39,6 @@ marker=".argomenti.IArgomentiEvento" /> - - - - + + + + - - diff --git a/src/iosanita/contenttypes/content/__init__.py b/src/iosanita/contenttypes/content/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/iosanita/contenttypes/content/come_fare_per.py b/src/iosanita/contenttypes/content/come_fare_per.py new file mode 100644 index 0000000..64207c6 --- /dev/null +++ b/src/iosanita/contenttypes/content/come_fare_per.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +from iosanita.contenttypes.interfaces.come_fare_per import IComeFarePer +from plone.dexterity.content import Container +from zope.interface import implementer + + +@implementer(IComeFarePer) +class ComeFarePer(Container): + """ """ diff --git a/src/iosanita/contenttypes/content/step.py b/src/iosanita/contenttypes/content/step.py new file mode 100644 index 0000000..c8229fc --- /dev/null +++ b/src/iosanita/contenttypes/content/step.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +from iosanita.contenttypes.interfaces.step import IStep +from plone.dexterity.content import Container +from zope.interface import implementer + + +@implementer(IStep) +class Step(Container): + """ """ diff --git a/src/iosanita/contenttypes/interfaces/come_fare_per.py b/src/iosanita/contenttypes/interfaces/come_fare_per.py new file mode 100644 index 0000000..9305645 --- /dev/null +++ b/src/iosanita/contenttypes/interfaces/come_fare_per.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +from collective.volto.blocksfield.field import BlocksField +from iosanita.contenttypes import _ +from iosanita.contenttypes.interfaces import IIosanitaContenttypes +from plone.app.z3cform.widget import RelatedItemsFieldWidget +from plone.autoform import directives as form +from plone.namedfile import field +from plone.supermodel import model +from z3c.relationfield.schema import RelationChoice +from z3c.relationfield.schema import RelationList +from zope import schema + + +class IComeFarePer(model.Schema, IIosanitaContenttypes): + """Marker interface for content type Servizio""" + + sottotitolo = schema.TextLine( + title=_("sottotitolo_label", default="Sottotitolo"), + description=_( + "sottotitolo_help", + default="Indica un eventuale sottotitolo/titolo alternativo.", + ), + required=False, + ) + + immagine_tema = field.NamedBlobImage( + title=_("immagine_tema_label", default="Immagine del tema"), + required=False, + description=_( + "immagine_tema_help", + default="Immagine del tema trattato.", + ), + ) + + descrizione_estesa = BlocksField( + title=_("descrizione_estesa_label", default="Panoramica"), + description=_( + "descrizione_estesa_help", + default="Descrizione estesa.", + ), + required=False, + ) + + a_chi_si_rivolge = BlocksField( + title=_("a_chi_si_rivolge_label", default="A chi è rivolto"), + required=True, + description=_( + "a_chi_si_rivolge_help", + default="A chi si rivolge questo servizio.", + ), + ) + + come_si_fa = BlocksField( + title=_("come_si_fa_label", default="Come fare"), + required=True, + description=_( + "come_si_fa_help", + default="Descrizione della procedura da seguire per poter" + " usufruire del servizio.", + ), + ) + + costi_vincoli = schema.Text( + title=_("costi_vincoli_label", default="Costi e vincoli"), + required=False, + description=_( + "costi_vincoli_help", + default="Descrizione delle condizioni e dei termini economici e dei vincoli per" + " completare la procedura di richiesta del servizio.", + ), + ) + + tempistiche = schema.Text( + title=_("tempistiche_label", default="Tempistiche"), + required=False, + description=_( + "tempistiche_help", + default="Descrivere le informazioni dettagliate riguardo eventuali tempi" + " e scadenze.", + ), + ) + + dove_rivolgersi = RelationList( + title="Dove rivolgersi", + default=[], + value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), + required=True, + description=_( + "dove_rivolgersi_help", + default="Seleziona una lista delle sedi e dei luoghi in cui è presente" + " questo servizio.", + ), + ) + + altri_documenti = RelationList( + title="Documenti", + default=[], + description=_( + "altri_documenti_help", + default="Seleziona la lista dei documenti di supporto collegati" + " a questo servizio.", + ), + value_type=RelationChoice( + title=_("Documento"), vocabulary="plone.app.vocabularies.Catalog" + ), + required=False, + ) + + ultimo_aggiornamento = schema.Date( + title=_("ultimo_aggiornamento_label", default="Ultimo aggiornamento"), + required=True, + description=_( + "ultimo_aggiornamento_help", + default="Data in cui è stato effettuato l'ultimo aggiornamento ai contenuti della pagina.", + ), + ) + + form.widget( + "dove_rivolgersi", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={ + "selectableTypes": ["UnitaOrganizzativa"], + }, + ) + form.widget( + "altri_documenti", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={"selectableTypes": ["Documento"]}, + ) diff --git a/src/iosanita/contenttypes/interfaces/step.py b/src/iosanita/contenttypes/interfaces/step.py new file mode 100644 index 0000000..42cf426 --- /dev/null +++ b/src/iosanita/contenttypes/interfaces/step.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +from collective.volto.blocksfield.field import BlocksField +from iosanita.contenttypes import _ +from iosanita.contenttypes.interfaces import IIosanitaContenttypes +from plone.app.z3cform.widget import RelatedItemsFieldWidget +from plone.autoform import directives as form +from plone.supermodel import model +from z3c.relationfield.schema import RelationChoice +from z3c.relationfield.schema import RelationList + + +class IStep(model.Schema, IIosanitaContenttypes): + """Marker interface for content type Servizio""" + + testo = BlocksField( + title=_("testo_label", default="Testo"), + description=_( + "testo_help", + default="Descrizione del passo della procedura.", + ), + required=False, + ) + + dove = RelationList( + title="Dove", + default=[], + value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"), + required=True, + description=_( + "dove_help", + default="Seleziona una struttura o punto di contatto.", + ), + ) + + documenti = RelationList( + title="Documenti", + default=[], + description=_( + "documenti_help", + default="Seleziona la lista dei documenti di supporto.", + ), + value_type=RelationChoice( + title=_("Documento"), vocabulary="plone.app.vocabularies.Catalog" + ), + required=False, + ) + + form.widget( + "dove", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={ + "selectableTypes": ["UnitaOrganizzativa"], + }, + ) + form.widget( + "documenti", + RelatedItemsFieldWidget, + vocabulary="plone.app.vocabularies.Catalog", + pattern_options={"selectableTypes": ["Documento"]}, + ) diff --git a/src/iosanita/contenttypes/permissions.zcml b/src/iosanita/contenttypes/permissions.zcml index bf2ad04..1d0d6a9 100644 --- a/src/iosanita/contenttypes/permissions.zcml +++ b/src/iosanita/contenttypes/permissions.zcml @@ -11,7 +11,14 @@ package="Products.CMFCore" file="permissions.zcml" /> - + + + + + + + + + + + + + + diff --git a/src/iosanita/contenttypes/profiles/default/types.xml b/src/iosanita/contenttypes/profiles/default/types.xml new file mode 100644 index 0000000..4e759d1 --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/types.xml @@ -0,0 +1,12 @@ + + + Controls the available contenttypes in your portal + + + diff --git a/src/iosanita/contenttypes/profiles/default/types/ComeFarePer.xml b/src/iosanita/contenttypes/profiles/default/types/ComeFarePer.xml new file mode 100644 index 0000000..35cbc1c --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/types/ComeFarePer.xml @@ -0,0 +1,105 @@ + + + + + Come fare per + + + False + ComeFarePer + + + + + True + True + + + + + iosanita.contenttypes.AddComeFarePer + iosanita.contenttypes.content.come_fare_per.ComeFarePer + + + iosanita.contenttypes.interfaces.come_fare_per.IComeFarePer + + + + + + + + + + + + + + + + + + + + + + + + + string:${folder_url}/++add++ComeFarePer + view + False + view + + + + + + + + + + + + + + + + + + + diff --git a/src/iosanita/contenttypes/profiles/default/types/Step.xml b/src/iosanita/contenttypes/profiles/default/types/Step.xml new file mode 100644 index 0000000..8977c39 --- /dev/null +++ b/src/iosanita/contenttypes/profiles/default/types/Step.xml @@ -0,0 +1,101 @@ + + + + + Step + + + False + Step + + + + + False + True + + + + + iosanita.contenttypes.AddStep + iosanita.contenttypes.content.step.Step + + + iosanita.contenttypes.interfaces.step.IStep + + + + + + + + + + + + + + + + + + + + + string:${folder_url}/++add++Step + view + False + view + + + + + + + + + + + + + + + + + + + diff --git a/test_plone60.cfg b/test_plone60.cfg index 51d8a02..7d9d30c 100644 --- a/test_plone60.cfg +++ b/test_plone60.cfg @@ -11,6 +11,12 @@ update-versions-file = test_plone60.cfg createcoverage = 1.5 watchdog = 2.1.6 +# Added by buildout at 2024-07-01 15:06:21.414504 +build = 1.2.1 +cmarkgfm = 2024.1.14 +coverage = 7.5.4 +i18ndude = 6.2.0 +keyring = 25.2.1 # Added by buildout at 2024-07-03 11:55:13.835262 build = 1.2.1 cmarkgfm = 2024.1.14 @@ -26,6 +32,8 @@ markdown-it-py = 3.0.0 mdurl = 0.1.2 nh3 = 0.2.17 pkginfo = 1.10.0 +pyproject-hooks = 1.1.0 +readme-renderer = 43.0 plone.formwidget.geolocation = 3.0.6 pyproject-hooks = 1.1.0 readme-renderer = 43.0 @@ -75,6 +83,30 @@ jaraco.functools = 4.0.1 more-itertools = 10.3.0 # Required by: +# iosanita.contenttypes==2.0.0.dev0 +z3c.jbot = 2.0 + +# Added by buildout at 2024-07-01 15:16:17.644889 +kitconcept.seo = 2.1.0 +redturtle.volto = 5.4.9 + +# Required by: +# redturtle.volto==5.4.9 +collective.purgebyid = 1.2.2 + +# Required by: +# redturtle.volto==5.4.9 +collective.volto.cookieconsent = 1.1.1 + +# Required by: +# redturtle.volto==5.4.9 +collective.volto.gdprcookie = 1.0.3 + +# Added by buildout at 2024-07-01 15:17:06.978403 + +# Required by: +# iosanita.contenttypes==2.0.0.dev0 +collective.volto.blocksfield = 2.0.0 # collective.address==1.6 pycountry = 24.6.1