-
Notifications
You must be signed in to change notification settings - Fork 21
Mixin
Questa pagina raccoglie una serie di Mixin. I Mixin sono delle estensioni che possono essere applicate ai modelli per aggiungere delle funzionalità.
Per applicare il Mixin, aggiungere il nome della classe del Mixin tra parentesi. Questo estenderà la classe.
class Attivita(ModelloSemplice, ConCommenti)
# ...
Dopo aver applicato un Mixin ad una classe, sarà necessario creare una migrazione ed applicarla, come per ogni altra modifica ai modelli.
python3 manage.py makemigrations
python3 manage.py migrate
Questo Mixin aggiunge una posizione opzionale geografica e fornisce dei metodi per facilitarne l'individuazione a partire da un indirizzo, sfruttando il servizio esposto dalle Google Maps API.
Vedi Locazione per maggiori informazioni.
- Metodi
-
imposta_locazione(indirizzo)
, imposta la locazione a partire da una stringa contenente un indirizzo inserito da un utente (già presente o da ricercare su Google Maps). Vedi Locazione.
-
- Proprieta
-
locazione
, oggettoLocazione
oNone
se non localizzato
-
Questo Mixin rende il modello commentabile, ed aggiunge una proprietà che permette di accedere rapidamente ad un elenco di commenti.
Vedi Commenti per maggiori informazioni e per come inserire commenti.
- Proprieta
-
commenti
, il QuerySet di commenti (Commento) per l'oggetto
-
Questo Mixin rende il modello associabile a delle deleghe.
Vedi Deleghe per maggiori informazioni e per come inserire e modificare le deleghe.
- Proprieta
-
deleghe
(QuerySet<Delega>
), il QuerySet di deleghe, anche passate, per l'oggetto -
deleghe_attuali
(QuerySet<Delega>
), il QuerySet di deleghe (Delega) temporalmente valide per l'oggetto -
delegati
(QuerySet<Persona>
), il QuerySet di tutti i delegati (Persona), anche passati, per l'oggetto -
delegati_attuali
(QuerySet<Persona>
), il QuerySet di tutti i delegati (Persona) temporalmente validi per l'oggetto
-
Questo Mixin aggiunge le marche temporali automatiche per la creazione e l'ultima modifica.
- Proprieta
-
creazione
(DateTime
), data e ora automatiche di creazione dell'oggetto -
ultima_modifica
(DateTime
), data e ora automatiche di ultima modifica
-
Questo Mixin aggiunge la possibilità di aggiungere allegati.
- Proprieta
-
allegati
(QuerySet<Allegato>
), elenco degli allegati al file
-
Questo Mixin aggiunge la possibilità di aggiungere autorizzazioni. Questo Mixin viene usato dagli oggetti che rappresentano delle richieste che devono essere approvate da una o piu' persone.
- Proprieta
-
confermata
(bool
, sola lettura) controlla se le autorizzazioni sono state confermate o meno (NON USARE)
-
Per richiedere autorizzazione, usare il metodo:
ConAutorizzazioni.autorizzazione_richiedi(
richiedente,
destinatario=((RUOLO, OGGETTO), ...),
motivo_obbligatorio=true,
)
Dove:
-
richiedente
e' una Persona che effettua la richiesta, che viene autorizzato, -
destinatario
e' una tupla che contiene una o piu' tuple del tipo(RUOLO, OGGETTO, NOTIFICA)
, che rappresentano i destinatari che possono accettare questa richiesta:-
RUOLO
e' un tipo di delega, es: PRESIDENTE, REFERENTE, -
OGGETTO
e' l'oggetto di destinazione, es: il comitato di presidenza o l'attivita di referenza. -
NOTIFICA
(opzionale) qualora inviare la richiesta via e-mail o meno. Uno traNOTIFICA_INVIA
eNOTIFICA_NON_INVIARE
. Se non specificato, assuntoNOTIFICA_NON_INVIARE
,
-
-
motivo_obbligatorio
indica qualora sia necessario indicare una motivazione per negare questa autorizzazione.
Esempio:
Partecipazione.autorizzazione_richiedi(
richiedente=me,
destinatario=(PRESIDENTE, comitato, NOTIFICA_INVIA),
motivo_obbligatorio=false,
)
Qualora due figure possano accettare la stessa richiesta, indistintamente, si possono elencare i destinatari in questo modo:
# Questa partecipazione deve essere autorizzata
# dal presidente OPPURE dal REFERENTE
Partecipazione.autorizzazione_richiedi(
richiedente=me,
destinatario=(
(PRESIDENTE, comitato, NOTIFICA_NON_INVIARE),
(REFERENTE, attivita, NOTIFICA_INVIA)
)
motivo_obbligatorio=false,
)
Qualora siano obbligatorie due autorizzazioni da figure diverse, e' possibile chiamare piu' volte autorizzazione_richiedi
, in questo modo:
# Questa partecipazione deve essere autorizzata
# SIA DA (1) CHE DA (2)
# 1) dal presidente del mio comitato
Partecipazione.autorizzazione_richiedi(
richiedente=me,
destinatario=(
(PRESIDENTE, comitato_mio, NOTIFICA_INVIA),
)
motivo_obbligatorio=false,
)
# 2) dal presidente dell'altro comitato
Partecipazione.autorizzazione_richiedi(
richiedente=me,
destinatario=(
(PRESIDENTE, comitato_mio, NOTIFICA_INVIA),
)
motivo_obbligatorio=false,
)
Usare ConAutorizzazioni.esito
per controllare l'esito della richiesta.
L'esito puo' essere uno dei seguenti:
-
ConAutorizzazioni.ESITO_OK
: Tutte le autorizzazioni concesse -
ConAutorizzazioni.ESITO_OK
: Nessuna autorizzazione richiesta (!) -
ConAutorizzazioni.ESITO_RITIRATA
: Richiesta ritirata -
ConAutorizzazioni.ESITO_PENDING
: Richieste in attesa -
ConAutorizzazioni.ESITO_NO
: Una o piu' autt. non concesse
Chiamare il metodo:
ConAutorizzazioni.autorizzazioni_ritira()
E' possibile sovrascrivere i seguenti metodi per eseguire azioni non appena l'esito della richiesta cambia.
Seguono le firme delle funzioni.
def autorizzazione_concessa(self, modulo=None):
# Cosa fare in caso di autorizzazione concessa.
# Se specificato, modulo contiene una istanza di modulo validato.
# es. prosegui pratica e informa volontario che la richiesta e' andata a buon fine.
pass
def autorizzazione_negata(self, motivo=None):
# Cosa fare in caso di autorizzazione negata.
# motivo puo' contenere la motivazione della negazione.
# es. informa il volontario che la sua richiesta non e' andata a buon fine.
pass
Il comportamento standard del sistema di autorizzazione e' di mandare i seguenti messaggi di notifica, al richiedente:
- Quando viene concessa una richiesta,
- Quando viene negata una richiesta. E' possibile modificare il comportamento delle notifiche, globalmente o individualmente, sovrascrivendo gli attributi:
INVIA_NOTIFICHE = False # Disattiva globalmente
# ... oppure una sola tra ...
INVIA_NOTIFICHE_CONCESSA = False
INVIA_NOTIFICHE_NEGATA = False
In alcuni casi, e' necessario richiedere la compilazione di alcuni campi aggiuntivi per permettere l'approvazione della richiesta. Ad esempio, per accettare una richiesta di estensione, e' necessario inserire numero e data di protocollo per la richiesta.
E' possibile definire un modulo, che estenda forms.Form
, che si vuole fare riempire. Quindi, sovrascrivere il metodo ConAutorizzazioni.autorizzazione_concessa_modulo
in modo tale che ritorni la classe (e NON una istanza) del modulo.
Ad esempio, creando il modulo ModuloConcediEstensione
, si puo' quindi definire il seguente metodo:
def autorizzazione_concessa_modulo(self):
from base.forms import ModuloConcediEstensione
return ModuloConcediEstensione
Nel caso la richiesta venga accetatta, sara' possibile ottenere i dati compilati dal modulo validato all'interno del corpo del metodo autorizzazione_concessa
, attraverso il parametro modulo
.
Per trovare tutti gli oggetti sulla base dello stato dell'autorizzazione, si puo' usare il metodo:
@classmethod
ConAutorizzazioni.con_esito(
esito=ConAutorizzazioni.ESITO_OK
)
es.:
print "Sono state approvate %d richieste di partecipazione" % \
(Partecipazione.con_esito(Partecipazione.ESITO_OK).count(), )
- File
- Posta/E-mail
- Locazione (ex GeoEntita)
- Commenti
- Mixin
- Introduzione
- Tipi (elenco)
- Errori (elenco)
- Prefisso
- Metodi (elenco)