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
Ricordati di dichiarare la versione di Odoo a cui riferisce la domanda

ARGOMENTO: porting di moduli per il magazzino

porting di moduli per il magazzino 4 Anni 3 Settimane fa #18912

  • shakin89
  • Avatar di shakin89
  • Offline
  • Platinum Boarder
  • Messaggi: 388
  • Ringraziamenti ricevuti 7
  • Karma: 7
Ciao ragazzi,
sto portando un mio modulo scritto per la 6.1 sulla v8.
Il modulo fa l'override del metodo create di product.product per generare in automatico un campo da me aggiunto e l'ean13. Adesso, il modulo product.product è scritto ancora secondo le vecchie API ma non mi passa più i valori nel context o dentro la il dict vals dichiarato.
    def create(self, cr, uid, vals, context=None):
        if context is None:
            context = {}
        ipdb.set_trace()
        if vals.get('company_id', False):
            ean_config = self.pool.get('product.ean13.config')
            config_id = ean_config.search(cr, uid, [('company_id', '=', vals['company_id']),], context=context)
            config = ean_config.browse(cr, uid, config_id[0], context=context)
            if config and not config.create_ean_ok:
                return super(product_product, self).create(cr, uid, vals, context)
            if not str(vals.get('ean13', '')).strip():
                if str(vals.get('default_code', '')).isdigit():
                    if len(vals.get('seller_ids', [])):
                        code = unicode(vals['seller_ids'][0][2]['name']).rjust(5,'0') + unicode(vals['default_code']).rjust(7, '0')
                    else:
                        code = unicode(vals['default_code']).rjust(12, '0')
                    vals['ean13'] = barcode.get_barcode('ean13', code).get_fullcode()
Il problema è che vals non contiene più i valori che conteneva nella 6.1. Se provo ad usare il metodo self.company_id ovvero usandolo come un recordset mi restituisce un attribute error. Questo è quello che ho tirato fuori nel debug
ipdb> self.company_id
*** AttributeError: 'product.product' object has no attribute '_ids'
ipdb> self.env
*** AttributeError: 'product.product' object has no attribute 'env'
ipdb> self._context
*** AttributeError: 'product.product' object has no attribute 'env'
ipdb> self
product.product
ipdb> self._cr
*** AttributeError: 'product.product' object has no attribute 'env'
ipdb> vals
{'product_tmpl_id': 10, 'attribute_value_ids': [(6, 0, [])]}
ipdb> context
{'lang': 'it_IT', 'search_default_filter_to_sell': 1, 'active_test': False, 'tz': 'Europe/Rome', 'uid': 1, 'create_product_variant': True}

Ora va bene .a transizione, ma qui è da delirio! :D
Non ho capito allora come devo fare per ricavarmi quel benedetto campo.
Qualcuno mi può dare una dritta?

P.s. naturalmente sto spulciando dentro il codice del modulo product ma non ne sono ancora venuto fuori
Ultima modifica: 4 Anni 3 Settimane fa da shakin89.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

porting di moduli per il magazzino 4 Anni 3 Settimane fa #18938

  • LeartS
  • Avatar di LeartS
  • Offline
  • Expert Boarder
  • Messaggi: 95
  • Ringraziamenti ricevuti 24
  • Karma: 3
Non capisco: è chiaro, dalla signature del metodo, che esso usa le vecchie API, (ed infatti context viene stampato correttamente). quindi self è la classe e non un recordset.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

porting di moduli per il magazzino 4 Anni 3 Settimane fa #18944

  • shakin89
  • Avatar di shakin89
  • Offline
  • Platinum Boarder
  • Messaggi: 388
  • Ringraziamenti ricevuti 7
  • Karma: 7
Non capisco neanche io come fare.
Vorrei accedere ai campi del record che sto creando. Ad esempio nel 6.1 per accedere al campo company_id del modello prodotto facevo
vals
Come devo fare nell'override del metodo create per accedere ai campi del record che sto creando?

ho provato a fare nel create che sto sovrascrivendo:
prod_id = super(product_product, self).create(cr, uid, vals, context)
prod_obj = self.browse(cr, uid, [prod_ids], context)

e cosi effettivamente accedo ai campi del record attivo, ma mi ritrovo 2 righe nella tabella product_product (penso che siano varianti), mentre se elimino il mio modulo e creo un prodotto da 0, mi trovo correttamente 1 sola riga nella tabella product_product.
Qualche suggerimento o link da studiare?
Grazie per la disponibilità
Ultima modifica: 4 Anni 3 Settimane fa da shakin89.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

porting di moduli per il magazzino 4 Anni 3 Settimane fa #18950

  • shakin89
  • Avatar di shakin89
  • Offline
  • Platinum Boarder
  • Messaggi: 388
  • Ringraziamenti ricevuti 7
  • Karma: 7
ok ho usato un mix di vecchie api e nuove con questo codice
        prod_id = super(product_product, self).create(cr, uid, vals, context)
        prod_obj = self.browse(cr, uid, prod_id, context)

        related_vals = {}
        if prod_obj.company_id:
            ean_config = self.pool.get('product.ean13.config')
            config_id = ean_config.search(cr, uid, [('company_id', '=', [prod_obj.company_id.id]),], context=context)
            if len(config_id) > 0:
                config = ean_config.browse(cr, uid, config_id[0], context=context)
                if config and not config.create_ean_ok:
                    return prod_obj
                if not str(prod_obj.ean13).strip():
                    if str(prod_obj.default_code).isdigit():
                        if len(prod_obj.seller_ids):
                            code = unicode(prod_obj.seller_ids[0][2]['name']).rjust(5,'0') + unicode(prod_obj.default_code).rjust(7, '0')
                        else:
                            code = unicode(prod_obj.default_code).rjust(12, '0')
                        related_vals['ean13'] = barcode.get_barcode('ean13', code).get_fullcode()

        return prod_obj.write(related_vals, context=context)

prima invece di fare prod_obj.write chiamavo nuovamente super(product_product, self).create()
ecco perché mi trovavo due righe nella tabella product_product... :bash: :bash: :laugh: :laugh:
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.127 secondi

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

Protected by R Antispam