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: Chiamata XML-RPC a funzione sovrascritta

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18874

  • rfasoli
  • Avatar di rfasoli
  • Offline
  • Junior Boarder
  • Messaggi: 20
  • Ringraziamenti ricevuti 1
  • Karma: 0
Buongiorno a tutti, ho il seguente problema:
sto sviluppando un'applicazione web che deve integrarsi con OpenERP v7 chiamando i servizi tramite XML-RPC.
Tutto funziona correttamente però, dopo aver caricato un modulo che customizza la funzione "product_id_change" della classe "sale_order_line", quando richiamo questa funzione tramite i servizi viene eseguita solo la funzione base senza passare per l'estensione come invece accade quando viene invocata dal client standard.

La domanda quindi è la seguente:
Se chiamo tramite servizi una funzione sottoposta ad override da parte di un modulo custom il motore di OpenERP dovrebbe accorgersi da solo che esiste questo override o devo comunicarglielo in qualche modo?

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

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18875

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
se quella funzione richiama un on_change, questo non viene preso in considerazione dalle chiamate rpc, siccome agisce solo sul client e non lato server.

dovrai quindi richiamare a mano la funzione e agire di conseguenza.
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18882

  • rfasoli
  • Avatar di rfasoli
  • Offline
  • Junior Boarder
  • Messaggi: 20
  • Ringraziamenti ricevuti 1
  • Karma: 0
Ti ringrazio per la risposta enlightx.
Io sto già chiamando direttamente quella funzione solo che il sistema ignora il fatto che sia stata sovrascritta da un modulo aggiuntivo e quindi esegue la versione base invece di eseguire quella derivata...
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18885

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
non dovrebbe. forse conviene che ci condividi un po' di codice per capire
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18896

  • rfasoli
  • Avatar di rfasoli
  • Offline
  • Junior Boarder
  • Messaggi: 20
  • Ringraziamenti ricevuti 1
  • Karma: 0
Il codice del modulo in questione è il seguente:
from openerp.osv import fields, osv
from openerp.tools.translate import _

class product_pricelist(osv.osv):
    _inherit = 'product.pricelist'

    _columns ={
        'visible_discount': fields.boolean('Visible Discount'),
    }
    _defaults = {
         'visible_discount': True,
    }

product_pricelist()

class sale_order_line(osv.osv):
    _inherit = "sale.order.line"

    def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,
            uom=False, qty_uos=0, uos=False, name='', partner_id=False,
            lang=False, update_tax=True, date_order=False, packaging=False,
            fiscal_position=False, flag=False, context=None):

        def get_real_price(res_dict, product_id, qty, uom, pricelist):
            item_obj = self.pool.get('product.pricelist.item')
            price_type_obj = self.pool.get('product.price.type')
            product_obj = self.pool.get('product.product')
            field_name = 'list_price'

            if res_dict.get('item_id',False) and res_dict['item_id'].get(pricelist,False):
                item = res_dict['item_id'].get(pricelist,False)
                item_base = item_obj.read(cr, uid, [item], ['base'])[0]['base']
                if item_base > 0:
                    field_name = price_type_obj.browse(cr, uid, item_base).field

            product = product_obj.browse(cr, uid, product_id, context)
            product_read = product_obj.read(cr, uid, product_id, [field_name], context=context)

            factor = 1.0
            if uom and uom != product.uom_id.id:
                product_uom_obj = self.pool.get('product.uom')
                uom_data = product_uom_obj.browse(cr, uid,  product.uom_id.id)
                factor = uom_data.factor
            return product_read[field_name] * factor


        res=super(sale_order_line, self).product_id_change(cr, uid, ids, pricelist, product, qty,
            uom, qty_uos, uos, name, partner_id,
            lang, update_tax, date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context)

        context = {'lang': lang, 'partner_id': partner_id}
        result=res['value']
        pricelist_obj=self.pool.get('product.pricelist')
        product_obj = self.pool.get('product.product')
        if product:
            if result.get('price_unit',False):
                price=result['price_unit']
            else:
                return res

            product = product_obj.browse(cr, uid, product, context)
            list_price = pricelist_obj.price_get(cr, uid, [pricelist],
                    product.id, qty or 1.0, partner_id, {'uom': uom,'date': date_order })

            pricelists = pricelist_obj.read(cr,uid,[pricelist],['visible_discount'])

            new_list_price = get_real_price(list_price, product.id, qty, uom, pricelist)
            if len(pricelists)>0 and pricelists[0]['visible_discount'] and list_price[pricelist] != 0 and new_list_price != 0:
                discount = (new_list_price - price) / new_list_price * 100
                if discount > 0:
                    result['price_unit'] = new_list_price
                    result['discount'] = discount
                else:
                    result['discount'] = 0.0
            else:
                result['discount'] = 0.0
        return res

Io lo richiamo eseguendo la seguente chiamata:
object[] writeToIds = new object[] { line.Id };
XmlRpcStruct ret = rpcSaleOrder.product_id_change(DbName, userId, Password, "sale.order.line", "product_id_change", writeToIds, 3, line.ProductId,
                line.Quantity, 0, line.Quantity, 0, string.Empty, line.OrderPartnerId, string.Empty, true, DateTime.Today.ToShortDateString(), 0, 0, false);

La firma del metodo è questa:
    public interface ISaleOrder : IOpenErp
    {
        [XmlRpcMethod("execute")]
        XmlRpcStruct product_id_change(string dbName, int userId, string dbPwd, string model, string method, object[] ids, int pricelist, int product,
            double qty, int uom, double qty_uos, int uos, string name, int partner_id, string lang, bool update_tax, string date_order, int packaging, int fiscal_position, bool flag);
    }

Se serve qualche altro dettaglio chiedete pure
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Chiamata XML-RPC a funzione sovrascritta 4 Anni 3 Settimane fa #18897

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
hai provato a mettere un pdb in product_id_change per vedere se ci passa?
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.142 secondi

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

Protected by R Antispam