joinColumn¶
Le joinColumn
sono colonne virtuali che non si basano su un valore «vero» di partenza, come invece fanno le altre colonne virtuali , ma su un valore che è desunto dalle condizioni settate nella relation.
Permettono quindi di combinare i dati da due o più tabelle basandosi su una condizione che specifica come le righe delle tabelle sono correlate tra loro. La joinColumn viene valorizzata specificando una condizione (cnd
) che andiamo a definire nella relazione.
Supponiamo di avere in Sandbox una tabella listino
che permette di indicare per un certo prodotto un prezzo_personalizzato
a seconda del cliente_tipo_codice:
class Table(object):
def config_db(self,pkg):
tbl=pkg.table('listino', pkey='id', name_long='Listino', name_plural='Listini',caption_field='caption')
self.sysFields(tbl)
tbl.column('prodotto_id', size='22', name_long='Prodotto'
).relation('prodotto.id', relation_name='listini')
tbl.column('cliente_tipo_codice', size=':5', name_long='Tipo cliente'
).relation('cliente_tipo.codice', relation_name='listini')
tbl.column('prezzo_personalizzato', dtype='money', name_long='Prezzo personalizzato',
defaultFrom='@prodotto_id.prezzo_unitario')
tbl.column('data_inizio', dtype='D', name_long='Data inizio')
tbl.column('data_fine', dtype='D', name_long='Data fine')
tbl.formulaColumn('caption', "$cliente_tipo_codice || ' - ' ||@prodotto_id.codice")
È a questo punto possibile individuare nella fattura_riga, partendo dalla data e dal cliente di una fattura, il prezzo di listino personalizzato per i clienti di quella categoria:
tbl.joinColumn('prezzo_listino', name_long='Prezzo listino'
).relation('listino.prezzo_personalizzato',
cnd="""@prezzo_listino.prodotto_id=$prodotto_id AND
@prezzo_listino.cliente_tipo_codice=@fattura_id.@cliente_id.cliente_tipo_codice AND
@fattura_id.data BETWEEN @prezzo_listino.data_inizio AND @prezzo_listino.data_fine""")
Suggerimento
Si noti che ai fini della joinColumn
non è richiesta una formula o un path relazionale ma la valorizzazione è il risultato della condizione specificata nella relazione
Il prezzo di listino può a questo punto essere un riferimento per impostare un prezzo di default o può semplicemente essere visualizzato come termine di paragone rispetto al prezzo unitario che si sta impostando nella riga fattura.
Parametri:
Nome parametro |
Tipo |
Descrizione |
---|---|---|
cnd |
T |
Permette di identificare una condition finalizzata a valorizzare la relazione |
Autore della sezione: Davide Paci