Come ereditare dei default tra record in relazione: l’attributo defaultFrom
![Come ereditare dei default tra record in relazione: l'attributo defaultFrom](https://d3jwf3yigb09i4.cloudfront.net/wp-content/uploads/2022/11/01092619/Come-ereditare-dei-default-tra-record-in-relazione_-lattributo-defaultFrom.jpg)
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”?
![](https://d3jwf3yigb09i4.cloudfront.net/wp-content/uploads/2022/11/25153819/defaultFrom_hierarchical.gif)
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.
![](https://d3jwf3yigb09i4.cloudfront.net/wp-content/uploads/2022/11/25171334/defaultPrompt_relation.gif)
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!