Bharat Devnani (Open ERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-ecommerce-bde into lp:~openerp-dev/openobject-addons/trunk-module-ecommerce.
Requested reviews: OpenERP R&D Team (openerp-dev) For more details, see: https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-ecommerce-bde/+merge/91761 Hello Sir, I have added Ecommerce module. Inherited product.product and added some fields in that object, created product attribute and product attribute details object, created osv memory object shopping order and the data of shopping order are assigned to sale order object. And also added Sale Order menu which shows sale orders which are generated through shopping order, added add_to_cart functionality which can be executed through ecommerce tab in product form view. Thanks & Regards, Devnani Bharat R. -- https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-ecommerce-bde/+merge/91761 Your team OpenERP R&D Team is requested to review the proposed merge of lp:~openerp-dev/openobject-addons/trunk-ecommerce-bde into lp:~openerp-dev/openobject-addons/trunk-module-ecommerce.
=== added directory 'ecommerce' === added file 'ecommerce/__init__.py' --- ecommerce/__init__.py 1970-01-01 00:00:00 +0000 +++ ecommerce/__init__.py 2012-02-07 05:46:24 +0000 @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import ecommerce +import shopping_order_wizard + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + === added file 'ecommerce/__openerp__.py' --- ecommerce/__openerp__.py 1970-01-01 00:00:00 +0000 +++ ecommerce/__openerp__.py 2012-02-07 05:46:24 +0000 @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + "name" : "E-Commerce", + "version" : "1.0", + "depends" : ["base","sale","product"], + "author" : "OpenERP S.A.", + "description": """E-Commerce Functionality. + """, + "website" : "http://www.openerp.com", + "category" : "Sales Management", + "sequence": 32, + "init_xml" : [ + ], + "demo_xml" : [ + ], + 'test': [ + ], + "update_xml" : [ + "ecommerce.xml", + "shopping_order_wizard.xml", + "ecommerce_sequence.xml" + ], + "auto_install": False, + "installable": True, + "application": True, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + === added file 'ecommerce/ecommerce.py' --- ecommerce/ecommerce.py 1970-01-01 00:00:00 +0000 +++ ecommerce/ecommerce.py 2012-02-07 05:46:24 +0000 @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import fields, osv +from tools.translate import _ + +class product_product(osv.osv): + + _inherit = 'product.product' + _columns = { + 'shop_id': fields.many2one('sale.shop', 'Shop', required=True), + 'attribute_id': fields.many2one('product.attribute', 'Attribute'), + } + + def create_shopping_order(self, cr, uid, ids, context=None): + + shopping_obj = self.pool.get('shopping.order') + shopping_order_line_obj = self.pool.get('shopping.order.line') + + shopping_order_id = shopping_obj.create(cr, uid, {}, context=context) + + for value in self.browse(cr, uid, ids,context=context): + shopping_order_line_obj.create(cr, uid, {'shopping_order_line_id':shopping_order_id, 'product_id': value.id, 'price':value.list_price, 'product_uom': value.uom_id.id}) + return shopping_order_id + + def add_to_cart(self, cr, uid, ids, context=None): + mod_obj = self.pool.get('ir.model.data') + vals = self.create_shopping_order(cr, uid, ids, context=context) + res = mod_obj.get_object_reference(cr, uid, 'ecommerce', 'view_shopping_order_form') + res_id = res and res[1] or False + return { + 'name': _('Shopping Order'), + 'view_type': 'form', + 'view_mode': 'form', + 'view_id': [res_id], + 'res_model': 'shopping.order', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'res_id': vals or False, + } + +product_product() + +class product_attribute(osv.osv): + + _name = "product.attribute" + + _columns = { + 'name': fields.char('Name', size=16, required=True), + 'category_id': fields.many2one('product.category', 'Category', required=True) + } + +product_attribute() + +class product_attribute_details(osv.osv): + + _name = "product.attribute.details" + + _columns = { + 'product_id': fields.many2one('product.product', 'Product', required=True), + 'attribute_id': fields.many2one('product.attribute', 'Attribute', required=True), + 'value': fields.char('Value', size=16), + } + +product_attribute_details() + +class sale_order(osv.osv): + + _inherit = 'sale.order' + _columns = { + 'through_ecom': fields.boolean('Through E-Commerce', readonly=True), + } + + _defaults = { + 'through_ecom': True + } + +sale_order() \ No newline at end of file === added file 'ecommerce/ecommerce.xml' --- ecommerce/ecommerce.xml 1970-01-01 00:00:00 +0000 +++ ecommerce/ecommerce.xml 2012-02-07 05:46:24 +0000 @@ -0,0 +1,195 @@ +<?xml version="1.0" encoding="utf-8"?> + <openerp> + + <data> + + <!-- Product Attribute Search View --> + + <record id="view_product_attribute_search" model="ir.ui.view"> + <field name="name">product_attribute.search</field> + <field name="model">product.attribute</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search> + <field name="name"/> + <field name="category_id" widget="selection" operator="child_of" groups="base.group_extended"/> + </search> + </field> + </record> + + <!-- Product Attribute Details Search View --> + + <record id="view_product_attribute_details_search" model="ir.ui.view"> + <field name="name">product.attribute.details.search</field> + <field name="model">product.attribute.details</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search> + <field name="product_id" widget="selection"/> + <field name="attribute_id" widget="selection"/> + <field name="value"/> + </search> + </field> + </record> + + <!-- Product Attribute Tree View --> + + <record id="view_product_attribute_tree" model="ir.ui.view"> + <field name="name">product_attribute.tree</field> + <field name="model">product.attribute</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree> + <field name="name"/> + <field name="category_id"/> + </tree> + </field> + </record> + + <!-- Product Attribute Details Tree View --> + + <record id="view_product_attribute_details_tree" model="ir.ui.view"> + <field name="name">product.attribute.details.tree</field> + <field name="model">product.attribute.details</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree> + <field name="product_id"/> + <field name="attribute_id"/> + <field name="value"/> + </tree> + </field> + </record> + + <!-- Sale Order Tree View --> + + <record id="view_sale_order_tree" model="ir.ui.view"> + <field name="name">sale.order.tree</field> + <field name="model">sale.order</field> + <field name="type">tree</field> + </record> + + <!-- Multi Shop Form View --> + + <record id="view_multi_shop_form" model="ir.ui.view"> + <field name="name">product.product.form</field> + <field name="model">product.product</field> + <field name="inherit_id" ref="product.product_normal_form_view"/> + <field name="type">form</field> + <field name="arch" type="xml"> + <notebook position="inside"> + <page string="Ecommerce"> + <field name="shop_id"/> + <field name="attribute_id"/> + <button name="add_to_cart" string="Add to Cart" type="object" icon="gtk-go-forward" colspan="4"/> + </page> + </notebook> + </field> + </record> + + <!-- Product Attribute Form View --> + + <record id="view_product_attribute_form" model="ir.ui.view"> + <field name="name">product_attribute.form</field> + <field name="model">product.attribute</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form> + <field name="name"/> + <field name="category_id"/> + </form> + </field> + </record> + + <!-- Product Attribute Details Form View --> + + <record id="view_product_attribute_details_form" model="ir.ui.view"> + <field name="name">product.attribute.details.form</field> + <field name="model">product.attribute.details</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form> + <field name="product_id"/> + <field name="attribute_id"/> + <field name="value"/> + </form> + </field> + </record> + + <!-- Sale Order Form View --> + + <record id="view_sale_order_form" model="ir.ui.view"> + <field name="name">sale.order.form</field> + <field name="model">sale.order</field> + <field name="inherit_id" ref="sale.view_order_form"/> + <field name="type">form</field> + <field name="arch" type="xml"> + <field name="shipped" position="after"> + <field name="through_ecom"/> + </field> + </field> + </record> + + <!-- Product Action--> + + <record id="action_multi_shop_form" model="ir.actions.act_window"> + <field name="name">Product</field> + <field name="res_model">product.product</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + <!-- Product Attribute Action--> + + <record id="action_product_attribute_form" model="ir.actions.act_window"> + <field name="name">Product Attribute</field> + <field name="res_model">product.attribute</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + <!-- Product Attribute Details Action--> + + <record id="action_product_attribute_details_form" model="ir.actions.act_window"> + <field name="name">Product Attribute Details</field> + <field name="res_model">product.attribute.details</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + <!-- Sale Order Action--> + + <record id="action_sale_order_form" model="ir.actions.act_window"> + <field name="name">Sale Order</field> + <field name="res_model">sale.order</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="domain">[('through_ecom','=',True)]</field> + </record> + + <!-- Menu Items --> + + <menuitem name="Ecommerce" + id="menu_action_ecommerce" icon="terp-hr"/> + + <menuitem id="menu_action_ecommerce_products" + name="Products" parent="menu_action_ecommerce"/> + + <menuitem action="action_multi_shop_form" + id="menu_action_multi_shop_form" parent="menu_action_ecommerce_products"/> + + <menuitem action="action_product_attribute_form" + id="menu_action_action_product_attribute_form" parent="menu_action_ecommerce_products"/> + + <menuitem action="action_product_attribute_details_form" + id="menu_action_action_product_attribute_details_form" parent="menu_action_ecommerce_products"/> + + <menuitem id="menu_action_sale_orders" + name="Sale Orders" parent="menu_action_ecommerce"/> + + <menuitem id="menu_action_sale_orders_order" action="action_sale_order_form" + name="Sale Orders" parent="menu_action_sale_orders"/> + + </data> + + </openerp> \ No newline at end of file === added file 'ecommerce/ecommerce_sequence.xml' --- ecommerce/ecommerce_sequence.xml 1970-01-01 00:00:00 +0000 +++ ecommerce/ecommerce_sequence.xml 2012-02-07 05:46:24 +0000 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data noupdate="1"> + + <!-- Sequences for sale.order --> + <record id="seq_type_shopping_order" model="ir.sequence.type"> + <field name="name">Shopping Order</field> + <field name="code">shopping.order</field> + </record> + + <record id="seq_shopping_order" model="ir.sequence"> + <field name="name">Shopping Order</field> + <field name="code">shopping.order</field> + <field name="prefix">ECO</field> + <field name="padding">3</field> + <field name="company_id" eval="False"/> + </record> + + </data> +</openerp> === added directory 'ecommerce/i18n' === added file 'ecommerce/images.jpeg' Binary files ecommerce/images.jpeg 1970-01-01 00:00:00 +0000 and ecommerce/images.jpeg 2012-02-07 05:46:24 +0000 differ === added directory 'ecommerce/report' === added directory 'ecommerce/security' === added file 'ecommerce/shopping_order_wizard.py' --- ecommerce/shopping_order_wizard.py 1970-01-01 00:00:00 +0000 +++ ecommerce/shopping_order_wizard.py 2012-02-07 05:46:24 +0000 @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import osv, fields +import decimal_precision as dp +from tools.translate import _ +import time +from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT + +class shopping_order(osv.osv_memory): + + def _get_user(self, cr, uid, ids, context=None): + user = self.pool.get('res.users') + current_user = user.browse(cr, uid, uid, context=context).id + return current_user + + _name = "shopping.order" + + _columns = { + 'shopping_order_no': fields.char('Order Reference', size=64, required=True, + readonly=True, states={'draft': [('readonly', False)]}, select=True), + 'date': fields.date('Date', required=True, readonly=True, select=True, states={'draft': [('readonly', False)]}), + 'user_id': fields.many2one('res.users', 'User', required=True), + 'partner_id': fields.many2one('res.partner', 'Related Partner'), + 'pricelist_id': fields.many2one('product.pricelist', 'Price List', required=True), + 'shopping_order_line_ids': fields.one2many('shopping.order.line', 'shopping_order_line_id', 'Order', readonly=True, states={'draft':[('readonly',False)]}), + 'state': fields.selection([ + ('draft', 'New'), + ('waiting', 'Ready to Checkout'), + ('done', 'Checkout'), + ], 'Order State', readonly=True, select=True), + } + + _defaults = { + 'user_id': _get_user, + 'date': lambda *a: time.strftime(DEFAULT_SERVER_DATE_FORMAT), + 'pricelist_id': 1, + 'state': 'draft', + 'shopping_order_no': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'shopping.order'), + } + + def add_to_cart(self, cr, uid, ids, context=None): + order_lines = self.browse(cr, uid, ids, context=context)[0].shopping_order_line_ids + if not order_lines: + raise osv.except_osv(_('Warning !'), + _('There is no shopping order line, At least there should be one line.')) + self.write(cr, uid, ids, {'state': 'waiting'}, context=context) + return True + + def update_cart(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state': 'draft'}, context=context) + return True + + def create_sale_order(self, cr, uid, ids, context=None): + sale_obj = self.pool.get('sale.order') + sale_order_line = self.pool.get('sale.order.line') + partner_address_obj = self.pool.get('res.partner.address') + line_ids = [] + if context is None: + context ={} + pricelist = self.browse(cr, uid, ids, context=context)[0].pricelist_id.id + partner_rec = self.browse(cr, uid, ids, context=context)[0].partner_id + partner = partner_rec.id + order_address = partner_address_obj.search(cr, uid, [('partner_id', '=', partner), ('type', '=', 'default')])[0] + shipping_address = partner_address_obj.search(cr, uid, [('partner_id', '=', partner), ('type', '=', 'delivery')]) + invoice_address = partner_address_obj.search(cr, uid, [('partner_id', '=', partner), ('type', '=', 'invoice')]) + + sale_order_values = { + 'client_order_ref': self.browse(cr, uid, ids, context=context)[0].shopping_order_no, + 'partner_id': partner, + 'partner_order_id': order_address, + 'partner_invoice_id': invoice_address and invoice_address[0] or order_address, + 'partner_shipping_id': shipping_address and shipping_address[0] or order_address, + 'pricelist_id': pricelist, + } + + sale_order_id = sale_obj.create(cr, uid, sale_order_values, context=context) + + for order_lines in self.browse(cr, uid, ids, context=context): + for lines in order_lines.shopping_order_line_ids: + products = lines.product_id.id + name = lines.product_id.name + price = lines.price + qty = lines.qty + sale_order_line.create(cr, uid, {'order_id':sale_order_id, 'product_id': products, 'name':name, 'price_unit': price, 'product_uom_qty': qty}) + return sale_order_id + + def checkout(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state': 'done'}, context=context) + mod_obj = self.pool.get('ir.model.data') + vals = self.create_sale_order(cr, uid, ids, context=context) + res = mod_obj.get_object_reference(cr, uid, 'sale', 'view_order_form') + res_id = res and res[1] or False + return { + 'name': _('Ecommerce Sale Order'), + 'view_type': 'form', + 'view_mode': 'form', + 'view_id': [res_id], + 'res_model': 'sale.order', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'res_id': vals or False, + } + +shopping_order() + +class shopping_order_line(osv.osv_memory): + + _name = "shopping.order.line" + + def _get_uom_id(self, cr, uid, *args): + try: + proxy = self.pool.get('ir.model.data') + result = proxy.get_object_reference(cr, uid, 'product', 'product_uom_unit') + return result[1] + except Exception, ex: + return False + + _columns = { + 'shopping_order_line_id': fields.many2one('shopping.order', 'ID'), + 'product_id': fields.many2one('product.product', 'Product', required=True), +# 'name': fields.char('Description', size=256), + 'product_uom': fields.many2one('product.uom', 'UoM', required=True), + 'qty': fields.float('Quantity', digits_compute= dp.get_precision('Product UoS'), required=True), + 'price': fields.float('Unit Price', required=True), + } + + _defaults = { + 'product_uom': _get_uom_id, + 'qty' : 1.00 + } + + def onchange_product_id(self, cr, uid, ids, product_id, context=None): + uom_dict = {} + product_obj = self.pool.get('product.product') + if product_id: + + uom = product_obj.browse(cr, uid, product_id).uom_id.id + price = product_obj.browse(cr, uid, product_id).list_price + uom_dict['product_uom'] = uom + uom_dict['price'] = price + return {'value': uom_dict} + +shopping_order_line() === added file 'ecommerce/shopping_order_wizard.xml' --- ecommerce/shopping_order_wizard.xml 1970-01-01 00:00:00 +0000 +++ ecommerce/shopping_order_wizard.xml 2012-02-07 05:46:24 +0000 @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8"?> + + <openerp> + + <data> + + <!-- Shopping Order Tree View --> + + <!--record id="view_shopping_order_tree" model="ir.ui.view"> + <field name="name">shopping.order.tree</field> + <field name="model">shopping.order</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree> + <field name="shopping_order_no"/> + <field name="user_id"/> + <field name="pricelist_id"/> + <field name="shopping_order_line_ids"/> + </tree> + </field> + </record--> + + <record id="view_shopping_order_line_tree" model="ir.ui.view"> + <field name="name">shopping.order.line.tree</field> + <field name="model">shopping.order.line</field> + <field name="type">tree</field> + <field name="arch" type="xml"> + <tree string="Shopping Order Lines"> + <field name="product_id"/> + <field name="qty" string="Qty"/> + <field name="product_uom"/> + <field name="price"/> + </tree> + </field> + </record> + + <!-- Shopping Order Form View --> + + <record id="view_shopping_order_form" model="ir.ui.view"> + <field name="name">shopping.order.form</field> + <field name="model">shopping.order</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form> + <field name="shopping_order_no"/> + <field name="date"/> + <field name="user_id"/> + <field name="pricelist_id"/> + <field name="partner_id"/> + <separator colspan="4"/> + <newline/> + <field name="shopping_order_line_ids" nolabel="1" colspan="4" widget="one2many_list"/> + <separator colspan="4"/> + <group col="8" colspan="4"> + <field name="state" colspan="2"/> + <button name="add_to_cart" string="Add to Cart" type="object" states="draft" icon="terp-document-new" colspan="2"/> + <button name="update_cart" string="Update Shopping Cart" type="object" states="waiting" icon="terp-document-new" colspan="2"/> + <button name="checkout" string="Proceed to Checkout" type="object" states="waiting" icon="terp-document-new" colspan="2"/> + </group> + </form> + </field> + </record> + + <record id="view_shopping_order_line_form" model="ir.ui.view"> + <field name="name">shopping.order.line.form</field> + <field name="model">shopping.order.line</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Shopping Order Lines"> + <group colspan="4" col="4"> + <field name="product_id" on_change="onchange_product_id(product_id)"/> + <field name="product_uom" nolabel="1"/> + <!--field name="name"/--> + <newline/> + <field name="qty" string="Quantity (UoM)" colspan="4"/> + <field name="price" colspan="4"/> + </group> + </form> + </field> + </record> + + <!-- Shopping Order Action--> + + <record id="action_shopping_order_form" model="ir.actions.act_window"> + <field name="name">Shopping Order</field> + <field name="res_model">shopping.order</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + </record> + + <!-- Menu Items--> + + <menuitem id="menu_action_ecommerce_shopping_order_main" + name= "Shopping Order" parent="menu_action_ecommerce"/> + + <menuitem action="action_shopping_order_form" + id="menu_action_ecommerce_shopping_order" parent="menu_action_ecommerce_shopping_order_main"/> + + </data> + + </openerp> \ No newline at end of file === added directory 'ecommerce/static' === added directory 'ecommerce/static/src' === added directory 'ecommerce/static/src/img' === added file 'ecommerce/static/src/img/icon.png' Binary files ecommerce/static/src/img/icon.png 1970-01-01 00:00:00 +0000 and ecommerce/static/src/img/icon.png 2012-02-07 05:46:24 +0000 differ === added directory 'ecommerce/test' === added directory 'ecommerce/wizard' === modified file 'sale/sale.py' --- sale/sale.py 2012-01-31 13:36:57 +0000 +++ sale/sale.py 2012-02-07 05:46:24 +0000 @@ -468,7 +468,6 @@ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') res_id = res and res[1] or False, - return { 'name': _('Customer Invoices'), 'view_type': 'form',
_______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : [email protected] Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp

