.. _orm_genropy/virtual_columns/joincolumn: joinColumn ========== Le ``joinColumn`` sono colonne virtuali che non si basano su un valore "vero" di partenza, come invece fanno le altre :ref:`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""") .. hint:: 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. .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |cnd |T |Permette di identificare una condition finalizzata| | | |a valorizzare la relazione | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci