Heredar Clases Web en Odoo (http.Controller)
Un tema muy importante que ha empezado a tomar importancia en Odoo es el desarrollo y las modificaciones del E-commerce desafortunadamente no tenemos mucha información así que estaré subiendo temas y mis propias investigaciones:
Lo primero con lo que quiero empezar es como hacer herencia de una clase web, esto se realiza de una forma muy sencilla:
- Debemos importar la clase a la cual vamos a heredar por ejemplo si queremos heredar la clase website_sale lo haríamos de la siguiente manera:
from openerp.addons.website_sale.controllers.main import website_sale
Observamos que básicamente hacemos un recorrido de toda la ruta de archivos hasta llegar al que contiene la clase a heredar. - Segundo creamos la clase y la heredamos:
- Con esto podremos hacer uso de los metodos propios de website_sale, podremos extenderlos o reemplazarlos.
class website_sale_extension(website_sale):
Un ejemplo seria el siguiente, en donde arregle un Bug que tenia Odoo al momento de procesar un pago:
# -*- coding: utf-8 -*- from openerp import http from openerp import SUPERUSER_ID from openerp.api import Environment from openerp.addons.web.http import request import logging import werkzeug from openerp import http from openerp import tools from openerp.tools.translate import _ from openerp.addons.website.models.website import slug from openerp.addons.website_sale.controllers.main import website_sale PPG = 20 # Products Per Page PPR = 4 # Products Per Row class website_sale_portal_invoice(website_sale): def checkout_form_save(self, checkout): cr, uid, context, registry = request.cr, request.uid, request.context, request.registry order = request.website.sale_get_order(force_create=1, context=context) orm_partner = registry.get('res.partner') orm_user = registry.get('res.users') order_obj = request.registry.get('sale.order') partner_lang = request.lang if request.lang in [lang.code for lang in request.website.language_ids] else None billing_info = {'customer': True} if partner_lang: billing_info['lang'] = partner_lang billing_info.update(self.checkout_parse('billing', checkout, True)) # set partner_id partner_id = None if request.uid != request.website.user_id.id: partner_id = orm_user.browse(cr, SUPERUSER_ID, uid, context=context).partner_id.id elif order.partner_id: user_ids = request.registry['res.users'].search(cr, SUPERUSER_ID, [("partner_id", "=", order.partner_id.id)], context=dict(context or {}, active_test=False)) if not user_ids or request.website.user_id.id not in user_ids: partner_id = order.partner_id.id # save partner informations if partner_id and request.website.partner_id.id != partner_id: orm_partner.write(cr, SUPERUSER_ID, [partner_id], billing_info, context=context) else: # create partner billing_info['team_id'] = request.website.salesteam_id.id partner_id = orm_partner.create(cr, SUPERUSER_ID, billing_info, context=context) order.write({'partner_id': partner_id}) ### Correccion ### order.onchange_partner_id() ### Error ### # order_obj.onchange_partner_id(cr, SUPERUSER_ID, [order.id], context=context) order.write({'partner_invoice_id': partner_id}) # create a new shipping partner if checkout.get('shipping_id') == -1: shipping_info = self._get_shipping_info(checkout) if partner_lang: shipping_info['lang'] = partner_lang shipping_info['parent_id'] = partner_id checkout['shipping_id'] = orm_partner.create(cr, SUPERUSER_ID, shipping_info, context) if checkout.get('shipping_id'): order.write({'partner_shipping_id': checkout['shipping_id']}) order_info = { 'message_partner_ids': [(4, partner_id), (3, request.website.partner_id.id)], } order_obj.write(cr, SUPERUSER_ID, [order.id], order_info, context=context)Los puntos a resaltar en el código son los comentarios correccion y error con mi solución.
0 comentarios:
Publicar un comentario