formulaColumn dinamiche¶
Supponiamo di voler calcolare, nella tabella prodotto di Sandbox il totale fatturato per ogni regione. Ciò richiederebbe la creazione di n formulaColumn, una per ogni regione, così costruite:
tbl.formulaColumn('fatt_LOM', select=dict(table='fatt.fattura_riga',
columns='SUM($prezzo_totale)', where='$prodotto_id=#THIS.id AND @fattura_id.@cliente_id.@provincia.regione=:reg',
reg='LOM', dtype='N', name_long='Fatturato LOM',
group='fatt_reg')
Non avendo però la tabella delle regioni a disposizione, in fase di definizione del model, l’unica opzione sarebbe quella di inserire manualmente la lista delle regioni e inserire la generazione delle formulaColumn all’interno di un ciclo, soluzione però poco pratica e poco versatile, dal momento che richiede da parte nostra la conoscenza e l’elencazione degli elementi (in questo caso le regioni) sui quali innescare il ciclo.
In alternativa, Genropy mette a disposizione le formulaColumn dinamiche, ovvero dei metodi di hook formulaColumn_
, che permettono al loro interno di eseguire le operazioni di lettura necessarie e innescare cicli che restituiscono al termine una lista di dizionari che descrivono le nostre formulaColumn
def formulaColumn_dati_regionali(self):
regioni = self.db.table('glbl.regione').query().fetch()
result = []
for r in regioni:
result.append(
dict(name=f'fatturato_{r["sigla"]}', select=dict(table='fatt.fattura_riga',
columns='SUM($prezzo_totale)', where='$prodotto_id=#THIS.id AND @fattura_id.@cliente_id.@provincia.regione=:reg',
reg=r['sigla']), dtype='N', name_long=f'Fatturato {r["sigla"]}',
group='fatt_reg'))
return result
Si noti l’utilizzo di group
, che permette, se preventivamente definito un gruppo nella table , di raggruppare tutte le formulaColumn così generate sotto un unico gruppo nell’albero delle viste e delle query.
Parametri:
Nome parametro |
Tipo |
Descrizione |
---|---|---|
value |
T |
Generalmente implicito, permette di calcolare un valore secondo una regola definita come una stringa di SQL |
static |
B |
|
select |
T |
Alternativamente al value calcolato, la formulaColumn può restituire un valore originato da una query, i cui parametri possono essere indicati con un dizionario all’interno di questo parametro. Può contenere tutti i parametri di una query («table», «where», «columns», «condition», «order_by», «limit») |
var_ |
T |
È possibile passare tutte le variabili che si vuole alla formulaColumn precedute da var_ (es: var_data_rif=”2015-01-01”), in questo modo non andranno a mischiarsi agli altri parametri. |
ask |
T |
Permette di identificare in un dizionario i parametri da richiedere all’utente al trascinamento della colonna nella vista, che verranno poi utilizzati dalla colonna (es. ask=dic t(title=”Regione”,fields=[dict(name=”regione”, tag=”dbSelect”, table=”glbl.regione”, lbl=”Regione”)])) |
fieldname |
T |
In caso di formulaColumn parametriche permette di pre-impostare un template per la generazione del nome della colonna, così da non richiederlo all’utente (es: fieldname=”tot_fatt_$data_rif”) |
header |
T |
In caso di formulaColumn parametriche permette di pre-impostare un template per la generazione dell’etichetta della colonna, così da non richiederla all’utente (es: header=”Tot.Fatt. al $data_rif”) |
Autore della sezione: Davide Paci