Blog

Come ereditare dei default tra record in relazione: l’attributo defaultFrom

Come ereditare dei default tra record in relazione: l'attributo defaultFrom

In una table gerarchica o in caso di record in relazione, può essere comodo prevedere la possibilità di far “ereditare” dei valori di record genitore o in relazione, così da offrire all’inserimento di un nuovo record un campo di default pre-compilato con il valore desiderato.

Supponiamo di trovarci nella tabella prodotto_tipo, una tipica tabella gerarchica di Genropy, dove quindi è possibile categorizzare i tipi di prodotto in una gerarchia con dei padri (es: “vernici”) e dei figli (es: “vernici antiruggine”, “primer”, “vernici metalli”). È ragionevole supporre che nel caso di alcuni campi di una tabella di questo tipo, come ad esempio il tipo_iva, questo sia comune tra i record “genitore” e i record “figlio”. Non sarebbe quindi comodo trovarsi il campo tipo_iva pre-popolato, nel momento in cui andrò a inserire un nuovo tipo_prodotto della medesima categoria “vernici”?


Ma non è necessario trovarsi in una tabella gerarchica: tutti i prodotti categorizzati nel tipo prodotto “Vernici per metalli” potrebbero veder applicare automaticamente un’aliquota iva del 10%. Sarebbe insomma interessante avere questa possibilità non solo all’interno delle tabelle gerarchiche ma in presenza di qualsivoglia record in relazione.


Ecco che in tutti questi casi ci viene in aiuto un attributo di colonna di Genropy, il defaultFrom.

In entrambi i casi l’utilizzo è molto semplice e si limita a specificare nella colonna di destinazione l’attributo defaultFrom. Nel model di prodotto_tipo la colonna tipo_iva sarà:

tbl.column('tipo_iva',size=':5', group='_', name_long='!![it]Tipo iva',
                  defaultFrom='@parent_id').relation('tipo_iva.codice',
                  relation_name='tipi_prodotto',
                  mode='foreignkey',onDelete='raise')

Invece, nel model di prodotto, la colonna tipo_iva_codice sarà:

tbl.column('tipo_iva_codice',size=':5', name_long='!![it]Tipo iva',
                   defaultFrom='@prodotto_tipo_id.tipo_iva'
                   ).relation('tipo_iva.codice',
                   relation_name='prodotti',
                   mode='foreignkey',onDelete='raise')

Si noti che in caso di default da una relazione è possibile limitarsi a utilizzare la forma abbreviata indicando il solo campo in relazione (es: @prodotto_tipo_id), se nella tabella in relazione è presente un campo con lo stesso nome (es: tipo_iva_codice). Altrimenti, come in questo caso, è necessario specificare la colonna di provenienza.


Inoltre, nel Tutorial di Fatturazione, avevamo delegato a un th_remoteRowController il calcolo del prezzo totale di una riga di una fattura: trascinando il prodotto, infatti, non abbiamo più a questo punto la necessità di fare un’operazione di lettura per reperire il prezzo e l’aliquota IVA del prodotto ma possiamo sfruttare a questo scopo il nuovo defaultFrom, delegando la parte di calcolo agli attributi totalize e formula del fieldcell.

Si noti infine come il defaultFrom permetta di mostrare un default, e che sia sempre in qualunque momento modificare il valore presentato come standard dall’interfaccia. Lo scopo è quindi agevolare l’utente “suggerendo” un valore per la compilazione di un record, ma si lascia sempre all’utente la libertà di modificare a piacimento quanto mostrato dal sistema a video.


Puoi vedere il defaultFrom all’opera nel branch develop di Sandbox.

Hai domande/curiosità? Contattaci su AskGenropy!