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!