Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Passaggio tra field di classi diverse.

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18457

  • angelov
  • Avatar di angelov
  • Offline
  • Fresh Boarder
  • Messaggi: 11
  • Karma: 0
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 :metal:

Grazie!
Ultima modifica: 4 Anni 2 Mesi fa da angelov. Motivo: Corretto valore nel return
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18495

  • angelov
  • Avatar di angelov
  • Offline
  • Fresh Boarder
  • Messaggi: 11
  • Karma: 0
Purtoppo ad oggi non sono ancora riuscito a trovare soluzione al mio problema, qualche idea?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18528

  • LeartS
  • Avatar di LeartS
  • Offline
  • Expert Boarder
  • Messaggi: 95
  • Ringraziamenti ricevuti 24
  • Karma: 3
Puoi spiegare un po' meglio come funzionano i modelli e cosa stai cercando di fare? Oggi non ce la faccio a guardare perchè sono un po' cotto, ma magari nei prossimi giorni ce la faccio.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18540

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Non so se ho capito bene però di solito si usano dei campi related per riportare in un documento (testata) valori che vengono visualizzati (char, float, text) / calcolati (function / related) nell'oggetto collegato (dettaglio)...
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: angelov

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18565

  • angelov
  • Avatar di angelov
  • Offline
  • Fresh Boarder
  • Messaggi: 11
  • Karma: 0
Ringrazio tutti per l'attenzione.

Un ipotesi per semplificare la richiesta:

Ho una view con
- un field "TOTALE" appartenente al modello "DOCUMENTO"
- N fields "VALORE" appartenente al modello "RIGHE DOCUMENTO" (tree o2m).

Ogni qualvolta modifico un "VALORE", vorrei ottenere il "TOTALE" aggiornato.

Ho provato con la soluzione consigliatami da NicoTheBrush
Non so se ho capito bene però di solito si usano dei campi related per riportare in un documento (testata) valori che vengono visualizzati (char, float, text) / calcolati (function / related) nell'oggetto collegato (dettaglio)...

Ma così non ho il "TOTALE" all' on_change, bensì al ricaricamento della pagina.

Potete aiutarmi con qualche esempio pratico? (anche se banale).

Grazie come sempre.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Passaggio tra field di classi diverse. 4 Anni 2 Mesi fa #18567

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
devi usare un onchange sul campo o2m che contiene le righe documento

su v8 ti serve @api.depends('campo_righe_documento') come decoratore del metodo che calcola il totale sul documento
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
Ultima modifica: 4 Anni 2 Mesi fa da enlightx.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: angelov
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.141 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam