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