Skip to content

Commit

Permalink
UO c.t. developments
Browse files Browse the repository at this point in the history
  • Loading branch information
folix-01 committed Jul 12, 2024
1 parent 27e38e8 commit da9ad67
Show file tree
Hide file tree
Showing 14 changed files with 777 additions and 879 deletions.
2 changes: 1 addition & 1 deletion src/iosanita/contenttypes/behaviors/address.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class IAddressPersona(IAddress, IAddressNomeSede, IAddressLocal):

model.fieldset(
"dove",
label=_("struttura_label", default="Dove"),
label=_("dove_label", default="Dove"),
fields=[
"nome_sede",
"street",
Expand Down
9 changes: 8 additions & 1 deletion src/iosanita/contenttypes/behaviors/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,14 @@
provides=".descrizione_estesa.IDescrizioneEstesa"
marker=".descrizione_estesa.IDescrizioneEstesa"
/>

<plone:behavior
name="iosanita.contenttypes.behavior.contatti_uo"
title="Contatti"
description="Behavior contatti per UO."
factory=".contatti.ContattiUnitaOrganizzativa"
provides=".contatti.IContattiUnitaOrganizzativa"
marker=".contatti.IContattiUnitaOrganizzativa"
/>
<plone:behavior
name="iosanita.contenttypes.behavior.contatti_step"
title="Contatti"
Expand Down
63 changes: 60 additions & 3 deletions src/iosanita/contenttypes/behaviors/contatti.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
# -*- coding: utf-8 -*-
from iosanita.contenttypes import _
from iosanita.contenttypes.interfaces.step import IStep
from iosanita.contenttypes.interfaces.persona import IPersona
from plone.app.z3cform.widget import RelatedItemsFieldWidget
from plone.autoform import directives as form
from plone.autoform.interfaces import IFormFieldProvider
Expand All @@ -11,6 +8,57 @@
from zope.component import adapter
from zope.interface import implementer
from zope.interface import provider
from plone.app.dexterity import textindexer
from collective.volto.blocksfield.field import BlocksField

from iosanita.contenttypes import _
from iosanita.contenttypes.interfaces.step import IStep
from iosanita.contenttypes.interfaces.persona import IPersona
from iosanita.contenttypes.interfaces.unita_organizzativa import IUnitaOrganizzativa


@provider(IFormFieldProvider)
class IContattiUnitaOrganizzativa(model.Schema):
contact_info = RelationList(
title=_(
"contact_unita_organizzativa_info_label",
default="Punti di contatto dell'unità organizzativa",
),
description=_(
"contact_unita_organizzativa_info_help",
default="Contatti dell'unità organizzativa.",
),
required=True,
default=[],
value_type=RelationChoice(
title=_("Informazioni di contatto"),
vocabulary="plone.app.vocabularies.Catalog",
),
)
orario_pubblico = BlocksField(
title=_("orario_pubblico_label", default="Orario per il pubblico"),
description=_(
"orario_pubblico_help",
default="Indicare eventuali orari di accesso al pubblico",
),
required=True,
)

form.widget(
"contact_info",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"selectableTypes": ["PuntoDiContatto"],
},
)
model.fieldset(
"contatti",
label=_("contatti_label", default="Contatti"),
fields=["contact_info", "orario_pubblico"],
)

textindexer.searchable("orario_pubblico")


@provider(IFormFieldProvider)
Expand Down Expand Up @@ -94,6 +142,15 @@ class IContattiPersona(model.Schema):
)


@implementer(IContattiUnitaOrganizzativa)
@adapter(IUnitaOrganizzativa)
class ContattiUnitaOrganizzativa(object):
""" """

def __init__(self, context):
self.context = context


@implementer(IContattiStep)
@adapter(IStep)
class ContattiStep(object):
Expand Down
249 changes: 6 additions & 243 deletions src/iosanita/contenttypes/content/unita_organizzativa.py
Original file line number Diff line number Diff line change
@@ -1,246 +1,9 @@
# -*- coding: utf-8 -*-
from collective.volto.blocksfield.field import BlocksField
from plone.app.dexterity import textindexer
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
from zope import schema
from iosanita.contenttypes.interfaces.unita_organizzativa import IUnitaOrganizzativa
from plone.dexterity.content import Container
from zope.interface import implementer


from iosanita.contenttypes import _

# TODO: migration script for these commented fields towards PDC
# contact_info
# Probabilmente non possibile trattandosi di un campo a blocchi
# preferirei si arrangiassero le redazioni. Altrimenti si defaulta
# ad un tipo a caso + tutto il testo e poi si arrangiano comunque
class IUnitaOrganizzativa(model.Schema):
"""Marker interface for content type UnitaOrganizzativa"""

subtitle = schema.TextLine(
title=_(
"subtitle_label",
default="Subtitle",
),
required=False,
)

competenze = BlocksField(
title=_("uo_competenze_label", default="Competenze"),
description=_(
"uo_competenze_help",
default="Descrizione dei compiti assegnati alla struttura.",
),
required=True,
)

legami_con_altre_strutture = RelationList(
title=_(
"legami_altre_strutture_label", default="Strutture o uffici di riferimento"
),
default=[],
description=_(
"legami_con_altre_strutture_help",
default="Selezionare la lista di strutture e/o uffici collegati"
" a questa unità organizzativa.",
),
value_type=RelationChoice(
title=_("Struttura"), vocabulary="plone.app.vocabularies.Catalog"
),
required=False,
)

responsabile = RelationList(
title=_("responsabile_label", default="Responsabile"),
value_type=RelationChoice(
title=_("Responsabile"),
vocabulary="plone.app.vocabularies.Catalog",
),
description=_(
"responsabile_help",
default="Selezionare il/i responsabile/i della struttura.",
),
default=[],
required=False,
)

assessore_riferimento = RelationList(
title=_("assessore_riferimento_title", default="Assessore di riferimento"),
# vocabolario di riferimento sara' dinamico con i content type
# persona presenti all'interno della macro Amministrazione"
value_type=RelationChoice(
title=_("Assessore di riferimento"),
vocabulary="plone.app.vocabularies.Catalog",
),
description=_(
"assessore_riferimento_help",
default="Inserire l'assessore di riferimento della struttura,"
" se esiste.",
),
required=False,
default=[],
)

# vocabolario di riferimento sara' dinamico con i content type persona
persone_struttura = RelationList(
title=_(
"persone_struttura_label", default="Persone che compongono la struttura"
),
default=[],
value_type=RelationChoice(
title=_("Persone della struttura"),
vocabulary="plone.app.vocabularies.Catalog",
),
description=_(
"persone_struttura_help",
default="Seleziona la lista delle persone che compongono" " la struttura.",
),
required=False,
)

sede = RelationList(
title=_("sede_label", default="Sede principale"),
default=[],
description=_(
"sede_help",
default="Seleziona il Luogo in cui questa struttura ha sede. "
"Se non è presente creare il Luogo nella sezione dedicata "
"nell'alberatura del sito.",
),
value_type=RelationChoice(
title=_("Sede"), vocabulary="plone.app.vocabularies.Catalog"
),
required=True,
)

sedi_secondarie = RelationList(
title=_("sedi_secondarie_label", default="Altre sedi"),
default=[],
description=_(
"sedi_secondarie_help",
default="Seleziona una lista di eventuali contenuti di tipo Luogo"
" che sono sedi secondarie di questa struttura. "
"Per queste sedi non sarà possibile sovrascrivere i dati. "
"Nel caso servano informazioni diverse, è possibile usare il campo"
" sottostante.",
),
value_type=RelationChoice(
title=_("Sede"), vocabulary="plone.app.vocabularies.Catalog"
),
required=False,
)

documenti_pubblici = RelationList(
title=_("documenti_pubblici_label", default="Documenti pubblici"),
default=[],
description=_(
"documenti_pubblici_help",
default="Documenti pubblici importanti, collegati a questa Unità Organizzativa", # noqa
),
value_type=RelationChoice(
title=_("Documenti pubblici"), vocabulary="plone.app.vocabularies.Catalog"
),
required=False,
)

#  custom widgets
form.widget(
"documenti_pubblici",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"selectableTypes": ["Documento"],
},
)
form.widget(
"persone_struttura",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={"selectableTypes": ["Persona"]},
)
form.widget(
"legami_con_altre_strutture",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"selectableTypes": ["UnitaOrganizzativa"],
},
)
form.widget(
"responsabile",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"maximumSelectionSize": 1,
"selectableTypes": ["Persona"],
# "basePath": "/amministrazione",
},
)
form.widget(
"assessore_riferimento",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"maximumSelectionSize": 1,
"selectableTypes": ["Persona"],
# "basePath": "/amministrazione",
},
)
form.widget(
"sede",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={"maximumSelectionSize": 1, "selectableTypes": ["Venue"]},
)
form.widget(
"sedi_secondarie",
RelatedItemsFieldWidget,
vocabulary="plone.app.vocabularies.Catalog",
pattern_options={
"selectableTypes": ["Venue"],
# "basePath": "/servizi",
},
)

# custom fieldsets and order
model.fieldset(
"cosa_fa",
label=_("cosa_fa_label", default="Competenze"),
fields=["competenze"],
)
model.fieldset(
"struttura",
label=_("unita_organizzativa_struttura_label", default="Struttura"),
fields=[
"legami_con_altre_strutture",
"responsabile",
"assessore_riferimento",
],
)
model.fieldset(
"persone",
label=_("persone_label", default="Persone"),
fields=["persone_struttura"],
)
model.fieldset(
"contatti",
label=_("contatti_label", default="Contatti"),
fields=["sede", "sedi_secondarie"],
)

model.fieldset(
"correlati",
label=_("correlati_label", default="Contenuti collegati"),
fields=["documenti_pubblici"],
)

form.order_after(sedi_secondarie="IContattiUnitaOrganizzativa.orario_pubblico")
form.order_after(documenti_pubblici="relatedItems")
# form.order_after(contact_info="sedi_secondarie")

# SearchableText indexers
textindexer.searchable("competenze")
textindexer.searchable("assessore_riferimento")
textindexer.searchable("responsabile")
@implementer(IUnitaOrganizzativa)
class UnitaOrganizzativa(Container):
""" """
2 changes: 1 addition & 1 deletion src/iosanita/contenttypes/interfaces/come_fare_per.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class IComeFarePer(model.Schema, IIosanitaContenttypes):
parliamo_di = schema.List(
title=_("parliamo_di_label", default="Parliamo di"),
description=_(
"parliamo_di_help",
"come_fare_per_parliamo_di_help",
default="Indicazioni degli argomenti con cui il contenuto di pagina viene taggato.",
),
value_type=schema.Choice(
Expand Down
Loading

0 comments on commit da9ad67

Please sign in to comment.