class IDataset(model.Schema):
    """Marker interface for Dataset"""

    # TODO: aggiungere tassonomia e vocabolario rilevante fornito nelle linee guida  # noqa
    temi = schema.Choice(
        title=_("temi", default="Temi"),
        vocabulary="design.plone.contenttypes.temi_dataset",
        required=True,
    )

    # TODO: identificativo dataset

    distribuzione = BlocksField(
        title=_("distribuzione", default="Distribuzione"), required=True
    )

    licenza = schema.TextLine(title=_("licenza", default="Licenza"), required=True)

    dataset = field.NamedBlobFile(title=_("dataset", default="Dataset"), required=True)

    titolare = schema.TextLine(title=_("titolare", default="Titolare"), required=True)

    frequenza_aggiornamento = schema.TextLine(
        title=_("frequenza_aggiornamento", default="Frequenza di aggiornamento"),
        required=True,
    )
Пример #2
0
class IContatti(model.Schema):
    """ """

    telefono = schema.TextLine(
        title=_("telefono_label", default="Telefono"),
        description=_(
            "telefono_help",
            default="Indicare un riferimento telefonico per poter contattare"
            " i referenti.",
        ),
        required=False,
    )

    fax = schema.TextLine(
        title=_("fax_label", default="Fax"),
        description=_("fax_help", default="Indicare un numero di fax."),
        required=False,
    )

    email = schema.TextLine(
        title=_("email_label", default="E-mail"),
        description=_(
            "email_help",
            default="Indicare un indirizzo mail per poter contattare"
            " i referenti.",
        ),
        required=False,
    )

    pec = schema.TextLine(
        title=_("pec_label", default="Pec"),
        description=_(
            "pec_help",
            default="Indicare un indirizzo pec per poter contattare"
            " i referenti.",
        ),
        required=False,
    )

    web = schema.TextLine(
        title=_("web_label", default="Sito web"),
        description=_("web_help",
                      default="Indicare un indirizzo web di riferimento."),
        required=False,
    )

    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=False,
    )

    dexteritytextindexer.searchable("orario_pubblico")
    dexteritytextindexer.searchable("email")
    dexteritytextindexer.searchable("pec")
    dexteritytextindexer.searchable("web")
class IPratica(model.Schema):
    """Marker interface for Pratica"""

    numero_protocollo = schema.TextLine(
        title=_("numero_protocollo", default="Numero protocollo"),
        required=True,
    )

    ufficio_riferimento = schema.Choice(
        title=_("ufficio_riferimento", default="Ufficio di riferimento"),
        # vocabolario di riferimento sara' la lista degli uffici di riferimento
        vocabulary="design.plone.contenttypes.Mockup",
        required=False,
    )

    # questo viene gestito dal workflow di Plone ma fa riferimento ad una
    # tassonomia "Lista stati di una pratica"
    stato_pratica = schema.TextLine(
        title=_("stato_pratica", default="Stato della pratica"),
        required=True,
    )

    # TODO: aggiungere tassonomia e vocabolario rilevante
    servizio_origine = schema.Choice(
        title=_(
            "servizio_origine_pratica",
            default="Servizio che origina la pratica",
        ),
        # vocabolario di riferimento sara' il servizio che genera il task e
        # permette di soddisfarlo
        vocabulary="design.plone.contenttypes.Mockup",
        required=False,
    )

    contenuto = BlocksField(title=_("contenuto", default="Contenuto"),
                            required=True)

    contatti = BlocksField(title=_("contatti", default="Contatti"),
                           required=True)

    azioni_utente = schema.Choice(
        title=_("azioni_utente", default="Azioni utente"),
        # vocabolario di riferimento sara' la tassonomia "Lista azioni pratica"
        vocabulary="design.plone.contenttypes.ListaAzioniPratica",
        required=True,
    )
class IDescrizioneEstesaSchema(model.Schema):
    descrizione_estesa = BlocksField(
        title=_("descrizione_estesa", default="Descrizione estesa"),
        required=False,
        description=_(
            "descrizione_estesa_help",
            default="Descrizione dettagliata e completa.",
        ),
    )

    dexteritytextindexer.searchable("descrizione_estesa")
class IAdditionalHelpInfos(model.Schema):

    ulteriori_informazioni = BlocksField(
        title=_("ulteriori_informazioni", default="Ulteriori informazioni"),
        description=_(
            "ulteriori_informazioni_help",
            default="Ulteriori informazioni non contemplate"
            " dai campi precedenti.",
        ),
        required=False,
    )

    model.fieldset(
        "informazioni",
        label=_("informazioni_label", default="Ulteriori informazioni"),
        fields=["ulteriori_informazioni"],
    )

    dexteritytextindexer.searchable("ulteriori_informazioni")
class ITrasparenza(model.Schema):
    """
    Behavior conenene i campi per la sezione amministrazione trasparente
    """

    modalita_avvio = schema.TextLine(
        title=_("modalita_avvio_label", default="Modalita di avvio"),
        description=_(
            "modalita_avvio_help",
            default="Indicare la modalità di avvio del procedimento.",
        ),
        required=False,
    )
    descrizione = BlocksField(
        title=_(
            "descrizione_procedimento_label",
            default="Descrizione del procedimento",
        ),
        required=False,
        description=_(
            "descrizione_procedimento_help",
            default=
            "Inserisci eventuale testo descrittivo del procedimento.",  # noqa
        ),
    )
    file_correlato = field.NamedBlobFile(
        title=_("file_correlato_label", default="File correlato"),
        description=_(
            "file_correlato_help",
            default="Inserisci il file correlato di questo pocedimento.",
        ),
        required=False,
    )

    soggetti_esterni = BlocksField(
        title=_(
            "soggetti_eserni_label",
            default=
            "Soggetti esterni, nonché, strutture interne coinvolte nel procedimento",
        ),
        required=False,
        description=_(
            "soggetti_eserni_help",
            default=
            "Inserisci eventuali soggetti esterni, nonché, strutture interne coinvolte nel procedimento.",  # noqa
        ),
    )

    decorrenza_termine = BlocksField(
        title=_(
            "decorrenza_termini_label",
            default="Decorrenza termine del procedimento",
        ),
        required=False,
        description=_(
            "decorrenza_termini_help",
            default="Inserisci la decorrenza termine del procedimento.",  # noqa
        ),
    )
    fine_termine = BlocksField(
        title=_(
            "fine_termine_label",
            default="Fine termine del procedimento",
        ),
        required=False,
        description=_(
            "fine_termine_help",
            default="Inserisci la fine termine del procedimento.",  # noqa
        ),
    )
    tempo_medio = BlocksField(
        title=_(
            "tempo_medio_label",
            default="Tempo medio del procedimento",
        ),
        required=False,
        description=_(
            "tempo_medio_help",
            default="Inserisci il tempo medio del procedimento.",  # noqa
        ),
    )
    silenzio_assenso = schema.Bool(
        title=_(
            "silenzio_assenso_label",
            default=
            "Silenzio assenso/Dichiarazione dell'interessato sostitutiva del provvedimento finale",  # noqa
        ),
        default=False,
        required=False,
        description=_(
            "silenzio_assenso_help",
            default=
            "Indicare se il procedimento prevede il silenzio assenso o la dichiarazione dell'interessato sostitutiva del provvedimento finale.",  # noqa
        ),
    )
    provvedimento_finale = BlocksField(
        title=_(
            "provvedimento_finale_label",
            default="Provvedimento del procedimento",
        ),
        required=False,
        description=_(
            "provvedimento_finale_help",
            default="Eventuale provvedimento finale del procedimento.",  # noqa
        ),
    )
    responsabile_procedimento = RelationList(
        title=_(
            "responsabile_procedimento",
            default="Responsabile del procedimento",
        ),
        description=_(
            "responsabile_procedimento_help",
            default="Indicare il responsabile del procedimento.",
        ),
        value_type=RelationChoice(
            title=_("Responsabile procedimento"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
        default=[],
    )
    dirigente = RelationList(
        title=_(
            "dirigente",
            default="Dirigente",
        ),
        description=_(
            "dirigente_help",
            default="Indicare il dirigente.",
        ),
        value_type=RelationChoice(
            title=_("Dirigente"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
        default=[],
    )
    organo_competente_provvedimento_finale = BlocksField(
        title=_(
            "organo_competente_provvedimento_finale_label",
            default="Organo competente del provvedimento finale",
        ),
        required=False,
        description=_(
            "organo_competente_provvedimento_finale_help",
            default="Organo competente del provvedimento finale.",  # noqa
        ),
    )
    modalita_richiesta_informazioni = BlocksField(
        title=_(
            "modalita_richiesta_informazioni_label",
            default="Modalità per richiedere informazioni",
        ),
        required=False,
        description=_(
            "modalita_richiesta_informazioni_help",
            default=
            "Indicare le modalità per richiedere informazioni riguardo a questo procedimento.",  # noqa
        ),
    )
    procedura_online = schema.TextLine(
        title=_(
            "procedura_online_label",
            default="Procedura informatizzata online",
        ),
        description=_(
            "procedura_online_help",
            default=
            "Indicare, se la procedura è informatizzata online, il riferimento.",  # noqa
        ),
        required=False,
    )
    altre_modalita_invio = BlocksField(
        title=_(
            "altre_modalita_invio_label",
            default="Altre modalità di invio",
        ),
        description=_(
            "altre_modalita_invio_help",
            default="Indicare, se esistono, altre modalità di invio.",  # noqa
        ),
        required=False,
    )
    atti_documenti_corredo = BlocksField(
        title=_(
            "atti_documenti_corredo_label",
            default="Atti e documenti a corredo dell'istanza",
        ),
        description=_(
            "atti_documenti_corredo_help",
            default=
            "Indicare, se la esistono, atti e documenti a corredo dell'istanza.",  # noqa
        ),
        required=False,
    )
    reperimento_modulistica = BlocksField(
        title=_(
            "reperimento_modulistica_label",
            default="Dove reperire la modulistica",
        ),
        description=_(
            "reperimento_modulistica_help",
            default=
            "Indicare dove è possibile reperre la modulistica per il procedimento.",  # noqa
        ),
        required=False,
    )
    pagamenti = BlocksField(
        title=_(
            "pagamenti_label",
            default="Pagamenti previsti e modalità",
        ),
        description=_(
            "pagamenti_help",
            default=
            "Indicare le informazioni riguardanti i pagamenti previsti e modalità di pagamento.",  # noqa
        ),
        required=False,
    )
    strumenti_tutela = BlocksField(
        title=_("strumenti_tutela_label", default="Strumenti di tutela"),
        description=_(
            "strumenti_tutela_help",
            default="Indicare gli eventuali strumenti di tutela.",
        ),
        required=False,
    )
    # rt o collegamento a persona? esiste sempre?
    titolare_potere_sostitutivo = BlocksField(
        title=_(
            "titolare_potere_sostitutivo_label",
            default="Titolare del potere sostitutivo",
        ),
        required=False,
        description=_(
            "titolare_potere_sostitutivo_help",
            default="Eventuale titolare del potere sostitutivo.",  # noqa
        ),
    )
    customer_satisfaction = BlocksField(
        title=_(
            "customer_satisfaction_label",
            default="Risultati indagini di customer satisfaction",
        ),
        required=False,
        description=_(
            "customer_satisfaction_help",
            default="Risultati indagini di customer satisfaction.",  # noqa
        ),
    )
    riferimenti_normativi = BlocksField(
        title=_(
            "riferimenti_normativi_label",
            default="Riferimenti normativi",
        ),
        required=False,
        description=_(
            "riferimenti_normativi_help",
            default="Indicare eventuali riferimenti normativi.",  # noqa
        ),
    )

    form.widget(
        "responsabile_procedimento",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Persona"],
        },
    )
    form.widget(
        "dirigente",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Persona"],
        },
    )

    model.fieldset(
        "trasparenza",
        label=_("trasparenza_fieldset_label", default="Trasparenza"),
        fields=[
            "modalita_avvio",
            "descrizione",
            "file_correlato",
            "soggetti_esterni",
            "decorrenza_termine",
            "fine_termine",
            "tempo_medio",
            "silenzio_assenso",
            "provvedimento_finale",
            "responsabile_procedimento",
            "dirigente",
            "organo_competente_provvedimento_finale",
            "modalita_richiesta_informazioni",
            "procedura_online",
            "altre_modalita_invio",
            "atti_documenti_corredo",
            "reperimento_modulistica",
            "pagamenti",
            "strumenti_tutela",
            "titolare_potere_sostitutivo",
            "customer_satisfaction",
            "riferimenti_normativi",
        ],
    )
Пример #7
0
class INewsAdditionalFields(model.Schema):
    descrizione_estesa = BlocksField(
        title=_("descrizione_estesa", default="Descrizione estesa"),
        required=False,
        description=_(
            "descrizione_estesa_help",
            default="Descrizione dettagliata e completa.",
        ),
    )

    tipologia_notizia = schema.Choice(
        title=_("tipologia_notizia_label", default="Tipologia notizia"),
        description=_(
            "tipologia_notizia_help",
            default="Seleziona la tipologia della notizia.",
        ),
        required=True,
        vocabulary="design.plone.vocabularies.tipologie_notizia",
    )

    numero_progressivo_cs = schema.TextLine(
        title=_(
            "numero_progressivo_cs_label",
            default="Numero progressivo del comunicato stampa",
        ),
        required=False,
    )

    a_cura_di = RelationList(
        title=_("a_cura_di_label", default="A cura di"),
        description=_(
            "a_cura_di_help",
            default="Seleziona l'ufficio di comunicazione responsabile di "
            "questa notizia/comunicato stampa.",
        ),
        required=False,
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
    )

    a_cura_di_persone = RelationList(
        title=_("a_cura_di_persone_label", default="Persone"),
        description=_(
            "a_cura_di_persone_help",
            default="Seleziona una lista di persone dell'amministrazione "
            "citate in questa notizia/comunicato stampa. Questa informazione "
            'verrà mostrata nella sezione "A cura di".',
        ),
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    luoghi_correlati = RelationList(
        title=_("luoghi_correlati_label", default="Luoghi correlati"),
        description=_(
            "luoghi_correlati_help",
            default="Seleziona una lista di luoghi citati.",
        ),
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    notizie_correlate = RelationList(
        title=_("notizie_correlate_label", default="Notizie correlate"),
        description=_(
            "notizie_correlate_help",
            default="Seleziona una lista di notizie correlate a questa.",
        ),
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    # custom widgets
    form.widget(
        "a_cura_di",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )
    form.widget(
        "a_cura_di_persone",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "selectableTypes": ["Persona"],
            "maximumSelectionSize": 50,
        },
    )
    form.widget(
        "notizie_correlate",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["News Item"],
        },
    )
    form.widget(
        "luoghi_correlati",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "selectableTypes": ["Venue"],
            "maximumSelectionSize": 50,
        },
    )

    # custom fieldsets and order
    form.order_before(descrizione_estesa="ILeadImageBehavior.image")
    form.order_before(tipologia_notizia="ILeadImageBehavior.image")
    form.order_before(numero_progressivo_cs="ILeadImageBehavior.image")
    form.order_before(a_cura_di="ILeadImageBehavior.image")

    dexteritytextindexer.searchable("descrizione_estesa")
Пример #8
0
class IDocumentoPersonale(model.Schema):
    """Marker interface for DocumentoPersonale"""

    protocollo = schema.TextLine(title=_("protocollo", default="Protocollo"),
                                 required=True)

    data_protocollo = schema.Date(
        title=_("data_protocollo", default="Data del protocollo"),
        required=True,
    )

    immagine = field.NamedImage(title=_("immagine", default="Immagine"),
                                required=False)

    pratica_associata = field.NamedFile(
        title=_("pratica_associata", default="Pratica associata"),
        required=True,
    )

    servizio_origine = schema.Choice(
        title=_("servizio_origine",
                default="Servizio che genera il documento"),
        vocabulary="design.plone.contenttypes.Mockup",
        required=True,
    )

    # TODO: come gestiamo i campi "Tipologia del documento", "sottotipologia
    # del documento" e "lingua del documento"?

    # TODO: il vocabolario controllato da usare sara' "Argomenti di interesse
    #  pere gli utenti di un comune"
    argomenti_utenti = schema.Choice(
        title=_("argomenti_utenti", default="Argomenti utenti"),
        vocabulary="design.plone.contenttypes.Mockup",
        required=True,
    )

    oggetto = BlocksField(
        title=_("oggetto", default="Oggetto"),
        # non viene specificato se il campo e' obbligatorio o meno
        required=False,
    )

    # TODO: decidere se "link al documento" sara' un folder o un file. Se e'
    # un folder "formati disponibili" diventa un campo
    # generato facendo una query dei file presenti all'interno di "link al
    #  documento"?
    # Inserito come folder "Allegati" per il momento, magari si chiede

    # TODO: usare vocabolario dinamico per le tipologie di uffici (dovrebbe
    # rientrare nel content type "Unita' organizzativa")
    ufficio_responsabile = schema.Choice(
        title=_(
            "ufficio_responsabile_documento_personale",
            default="Ufficio responsabile",
        ),
        required=True,
        vocabulary="design.plone.contenttypes.Mockup",
    )

    # TODO: usare vocabolario dinamico per le tipologie di aree amministrative
    # (dovrebbe rientrare nel content type "Unita' organizzativa")
    area_responsabile = schema.Choice(
        title=_(
            "area_responsabile_documento_personale",
            default="Area responsabile",
        ),
        required=True,
        vocabulary="design.plone.contenttypes.Mockup",
    )

    # TODO: usare vocabolario dinamico per le gli autori?
    autori = RelationList(
        title="Autore/i",
        default=[],
        value_type=RelationChoice(title=_("Autore"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    licenza_distribuzione = schema.TextLine(
        title=_("licenza_distribuzione", default="Licenza di distribuzione"),
        required=False,
    )

    # TODO: usare vocabolario dinamico per i servizi collegati?
    servizi_collegati = RelationList(
        title="Servizi collegati",
        default=[],
        value_type=RelationChoice(
            title=_("Servizio collegato"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
    )

    canale_digitale_servizio = schema.TextLine(
        title=_(
            "canale_digitale_servizio",
            default="Canale digitale servizio collegato",
        ),
        required=False,
    )

    data_inizio = schema.Date(title=_("data_inizio", default="Data di inizio"),
                              required=False)

    data_e_fasi_intermedie = BlocksField(
        title=_("data_e_fasi_intermedie", default="Data e fasi intermedie"),
        required=False,
    )

    data_inizio = schema.Date(title=_("data_inizio", default="Data di inizio"),
                              required=False)

    # TODO: vocabolario per i dataset collegati ad un documento
    dataset = RelationList(
        title=_("Dataset"),
        required=False,
        default=[],
        value_type=RelationChoice(
            title=_("Dataset collegato"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
    )

    informazioni = BlocksField(
        title=_("informazioni", default="Ulteriori informazioni"),
        required=False,
    )

    riferimenti_normativi = BlocksField(
        title=_("riferimenti_normativi", default="Riferimenti normativi"),
        required=False,
    )
Пример #9
0
class IBandoAgidSchema(IBandoSchema, IDesignPloneContentType):
    """A Dexterity schema for Annoucements"""

    # ridefinito, così usiamo il campo dei blocchi
    text = BlocksField(
        title=_("text_label", default="Testo"),
        description=_(
            "text_help",
            default="",
        ),
        required=False,
    )
    tipologia_bando = schema.Choice(
        title=_rtbando("tipologia_bando_label", default="Announcement type"),
        description=_rtbando("tipologia_bando_help", default=""),
        vocabulary="redturtle.bandi.tipologia.vocabulary",
        required=True,
    )
    destinatari = schema.List(
        title=_rtbando("destinatari_label", default="Recipients"),
        description=_rtbando("destinatari_help", default=""),
        required=False,
        value_type=schema.Choice(
            vocabulary="redturtle.bandi.destinatari.vocabulary"),
    )
    ente_bando = schema.Tuple(
        title=_rtbando("ente_label", default="Authority"),
        description=_rtbando("ente_help", default="Select some authorities."),
        required=False,
        defaultFactory=getDefaultEnte,
        value_type=schema.TextLine(),
        missing_value=None,
    )
    scadenza_domande_bando = schema.Datetime(
        title=_(
            "scadenza_domande_bando_label",
            default="Termine per le richieste di chiarimenti",
        ),
        description=_(
            "scadenza_domande_bando_help",
            default="Data entro la quale sarà possibile far pervenire domande"
            " e richieste di chiarimento a chi eroga il bando",
        ),
        required=False,
    )
    scadenza_bando = schema.Datetime(
        title=_rtbando("scadenza_bando_label",
                       default="Expiration date and time"),
        description=_rtbando(
            "scadenza_bando_help",
            default="Deadline to participate in the announcement",
        ),
        required=False,
    )

    chiusura_procedimento_bando = schema.Date(
        title=_rtbando(
            "chiusura_procedimento_bando_label",
            default="Closing date procedure",
        ),
        description=_rtbando("chiusura_procedimento_bando_help", default=""),
        required=False,
    )

    riferimenti_bando = BlocksField(
        title=_("riferimenti_bando_agid_label",
                default="Ulteriori informazioni"),
        description=_(
            "riferimenti_bando_agid_help",
            default="Ulteriori informazioni non previste negli altri campi;"
            " si può trattare di contatti o note informative la cui conoscenza"
            " è indispensabile per la partecipazione al bando",
        ),
        required=False,
    )

    ufficio_responsabile = RelationList(
        title=_(
            "ufficio_responsabile_bando_label",
            default="Ufficio responsabile del bando",
        ),
        description=_(
            "ufficio_responsabile_bando_help",
            default="Seleziona l'ufficio responsabile di questo bando.",
        ),
        required=False,
        default=[],
        value_type=RelationChoice(
            title=_("Ufficio responsabile"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
    )

    area_responsabile = RelationList(
        title=_(
            "area_responsabile_label",
            default="Area responsabile del documento",
        ),
        description=_(
            "area_responsabile_help",
            default="Seleziona l'area amministrativa responsabile del "
            "documento.",
        ),
        required=False,
        default=[],
        value_type=RelationChoice(title=_("Area"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
    )

    # widgets
    directives.widget(
        "ente_bando",
        AjaxSelectFieldWidget,
        vocabulary="redturtle.bandi.enti.vocabulary",
    )
    directives.widget(destinatari=CheckBoxFieldWidget)
    directives.widget(tipologia_bando=RadioFieldWidget)
    form.widget(
        "ufficio_responsabile",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )
    form.widget(
        "area_responsabile",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )
    form.widget(
        "scadenza_domande_bando",
        DatetimeFieldWidget,
        default_timezone=default_timezone,
    )
    model.fieldset(
        "correlati",
        label=_("correlati_label", default="Contenuti collegati"),
        fields=["area_responsabile", "ufficio_responsabile"],
    )
Пример #10
0
class IEvento(model.Schema):
    """Marker inteerface for content type Evento"""

    sottotitolo = schema.TextLine(
        title=_("sottotitolo_label", default="Sottotitolo"),
        description=_(
            "sottotitolo_help",
            default="Indica un eventuale sottotitolo/titolo alternativo.",
        ),
        required=False,
    )
    descrizione_estesa = BlocksField(
        title=_("descrizione_estesa", default="Descrizione estesa"),
        required=False,
        description=_(
            "descrizione_estesa_help",
            default="Descrizione dettagliata e completa.",
        ),
    )
    descrizione_destinatari = BlocksField(
        title=_("descrizione_destinatari", default="Descrizione destinatari"),
        required=False,
        description=_(
            "descrizione_destinatari_help",
            default="Descrizione dei principali interlocutori dell'evento.",
        ),
    )

    persone_amministrazione = RelationList(
        title="Persone dell'amministrazione che partecipano all'evento",
        default=[],
        value_type=RelationChoice(
            title=_("Persona dell'amministrazione"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        description=_(
            "persone_amministrazione_help",
            default="Elenco delle persone dell'amministrazione che"
            " parteciperanno all'evento.",
        ),
        required=False,
    )

    orari = BlocksField(
        title=_("orari", default="Informazioni sugli orari"),
        required=False,
        description=_(
            "orari_help",
            default="Informazioni sugli orari di svolgimento dell'evento.",
        ),
    )

    prezzo = BlocksField(
        title=_("prezzo", default="Prezzo"),
        required=False,
        description=_(
            "prezzo_help",
            default="Indicare il prezzo dell'evento, se presente, specificando"
            " se esistono formati diversi.",
        ),
    )
    organizzato_da_interno = RelationList(
        title=_("organizzato_da_interno_label", default="Organizzato da"),
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
        description=_(
            "organizzato_da_interno_help",
            default="Se l'evento è organizzato direttamente dal comune,"
            " indicare l'ufficio/ente organizzatore. I dati di contatto "
            "verranno presi direttamente dall'ufficio selezionato. Se l'evento"
            " non è organizzato direttamente dal comune, o si vogliono "
            "sovrascrivere alcuni dati di contatto, utilizzare i seguenti campi.",  # noqa
        ),
    )

    organizzato_da_esterno = BlocksField(
        title=_("organizzato_da_esterno_label", default="Organizzatore"),
        required=False,
        description=_(
            "organizzato_da_esterno_help",
            default=
            "Se l'evento non è organizzato direttamente dal comune oppure ha anche un organizzatore esterno,"
            " indicare il nome del contatto.",
        ),
    )
    telefono = schema.TextLine(
        title=_("telefono_event_help", default="Telefono"),
        description=_(
            "telefono_event_label",
            default="Indicare un riferimento telefonico per poter contattare"
            " gli organizzatori.",
        ),
        required=False,
    )
    fax = schema.TextLine(
        title=_("fax_event_help", default="Fax"),
        description=_("fax_event_label", default="Indicare un numero di fax."),
        required=False,
    )
    reperibilita = schema.TextLine(
        title=_("reperibilita", default="Reperibilità organizzatore"),
        required=False,
        description=_(
            "reperibilita_help",
            default="Indicare gli orari in cui l'organizzatore è"
            " telefonicamente reperibile.",
        ),
    )
    email = schema.TextLine(
        title=_("email_event_label", default="E-mail"),
        description=_(
            "email_event_help",
            default="Indicare un indirizzo mail per poter contattare"
            " gli organizzatori.",
        ),
        required=False,
    )

    web = schema.TextLine(
        title=_("web_event_label", default="Sito web"),
        description=_(
            "web_event_help",
            default="Indicare un indirizzo web di riferimento a "
            "questo evento.",
        ),
        required=False,
    )
    supportato_da = RelationList(
        title=_("supportato_da_label", default="Evento supportato da"),
        required=False,
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        description=_(
            "supportato_da_help",
            default="Indicare gli uffici/enti che supportano l'evento.",
        ),
    )

    # TODO: come fare il rating/recensione dell'evento

    patrocinato_da = schema.TextLine(
        title=_("patrocinato_da_label", default="Patrocinato da"),
        required=False,
        description=_(
            "patrocinato_da_help",
            default="Indicare l'ente che supporta l'evento, se presente.",
        ),
    )

    # custom widgets
    form.widget(
        "supportato_da",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )
    form.widget(
        "organizzato_da_interno",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Persona", "UnitaOrganizzativa", "Servizio"],
        },
    )
    form.widget(
        "persone_amministrazione",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Persona"],
        },
    )

    # custom fieldsets and order
    form.order_before(sottotitolo="ILeadImageBehavior.image")

    model.fieldset(
        "cose",
        label=_("cose_label", default="Cos'è"),
        fields=[
            "descrizione_estesa",
            "descrizione_destinatari",
            "persone_amministrazione",
        ],
    )
    model.fieldset(
        "date_e_orari",
        label=_("date_e_orari_label", default="Date e orari"),
        fields=["orari"],
    )
    model.fieldset("costi",
                   label=_("costi_label", default="Costi"),
                   fields=["prezzo"])
    model.fieldset(
        "contatti",
        label=_("contatti_label", default="Contatti"),
        fields=[
            "organizzato_da_interno",
            "organizzato_da_esterno",
            "telefono",
            "fax",
            "reperibilita",
            "email",
            "web",
            "supportato_da",
        ],
    )
    model.fieldset(
        "informazioni",
        label=_("informazioni_label", default="Ulteriori informazioni"),
        fields=["patrocinato_da"],
    )

    dexteritytextindexer.searchable("descrizione_estesa")
Пример #11
0
class ILuogo(model.Schema):
    """ """

    # moved to behavior under field name descrizione_estesa?
    descrizione_completa = BlocksField(
        title=_("descrizione_completa", default="Descrizione completa"),
        description=_(
            "help_descrizione_completa",
            default="Indicare una descrizione completa, inserendo tutte le"
            " informazioni rilevanti relative al luogo",
        ),
        required=False,
    )

    nome_alternativo = schema.TextLine(
        title=_("nome_alternativo", default="Nome alternativo"),
        description=_(
            "help_nome_alternativo",
            default="Indicare, se esiste, un nome alternativo per il luogo;"
            " questo sarà mostrato affianco al titolo della"
            " scheda",
        ),
        required=False,
    )

    elementi_di_interesse = BlocksField(
        title=_("elementi_di_interesse", default="Elementi di interesse"),
        description=_(
            "help_elementi_di_interesse",
            default="Indicare eventuali elementi di interesse per il " "cittadino.",
        ),
        required=False,
    )

    modalita_accesso = BlocksField(
        title=_("modalita_accesso", default="Modalita' di accesso"),
        description=_(
            "help_modalita_accesso",
            default="Indicare tutte le informazioni relative alla modalità di"
            " accesso al luogo",
        ),
        required=False,
    )

    struttura_responsabile_correlati = RelationList(
        title=_(
            "struttura_responsabile_correlati",
            default="Struttura responsabile del luogo.",
        ),
        description=_(
            "struttura_responsabile_correlati_help",
            default="Indicare la struttura responsabile del luogo qualora sia"
            " fra unità organizzative del comune inserite nel sito; altrimenti"
            " compilare i campi testuali relativi alla struttura responsabile",
        ),
        value_type=RelationChoice(
            title=_("Struttura responsabile"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
        default=[],
    )

    struttura_responsabile = BlocksField(
        title=_("struttura_responsabile", default="Struttura responsabile"),
        required=False,
        description=_(
            "struttura_responsabile_help",
            default="Nome/link al sito web della struttura che gestisce il"
            " luogo, se questa non è comunale.",
        ),
    )

    riferimento_telefonico_struttura = schema.TextLine(
        title=_(
            "riferimento_telefonico_struttura",
            default="Telefono della struttura responsabile",
        ),
        description=_(
            "help_riferimento_telefonico_struttura",
            default="Indicare il riferimento telefonico per poter contattare"
            " i referenti della struttura responsabile.",
        ),
        required=False,
    )
    riferimento_fax_struttura = schema.TextLine(
        title=_(
            "riferimento_fax_struttura",
            default="Fax della struttura responsabile",
        ),
        description=_(
            "help_riferimento_fax_struttura",
            default="Indicare un numero di fax della struttura responsabile.",
        ),
        required=False,
    )
    riferimento_mail_struttura = schema.TextLine(
        title=_(
            "riferimento_mail_struttura",
            default="E-mail struttura responsabile",
        ),
        description=_(
            "help_riferimento_mail_struttura",
            default="Indicare un indirizzo mail per poter contattare"
            " i referenti della struttura responsabile.",
        ),
        required=False,
    )

    riferimento_pec_struttura = schema.TextLine(
        title=_(
            "riferimento_pec_struttura",
            default="Pec della struttura responsabile",
        ),
        description=_(
            "help_riferimento_pec_struttura",
            default="Indicare un indirizzo pec per poter contattare"
            " i referenti della struttura responsabile.",
        ),
        required=False,
    )

    # Decisono con Baio di toglierlo: visto il vocabolario, che in realtà sta
    # qui: https://github.com/italia/daf-ontologie-vocabolari-controllati/tree/master/VocabolariControllati/classifications-for-culture/subject-disciplines
    # riteniamo che possa non fregare nulla a nessuno di questa categorizzazione.
    #  # TODO: aggiungere il vocabolario da https://dataportal.daf.teamdigitale.it/#/vocabularies/subject-disciplines  # noqa
    # # quando ritornano i dati dopo la migrazione, bisognera' vedere dove sono
    # # finiti, link invalido al momento
    # categoria_prevalente = schema.Choice(
    #     title=_("categoria_prevalente", default="Categoria prevalente"),
    #     required=False,
    #     vocabulary="design.plone.contenttypes.Mockup",
    #     missing_value=None,
    #     default=None,
    # )

    # TODO: importare il db del MIBAC, codice DBUnico / ISIL.
    # Non compare nel frontend
    # identificativo_mibac = schema.TextLine(
    #     title=_("identificativo_mibac", default="Identificativo"),
    #     required=False,
    # )

    # custom fieldsets and order
    form.order_after(nome_alternativo="IBasic.title")

    model.fieldset(
        "descrizione",
        label=_("descrizione_label", default="Descrizione"),
        fields=["descrizione_completa", "elementi_di_interesse"],
    )
    model.fieldset(
        "accesso",
        label=_("accesso_label", default="Modalità di accesso"),
        fields=["modalita_accesso"],
    )

    model.fieldset(
        "contatti",
        label=_("contatti_label", default="Contatti"),
        fields=[
            "struttura_responsabile_correlati",
            "struttura_responsabile",
            "riferimento_telefonico_struttura",
            "riferimento_fax_struttura",
            "riferimento_mail_struttura",
            "riferimento_pec_struttura",
        ],
    )

    # custom widgets
    form.widget(
        "struttura_responsabile_correlati",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )

    # searchabletext indexer
    dexteritytextindexer.searchable("descrizione_completa")
class IDocumento(model.Schema, IDesignPloneContentType):
    """Marker interface for content type Documento"""

    identificativo = schema.TextLine(
        title=_(
            "identificativo_documento_label",
            default="Identificativo del documento.",
        ),
        description=_(
            "identificativo_documento_help",
            default="Un numero identificativo del documento.",
        ),
        required=False,
    )

    tipologia_documento = schema.Choice(
        title=_("tipologia_documento_label",
                default="Tipologia del documento"),
        description=_(
            "tipologia_documento_help",
            default="Seleziona la tipologia del documento.",
        ),
        required=True,
        vocabulary="design.plone.vocabularies.tipologie_documento",
    )

    ufficio_responsabile = RelationList(
        title=_(
            "ufficio_responsabile_documento_label",
            default="Ufficio responsabile del documento",
        ),
        description=_(
            "ufficio_responsabile_documento_help",
            default="Seleziona l'ufficio responsabile di questo documento.",
        ),
        required=False,
        default=[],
        value_type=RelationChoice(
            title=_("Ufficio responsabile"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
    )

    area_responsabile = RelationList(
        title=_(
            "area_responsabile_label",
            default="Area responsabile del documento",
        ),
        description=_(
            "area_responsabile_help",
            default="Seleziona l'area amministrativa responsabile del "
            "documento.",
        ),
        required=False,
        default=[],
        value_type=RelationChoice(title=_("Area"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
    )

    autori = RelationList(
        title=_(
            "autori_label",
            default="Autore/i",
        ),
        description=_(
            "autori_help",
            default="Seleziona una lista di autori che hanno pubblicato "
            "il documento. Possono essere Persone o Unità Organizzative.",
        ),
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
        default=[],
    )

    licenza_distribuzione = schema.TextLine(
        title=_("licenza_distribuzione_label",
                default="Licenza di distribuzione"),
        description=_(
            "licenza_distribuzione_help",
            default=
            "La licenza con il quale viene distribuito questo documento.",
        ),
        required=False,
    )

    riferimenti_normativi = BlocksField(
        title=_(
            "riferimenti_normativi_documento_label",
            default="Riferimenti normativi",
        ),
        description=_(
            "riferimenti_normativi_documento_help",
            default="Inserisici del testo di dettaglio per eventuali "
            "riferimenti normativi utili a questo documento.",
        ),
        required=False,
    )

    documenti_allegati = RelationList(
        title=_(
            "documenti_allegati_label",
            default="Documenti allegati",
        ),
        description=_(
            "documenti_allegati_help",
            default="Seleziona una serie di altri contenuti di tipo Documento "
            "che vanno allegati a questo.",
        ),
        default=[],
        required=False,
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
    )

    # custom widgets
    form.widget(
        "ufficio_responsabile",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )

    form.widget(
        "autori",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Persona", "UnitaOrganizzativa"],
        },
    )
    form.widget(
        "area_responsabile",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )
    form.widget(
        "documenti_allegati",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Documento"]
        },
    )

    #  custom fieldsets
    model.fieldset(
        "descrizione",
        label=_("descrizione_label", default="Descrizione"),
        fields=[
            "ufficio_responsabile",
            "area_responsabile",
            "autori",
            "licenza_distribuzione",
        ],
    )

    model.fieldset(
        "informazioni",
        label=_("informazioni_label", default="Ulteriori informazioni"),
        fields=["riferimenti_normativi", "documenti_allegati"],
    )

    # custom order
    form.order_after(
        ufficio_responsabile="IDescrizioneEstesaDocumento.descrizione_estesa")
    form.order_after(area_responsabile="ufficio_responsabile")
    form.order_after(autori="area_responsabile")
    form.order_after(licenza_distribuzione="autori")
    form.order_after(
        riferimenti_normativi="IAdditionalHelpInfos.ulteriori_informazioni")
    form.order_after(documenti_allegati="riferimenti_normativi")
class IUnitaOrganizzativa(model.Schema, IDesignPloneContentType):
    """Marker interface for content type UnitaOrganizzativa"""

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

    legami_con_altre_strutture = RelationList(
        title="Servizi 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",
        value_type=RelationChoice(
            title=_("Responsabile"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        description=_(
            "responsabile_help",
            default="Selezionare il/i responsabile/i della struttura.",
        ),
        default=[],
        required=False,
    )

    tipologia_organizzazione = schema.Choice(
        title=_("tipologia_organizzazione",
                default="Tipologia organizzazione"),
        # vocabolario di rif sara' la lista delle tipologie di organizzazione
        vocabulary=""
        "design.plone.vocabularies.tipologie_unita_organizzativa",
        description=_(
            "tipologia_organizzazione_help",
            default="Specificare la tipologia di organizzazione: politica,"
            " amminsitrativa o di altro tipo.",
        ),
        required=False,
    )

    assessore_riferimento = RelationList(
        title="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 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 principale",
        default=[],
        description=_(
            "sede_help",
            default="Seleziona il Luogo in cui questa struttura ha sede. "
            "Se non è presente un contenuto di tipo Luogo a cui far "
            "riferimento, puoi compilare i campi seguenti. Se selezioni un "
            "Luogo, puoi usare comunque i campi seguenti per sovrascrivere "
            "alcune informazioni.",
        ),
        value_type=RelationChoice(title=_("Sede"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
    )

    sedi_secondarie = RelationList(
        title="Sedi secondarie",
        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,
    )

    contact_info = BlocksField(
        title=_("contact_info", default="Informazioni di contatto generiche"),
        required=False,
        description=_(
            "uo_contact_info_description",
            default="Inserisci eventuali informazioni di contatto aggiuntive "
            "non contemplate nei campi precedenti. "
            "Utilizza questo campo se ci sono dei contatti aggiuntivi rispetto"
            " ai contatti della sede principale. Se inserisci un collegamento "
            'con un indirizzo email, aggiungi "mailto:" prima dell\'indirizzo'
            ", per farlo aprire direttamente nel client di posta.",
        ),
    )

    #  custom widgets
    form.widget(
        "persone_struttura",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "selectableTypes": ["Persona"],
            "maximumSelectionSize": 50
        },
    )
    form.widget(
        "legami_con_altre_strutture",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "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={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Venue"],
            # "basePath": "/servizi",
        },
    )

    # custom fieldsets and order
    model.fieldset(
        "cosa_fa",
        label=_("cosa_fa_label", default="Cosa fa"),
        fields=["competenze"],
    )
    model.fieldset(
        "struttura",
        label=_("struttura_label", default="Struttura"),
        fields=[
            "legami_con_altre_strutture",
            "responsabile",
            "tipologia_organizzazione",
            "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", "contact_info"],
    )
    form.order_after(
        sedi_secondarie="IContattiUnitaOrganizzativa.orario_pubblico")
    form.order_after(contact_info="sedi_secondarie")

    # SearchableText indexers
    dexteritytextindexer.searchable("competenze")
    dexteritytextindexer.searchable("tipologia_organizzazione")
    dexteritytextindexer.searchable("assessore_riferimento")
    dexteritytextindexer.searchable("responsabile")
class IServizio(model.Schema, IDesignPloneContentType):
    """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,
    )

    # TODO: stato servizio vuol dire si o no? Inoltre, deve essere visibile
    # solo se il servizio
    # non e' attivo
    stato_servizio = schema.Bool(
        title=_("stato_servizio_label", default="Servizio non attivo"),
        required=False,
        description=_(
            "stato_servizio_help",
            default="Indica se il servizio è effettivamente fruibile.",
        ),
    )

    motivo_stato_servizio = BlocksField(
        title=_(
            "motivo_stato_servizio_label",
            default="Motivo dello stato del servizio nel caso non sia attivo",
        ),
        required=False,
        description=_(
            "motivo_stato_servizio_help",
            default="Descrizione del motivo per cui il servizio non è attivo.",
        ),
    )

    a_chi_si_rivolge = BlocksField(
        title=_("a_chi_si_rivolge_label", default="A chi si rivolge"),
        required=False,
        description=_(
            "a_chi_si_rivolge_help",
            default="A chi si rivolge questo servizio e chi può usufruirne.",
        ),
    )

    chi_puo_presentare = BlocksField(
        title=_("chi_puo_presentare_label", default="Chi può presentare"),
        required=False,
        description=_(
            "chi_puo_presentare_help",
            default="Descrizione di chi può presentare domanda per usufruire"
            " del servizio e delle diverse casistiche.",
        ),
    )

    copertura_geografica = BlocksField(
        title=_("copertura_geografica_label", default="Copertura geografica"),
        required=False,
        description=_(
            "copertura_geografica_help",
            default="Indicare se il servizio si riferisce ad una particolare"
            " area geografica o all'intero territorio di riferimento.",
        ),
    )

    come_si_fa = BlocksField(
        title=_("come_si_fa", default="Come si fa"),
        required=False,
        description=_(
            "come_si_fa_help",
            default="Descrizione della procedura da seguire per poter"
            " usufruire del servizio.",
        ),
    )

    cosa_si_ottiene = BlocksField(
        title=_("cosa_si_ottiene", default="Cosa si ottiene"),
        description=_(
            "cosa_si_ottiene_help",
            default="Indicare cosa si può ottenere dal servizio, ad esempio"
            " 'carta di identità elettronica', 'certificato di residenza'.",
        ),
        required=False,
    )

    procedure_collegate = BlocksField(
        title=_("procedure_collegate",
                default="Procedure collegate all'esito"),
        required=False,
        description=_(
            "procedure_collegate_help",
            default="Indicare cosa deve fare l'utente del servizio per"
            " conoscere l'esito della procedura, e dove eventualmente"
            " poter ritirare l'esito.",
        ),
    )

    canale_digitale = BlocksField(
        title=_("canale_digitale", default="Canale digitale"),
        description=_(
            "canale_digitale_help",
            default="Collegamento con l'eventuale canale digitale di"
            " attivazione del servizio.",
        ),
        required=False,
    )

    autenticazione = BlocksField(
        title=_("autenticazione", default="Autenticazione"),
        description=_(
            "autenticazione_help",
            default="Indicare, se previste, le modalità di autenticazione"
            " necessarie per poter accedere al servizio.",
        ),
        required=False,
    )

    dove_rivolgersi = RelationList(
        title="Dove rivolgersi",
        default=[],
        value_type=RelationChoice(vocabulary="plone.app.vocabularies.Catalog"),
        required=False,
        description=_(
            "dove_rivolgersi_help",
            default=
            "Seleziona una lista delle sedi e dei luoghi in cui è presente"
            " questo servizio.",
        ),
    )

    dove_rivolgersi_extra = BlocksField(
        title=_(
            "dove_rivolgersi_extra",
            default="Dove rivolgersi: informazioni aggiuntive",
        ),
        description=_(
            "dove_rivolgersi_extra_help",
            default=
            "Indicare eventuali informazioni aggiuntive riguardo al dove "
            "rivolgersi per questo servizio.",
        ),
        required=False,
    )

    prenota_appuntamento = BlocksField(
        title=_("prenota_appuntamento", default="Prenota un appuntamento"),
        description=_(
            "prenota_appuntamento_help",
            default="Se è possibile prenotare un'appuntamento, indicare"
            " le informazioni necessarie e il collegamento al servizio di "
            "prenotazione appuntamenti del Comune.",
        ),
        required=False,
    )

    tempi_e_scadenze = BlocksField(
        title=_("tempi_e_scadenze", default="Tempi e scadenze"),
        required=False,
        description=_(
            "tempi_e_scadenze_help",
            default=
            "Descrivere le informazioni dettagliate riguardo eventuali tempi"
            " e scadenze di questo servizio.",
        ),
    )

    cosa_serve = BlocksField(
        title=_("cosa_serve", default="Cosa serve"),
        required=True,
        description=_(
            "cosa_serve_help",
            default="Descrizione delle istruzioni per usufruire del servizio.",
        ),
    )

    costi = BlocksField(
        title=_("costi", default="Costi"),
        required=False,
        description=_(
            "costi_help",
            default="Descrizione delle condizioni e dei termini economici per"
            " completare la procedura di richiesta del servizio.",
        ),
    )

    vincoli = BlocksField(
        title=_("vincoli", default="Vincoli"),
        required=False,
        description=_(
            "vincoli_help",
            default="Descrizione degli eventuali vincoli presenti.",
        ),
    )

    casi_particolari = BlocksField(
        title=_("casi_particolari", default="Casi particolari"),
        required=False,
        description=_(
            "casi_particolari_help",
            default="Descrizione degli evetuali casi particolari riferiti"
            " alla fruibilità di questo servizio.",
        ),
    )

    # vocabolario dalle unita' organizzative presenti a catalogo?
    ufficio_responsabile = RelationList(
        title=_("ufficio_responsabile_erogazione",
                default="Uffici responsabili"),
        description=_(
            "ufficio_responsabile_help",
            default="Seleziona gli uffici responsabili dell'erogazione"
            " di questo servizio.",
        ),
        required=True,
        default=[],
        value_type=RelationChoice(
            title=_("Ufficio responsabile"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
    )

    area = RelationList(
        title=_("area", default="Area"),
        required=False,
        default=[],
        description=_(
            "area_help",
            default="Seleziona l'area da cui dipende questo servizio.",
        ),
        value_type=RelationChoice(title=_("Area"),
                                  vocabulary="plone.app.vocabularies.Catalog"),
    )

    altri_documenti = RelationList(
        title="Documenti correlati",
        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,
    )

    link_siti_esterni = BlocksField(
        title=_("link_siti_esterni", default="Link a siti esterni"),
        required=False,
        description=_(
            "link_siti_esterni_help",
            default="Eventuali collegamenti a pagine web, siti, servizi"
            " esterni all'ambito Comunale utili all'erogazione del servizio.",
        ),
    )

    codice_ipa = schema.TextLine(
        title=_("codice_ipa", default="Codice dell'ente erogatore (ipa)"),
        required=False,
        description=_(
            "codice_ipa_help",
            default="Specificare il nome dell’organizzazione, come indicato"
            " nell’Indice della Pubblica Amministrazione (IPA), che esercita"
            " uno specifico ruolo sul Servizio.",
        ),
    )

    # classificazione basata sul catalogo dei servizi, stringa o lista?
    settore_merceologico = schema.TextLine(
        title=_("settore_merceologico", default="Settore merceologico"),
        required=False,
        description=_(
            "settore_merceologico_help",
            default="Classificazione del servizio basata su catalogo dei"
            " servizi (Classificazione NACE).",
        ),
    )

    identificativo = schema.TextLine(
        title=_("identificativo", default="Identificativo"),
        required=False,
        description=_(
            "identificativo_help",
            default="Eventuale codice identificativo del servizio.",
        ),
    )

    servizi_collegati = RelationList(
        title="Servizi collegati",
        default=[],
        value_type=RelationChoice(
            title=_("Servizi collegati"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        required=False,
        description=_(
            "servizi_collegati_help",
            default="Seleziona la lista dei servizi collegati"
            " a questo.",
        ),
    )

    # custom widgets
    form.widget(
        "dove_rivolgersi",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Venue", "UnitaOrganizzativa"],
        },
    )

    form.widget(
        "area",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 1,
            "selectableTypes": ["UnitaOrganizzativa"],
            # "basePath": "/amministrazione/aree-amministrative",
        },
    )
    form.widget(
        "ufficio_responsabile",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["UnitaOrganizzativa"],
            # "basePath": "/amministrazione/uffici",
        },
    )
    form.widget(
        "altri_documenti",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Documento", "CartellaModulistica"],
            # "basePath": "/",
        },
    )
    form.widget(
        "servizi_collegati",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["Servizio"],
            # "basePath": "/",
        },
    )

    # custom fieldset and order
    model.fieldset(
        "a_chi_si_rivolge",
        label=_("a_chi_si_rivolge_label", default="A chi si rivolge"),
        fields=[
            "a_chi_si_rivolge", "chi_puo_presentare", "copertura_geografica"
        ],
    )
    model.fieldset(
        "accedi_al_servizio",
        label=_("accedi_al_servizio_label", default="Accedere al servizio"),
        fields=[
            "come_si_fa",
            "cosa_si_ottiene",
            "procedure_collegate",
            "canale_digitale",
            "autenticazione",
            "dove_rivolgersi",
            "dove_rivolgersi_extra",
            "prenota_appuntamento",
        ],
    )
    model.fieldset(
        "cosa_serve",
        label=_("cosa_serve_label", default="Cosa serve"),
        fields=["cosa_serve"],
    )
    model.fieldset(
        "costi_e_vincoli",
        label=_("costi_e_vincoli_label", default="Costi e vincoli"),
        fields=["costi", "vincoli"],
    )

    model.fieldset(
        "tempi_e_scadenze",
        label=_("tempi_e_scadenze_label", default="Tempi e scadenze"),
        fields=["tempi_e_scadenze"],
    )

    model.fieldset(
        "casi_particolari",
        label=_("casi_particolari_label", default="Casi particolari"),
        fields=["casi_particolari"],
    )

    model.fieldset(
        "contatti",
        label=_("contatti_label", default="Contatti"),
        fields=["ufficio_responsabile", "area"],
    )
    model.fieldset(
        "documenti",
        label=_("documenti_label", default="Documenti"),
        fields=["altri_documenti"],
    )
    model.fieldset(
        "link_utili",
        label=_("link_utili_label", default="Link utili"),
        fields=["link_siti_esterni"],
    )

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

    model.fieldset(
        "categorization",
        fields=["codice_ipa", "settore_merceologico", "identificativo"],
    )

    # SearchableText fields
    dexteritytextindexer.searchable("sottotitolo")
    dexteritytextindexer.searchable("a_chi_si_rivolge")
    dexteritytextindexer.searchable("chi_puo_presentare")
    dexteritytextindexer.searchable("come_si_fa")
    dexteritytextindexer.searchable("cosa_si_ottiene")
    dexteritytextindexer.searchable("cosa_serve")
    dexteritytextindexer.searchable("area")
    dexteritytextindexer.searchable("ufficio_responsabile")
    dexteritytextindexer.searchable("copertura_geografica")
    dexteritytextindexer.searchable("costi")
    dexteritytextindexer.searchable("servizi_collegati")
    dexteritytextindexer.searchable("link_siti_esterni")
Пример #15
0
class IPersona(model.Schema, IDesignPloneContentType):
    """Marker interface for contenttype Persona"""

    foto_persona = field.NamedImage(
        title=_("foto_persona_label", default="Foto della persona"),
        required=False,
        description=_(
            "foto_persona_help",
            default="Foto da mostrare della persona. "
            "La dimensione suggerita è 180x100 px.",
        ),
    )
    ruolo = schema.Choice(
        title=_("ruolo_label", default="Ruolo"),
        description=_(
            "ruolo_help",
            default="Seleziona il ruolo della persona tra quelli disponibili.",
        ),
        vocabulary="design.plone.contenttypes.RuoliPersona",
        required=True,
    )

    organizzazione_riferimento = RelationList(
        title=_(
            "organizzazione_riferimento_label",
            default="Organizzazione di riferimento",
        ),
        description=_(
            "organizzazione_riferimento_help",
            default="Seleziona una lista di organizzazioni a cui la persona"
            " appartiene.",
        ),
        value_type=RelationChoice(
            title=_("Organizzazione di riferimento"),
            vocabulary="plone.app.vocabularies.Catalog",
        ),
        default=[],
        required=False,
    )

    data_conclusione_incarico = schema.Date(
        title=_(
            "data_conclusione_incarico_label",
            default="Data conclusione incarico",
        ),
        description=_(
            "data_conclusione_incarico_help",
            default="Data di conclusione dell'incarico.",
        ),
        required=False,
    )

    competenze = BlocksField(
        title=_("competenze_label", default="Competenze"),
        description=_(
            "competenze_help",
            default="Descrizione del ruolo e dei compiti della persona.",
        ),
        required=False,
    )
    deleghe = BlocksField(
        title=_("deleghe_label", default="Deleghe"),
        description=_(
            "deleghe_help",
            default="Elenco delle deleghe a capo della persona.",
        ),
        required=False,
    )

    tipologia_persona = schema.Choice(
        title=_("tipologia_persona_label", default="Tipologia persona"),
        description=_(
            "tipologia_persona_help",
            default="Seleziona la tipologia di persona: politica,"
            " amministrativa o di altro tipo.",
        ),
        vocabulary="design.plone.contenttypes.TipologiaPersona",
        required=True,
    )

    data_insediamento = schema.Date(
        title=_("data_insediamento_label", default="Data insediamento"),
        description=_(
            "data_insediamento_help",
            default="Solo per persona politica: specificare la data di"
            " insediamento.",
        ),
        required=False,
    )

    biografia = BlocksField(
        title=_("biografia_label", default="Biografia"),
        description=_(
            "biografia_help",
            default="Solo per persona politica: testo descrittivo che riporta"
            " la biografia della persona.",
        ),
        required=False,
    )

    telefono = schema.List(
        title=_("telefono_persona_label", default="Numero di telefono"),
        description=_(
            "telefono_persona_help",
            default="Contatto telefonico della persona. E' possibile inserire "
            'più di un numero. Premendo "Invio" o "tab" si può passare al '
            "successivo da inserire.",
        ),
        value_type=schema.TextLine(),
        missing_value=[],
        default=[],
        required=False,
    )
    fax = schema.TextLine(
        title=_("fax_persona_label", default="Fax"),
        description=_("fax_persona_help",
                      default="Indicare un numero di fax."),
        required=False,
    )
    email = schema.List(
        title=_("email_persona_label", default="Indirizzo email"),
        description=_(
            "email_persona_help",
            default="Contatto mail della persona. E' possibile inserire più"
            ' di un indirizzo. Premendo "Invio" o "tab" si può passare al '
            "successivo da inserire.",
        ),
        value_type=schema.TextLine(),
        missing_value=[],
        default=[],
        required=False,
    )
    curriculum_vitae = field.NamedBlobFile(
        title=_("curriculum_vitae_label", default="Curriculum vitae"),
        required=False,
        description=_(
            "curriculum_vitae_help",
            default=
            "Allega un file contenente il curriculum vitae della persona. "
            "Se ha più file da allegare, utilizza questo campo per quello principale "
            'e gli altri mettili dentro alla cartella "Curriculum vitae" che troverai dentro alla Persona.',
        ),
    )

    atto_nomina = field.NamedFile(
        title=_("atto_nomina_label", default="Atto di nomina"),
        required=False,
        description=_(
            "atto_nomina_help",
            default="Inserire un file contenente l'atto di nomina della"
            " persona.",
        ),
    )

    # custom widgets
    form.widget(
        "organizzazione_riferimento",
        RelatedItemsFieldWidget,
        vocabulary="plone.app.vocabularies.Catalog",
        pattern_options={
            "maximumSelectionSize": 10,
            "selectableTypes": ["UnitaOrganizzativa"],
        },
    )

    # custom fieldsets
    model.fieldset(
        "ruolo",
        label=_("ruolo_label", default="Ruolo"),
        fields=[
            "ruolo",
            "organizzazione_riferimento",
            "data_conclusione_incarico",
            "competenze",
            "deleghe",
            "tipologia_persona",
            "data_insediamento",
            "biografia",
        ],
    )
    model.fieldset(
        "contatti",
        label=_("contatti_label", default="Contatti"),
        fields=["telefono", "fax", "email"],
    )
    model.fieldset(
        "documenti",
        label=_("documenti_label", default="Documenti"),
        fields=["curriculum_vitae", "atto_nomina"],
    )
    # SearchableText fields
    dexteritytextindexer.searchable("ruolo")
    dexteritytextindexer.searchable("competenze")
    dexteritytextindexer.searchable("deleghe")
    dexteritytextindexer.searchable("tipologia_persona")
    dexteritytextindexer.searchable("telefono")
    dexteritytextindexer.searchable("fax")
    dexteritytextindexer.searchable("email")