Salve a tutti,
Ammetto che ci sbatto da 3 giorni... quindi è arrivato il momento di chiedere a chi ne sa di certo più di me.
Ho una maschera composta da:
- Un field "Omaggi da distribuire"
- Un tree one2many con "Magazzino, Da ordinare, Omaggio.. ecc ecc"
PREMESSE:
- Tenendo conto che ho un rapporto di sconti sul prodotto (Es. Ogni 10 , 2 omaggio)
- Tenendo conto che all' on_change dei field "da_oridnare" e "omaggio" ottengo già il numero di omaggi ancora da distribuire...
QUESITO:
Come faccio a far scrivere (live) un risultato ottenuto da una funzione presente nella classe "purchase.distribuzione.line" in un field presente nella classe "purchase.distribuzione"?
Di seguito codice (solo la parte interessata):
class purchase_distribuzione(osv.osv):
	_name = 'purchase.distribuzione'
	
	_columns = {
		'distribuzione_line' : fields.one2many('purchase.distribuzione.line','distribuzione_id'),
		'name' : fields.char(),
		'id_sconti' : fields.many2one('purchase.order.line.sconti', readonly=True),
		'omaggi_da_distribuire' : fields.integer(readonly=True, string="Omaggi da distribuire")
	}
	
purchase_distribuzione()	
class purchase_distribuzione_line(osv.osv):
	def _calcola_omaggi(self, cr, uid, ids, da_ordinare, omaggio, context=None):
		self.write(cr, uid, ids,{'da_ordinare':da_ordinare, 'omaggio':omaggio},context=None)
		somma_da_ordinare = 0
		somma_omaggio = 0
		for record in self.browse(cr, uid, ids ,context):
			righe = record.distribuzione_id.distribuzione_line
			for riga in righe:
				somma_da_ordinare += riga.da_ordinare
				somma_omaggio += riga.omaggio
		ogni = record.distribuzione_id.id_sconti.omaggi_ogni
		omaggio = record.distribuzione_id.id_sconti.omaggi_omaggio
		if ogni and omaggio:
			omaggi_max = (somma_da_ordinare*omaggio)/ogni
		else:
			omaggi_max = 0
		residuo = omaggi_max - somma_omaggio
		return {'value':{' omaggi_da_distribuire ':residuo}} //ovviamente non funziona
	_name = 'purchase.distribuzione.line'
	_columns = {
		'distribuzione_id': fields.many2one('purchase.distribuzione', 'Order Reference', select=True, required=True, ondelete='cascade'),
		'magazzino_label' : fields.char(readonly=True, string="Magazzino"),
		'magazzino': fields.many2one('stock.warehouse','Magazzino',invisible=True),
		'da_ordinare' : fields.integer(string="Da ordinare"),
		'omaggio' : fields.integer(string="Omaggio"),
		'giacenza' : fields.function(_get_giacenza, type="integer", string="Giacenza"),
		'disponibilita' : fields.function(_calcola_disp, type="integer", string="Disponibilità"),
		'ordinato' : fields.function(_get_ordinato, type="integer", string="Ordinato"),
		'ultimo_ordine' : fields.function(_get_ultimo_ordine, type="integer", string="Ultimo ordine"),
		'venduto' : fields.integer(string="Venduto"),
		'id_prodotto' : fields.many2one('product.product', readonly=True)
		
	}
		
	
purchase_distribuzione_line()
e relativo XML:
<record model="ir.ui.view" id="purchase_distribuzione_form" >
		<field name="name">Distribuzione</field>
		<field name="model">purchase.distribuzione</field>
		<field name="type">form</field>
		<field name="arch" type="xml">
			<group>
				<field name="omaggi_da_distribuire" />
			</group>
			<field name="distribuzione_line">
				<tree editable="bottom" delete="false" create="false">
					<field name="id_prodotto" invisible="1" />
					<field name="magazzino" invisible="1" />
					<field name="magazzino_label" />
					<field name="da_ordinare" on_change="_calcola_omaggi(da_ordinare, omaggio)"/>
					<field name="omaggio" on_change="_calcola_omaggi(da_ordinare, omaggio)"/>
					<field name="giacenza"/>
					<field name="disponibilita"/>
					<field name="ordinato"/>
					<field name="ultimo_ordine"/>
					<field name="venduto"/>
				</tree>
			</field>
		</field>
	</record>
Ho iniziato da poco.. ma devo ammettere che sto apprezzando sempre di più Odoo.. infatti sarò presente alla conferenza di Milano  
 
Grazie!