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, )
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", ], )
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")
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, )
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"], )
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")
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")
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")