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: [8.0] Aggiungere campi in sale.order.line

[8.0] Aggiungere campi in sale.order.line 2 Anni 1 Mese fa #26533

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Stavo facendo delle prove e mi sorge un dubbio.
Non è che mi devo creare anche un campo product_packaging e sostituirlo alla UI e di conseguenza posso anche gestirmi on_change?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0] Aggiungere campi in sale.order.line 2 Anni 1 Mese fa #26545

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Eccomi di nuovo.

Ho fatto delle prove ma niente da fare.

Dovrei cambiare l'attributo on_change dei campi product_packaging e product_uom_qty.
Per product_uom_qty. non ho avuto nessun problema ma mi rimane difficile per product_packaging.
Ho fatto delle prove creandomi tale campo nel mio modulo e posizionandolo nella form per l'inserimento.
Li ho trovato due campi product_packaging uno sotto l'altro cosa che non dovrebbe accadere. Se faccio un position="replace" su quelcampo il server mi da errore dicendomi
Field(s) `arch` failed against a constraint: Invalid view definition

Error details:
Element '<field name="product_packaging">' cannot be located in parent view
in pratica non trova il field.

La difficoltà che ho trovato è l'orverride proprio di questo campo per che si trova nel modulo sale_stock e anch'esso fa l'override di sale.order.
come si vede nel file sale_stock_view.xml
<record id="view_order_form_inherit" model="ir.ui.view">
            <field name="name">sale.order.form.sale.stock</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <data>
                       [......Contiene tutti xpath.....]
                       [ .... questo è xpath che dovrei modificare....]
                   <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/group/group/field[@name='tax_id']" position="before">
                       <field name="product_tmpl_id" invisible="1"/>
                       <field name="product_packaging" context="{'default_product_tmpl_id': product_tmpl_id, 'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}" on_change="product_packaging_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, parent.partner_id, product_packaging, True, context)" domain="[('product_tmpl_id','=',product_tmpl_id)]" groups="product.group_stock_packaging" />
                   </xpath>

                </data>
           </field>
        </record>

mi sono creato un record nel mio modulo cercando di fare l'overrigth di tale campo ma il server continua a protestare.
        <record id="sale_order_form_molino_packaging" model="ir.ui.view">
            <field name="name">sale.order.form.molino.packaging</field>
            <field name="model">sale_stock</field>
            <field name="inherit_id" ref="sale_stock.view_order_form_inherit"/>

            <field name="arch" type="xml">
            <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/group/group/field[@name='product_packaging']" position="replace">
                <field name="product_packaging" context="{'default_product_tmpl_id': product_tmpl_id, 'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}" on_change="product_packaging_change(parent.pricelist_id, product_id, product_bom_qty, product_uom, parent.partner_id, product_packaging, True, context)" domain="[('product_tmpl_id','=',product_tmpl_id)]" groups="product.group_stock_packaging" />
           </xpath> 
        </record>

Non ho proprio idea di come possa modificarlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[8.0] Aggiungere campi in sale.order.line 2 Anni 1 Mese fa #26567

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
Buongiorno.
Ho risolto gli errori.
Il primo era semplicemente il fatto che dovevo sovrascrivere il metodo all'inizio subito dopo la dichiarazione della classe.
Il secondo era una semplice dimenticanza di chiusura tag, me ne sono accorto dopo 2 giorni, pazienza.
Ma, ho un altro problema e riguarda la sovrascrittura della classe writer.
    @api.multi
    def write(self, values):
        if len(self) == 1:
            order = self.env['sale.order'].browse(self.order_id.id)
            defaults = self.product_id_change(order.pricelist_id.id,
                                              product=values.get('product_id', self.product_id.id),
                                              qty=float(values.get('product_bom_qty', self.product_bom_qty)),
                                              uom=values.get('product_uom', self.product_uom.id),
                                              qty_uos=float(values.get('product_uos_qty', self.product_uos_qty)),
                                              uos=values.get('product_uos', self.product_uos.id),
                                              name=self.name,
                                              partner_id=order.partner_id.id,
                                              date_order=order.date_order,
                                              packaging=values.get('product_packaging', False),
                                              fiscal_position=order.fiscal_position[0] if order.fiscal_position else False,
                                              flag=values.get('flag', False),  # Force name update
                                              context=dict(self._context or {})
                                              )['value']
            values.update({'product_uom_qty': defaults['product_uom_qty'], 'product_uom_qty_tot': defaults['product_uom_qty_tot']})

        res = super(sale_order_line, self).write(values)

        return res


Il problema sta nel fatto che in qualsiasi occasione dovrei conoscere e quindi restituirlo nella chiamata a self.product_id_change del campo packaging per far si che mi calcoli in modo corretto tutti i campi modificati.
Purtroppo il valore che dovrebbe trovarsi in "values" lo si trova solo se effettivamente lo si cambia nella UI, mentre se si cambia solo la quantità, per esempio, questo valore non c'è e mi crea problemi.
Avevo pensato di trovarmelo sulla riga d'ordine ma poi mi sono chiesto come faccio a sapere di che riga sto parlando?
Qualche suggerimento?

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

[8.0] Aggiungere campi in sale.order.line 2 Anni 1 Mese fa #26574

  • GiuseppeS
  • Avatar di GiuseppeS
  • Offline
  • Expert Boarder
  • Messaggi: 140
  • Ringraziamenti ricevuti 5
  • Karma: 0
:lol: :lol: :lol: :lol: :lol: :lol
scusate, la notte è meglio che vada a letto.
self, in questo caso, indica la riga d'ordine del prodotto prima della modifica. Basta prendere il valore da li semplicemente scrivendo:
packaging=values.get('product_packaging', self.product_packaging.id)

nel codice di prima.

Buone feste.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.125 secondi

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

Protected by R Antispam