From 1a77661e1a1fb49436afbac88d5b3b3d0d5cec86 Mon Sep 17 00:00:00 2001 From: acysos Date: Sun, 11 Jan 2015 16:33:53 +0100 Subject: [PATCH 1/9] product_customer_code: prepare field to migration --- product_customer_code/models/product.py | 73 +++++++++++++++++++ .../models/product_customer_code.py | 67 +++++++++++++++++ .../views/product_customer_code_view.xml | 61 ++++++++++++++++ .../views/product_product_view.xml | 31 ++++++++ 4 files changed, 232 insertions(+) create mode 100644 product_customer_code/models/product.py create mode 100644 product_customer_code/models/product_customer_code.py create mode 100644 product_customer_code/views/product_customer_code_view.xml create mode 100644 product_customer_code/views/product_product_view.xml diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py new file mode 100644 index 00000000000..350a66f23db --- /dev/null +++ b/product_customer_code/models/product.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +########################################################################### +# Module Writen to OpenERP, Open Source Management Solution +# +# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com +# All Rights Reserved. +# info@vauxoo.com +############################################################################ +# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) +############################################################################ +# +# 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 . +# +############################################################################## +from openerp.osv import orm, fields +from openerp.tools.translate import _ + + +class product_product(orm.Model): + _inherit = "product.product" + + _columns = { + 'product_customer_code_ids': fields.one2many('product.customer.code', + 'product_id', + 'Customer Codes'), + } + + def copy(self, cr, uid, id, default=None, context=None): + if not default: + default = {} + default['product_customer_code_ids'] = False + res = super(product_product, self).copy( + cr, uid, id, default=default, context=context) + return res + + def name_search(self, cr, user, name='', args=None, operator='ilike', + context=None, limit=80): + res = super(product_product, self).name_search( + cr, user, name, args, operator, context, limit) + if not context: + context = {} + product_customer_code_obj = self.pool.get('product.customer.code') + if not res: + ids = [] + partner_id = context.get('partner_id', False) + if partner_id: + id_prod_code = \ + product_customer_code_obj.search(cr, user, + [('product_code', + '=', name), + ('partner_id', '=', + partner_id)], + limit=limit, + context=context) + # TODO: Search for product customer name + id_prod = id_prod_code and product_customer_code_obj.browse( + cr, user, id_prod_code, context=context) or [] + for ppu in id_prod: + ids.append(ppu.product_id.id) + if ids: + res = self.name_get(cr, user, ids, context) + return res diff --git a/product_customer_code/models/product_customer_code.py b/product_customer_code/models/product_customer_code.py new file mode 100644 index 00000000000..d3593891a20 --- /dev/null +++ b/product_customer_code/models/product_customer_code.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +########################################################################### +# Module Writen to OpenERP, Open Source Management Solution +# +# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com +# All Rights Reserved. +# info@vauxoo.com +############################################################################ +# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) +############################################################################ +# +# 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 . +# +############################################################################## +from openerp.osv import orm, fields +from openerp.tools.translate import _ + + +class product_customer_code(orm.Model): + _name = "product.customer.code" + _description = "Add manies Code of Customer's" + + _rec_name = 'product_code' + + _columns = { + 'product_code': fields.char('Customer Product Code', size=64, + required=True, + help="""This customer's product code + will be used when searching into + a request for quotation."""), + 'product_name': fields.char('Customer Product Name', size=128, + help="""This customer's product name will + be used when searching into a + request for quotation."""), + 'product_id': fields.many2one('product.product', 'Product', + required=True), + 'partner_id': fields.many2one('res.partner', 'Customer', + required=True), + 'company_id': fields.many2one('res.company', 'Company', + required=False), + } + + _defaults = { + 'company_id': lambda s, cr, + uid, c: s.pool.get('res.company'). + _company_default_get(cr, uid, + 'product.customer.code', + context=c), + } + + _sql_constraints = [ + ('unique_code', 'unique(product_code,company_id,partner_id)', + 'Product Code of customer must be unique'), + ] + + # TODO: Add index to product_code, partner_id diff --git a/product_customer_code/views/product_customer_code_view.xml b/product_customer_code/views/product_customer_code_view.xml new file mode 100644 index 00000000000..0fddfd30f01 --- /dev/null +++ b/product_customer_code/views/product_customer_code_view.xml @@ -0,0 +1,61 @@ + + + + + + view.product.customer.code.form + product.customer.code + +
+ + + + + + +
+ + + view.product.customer.code.tree + product.customer.code + + + + + + + + + + + + Product Customer Code + product.customer.code + form + + + + + view.product.customer.code.certificate.search + product.customer.code + + + + + + + + + + + + + + + + + + + +
+
diff --git a/product_customer_code/views/product_product_view.xml b/product_customer_code/views/product_product_view.xml new file mode 100644 index 00000000000..3aec998b591 --- /dev/null +++ b/product_customer_code/views/product_product_view.xml @@ -0,0 +1,31 @@ + + + + + + product.normal.form.inh.product.customer.code.01 + product.product + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+
\ No newline at end of file From 939b81db1aa4e33a770960257cd577682e847567 Mon Sep 17 00:00:00 2001 From: acysos Date: Sun, 11 Jan 2015 16:35:45 +0100 Subject: [PATCH 2/9] [FIX] product_customer_code: migrated to 8.0 - Add search improvements by customer code and name --- product_customer_code/README.rst | 12 ++ product_customer_code/__init__.py | 29 ++++- product_customer_code/__openerp__.py | 32 ++--- product_customer_code/models/__init__.py | 28 +++++ product_customer_code/models/product.py | 118 ++++++++++++------ .../models/product_customer_code.py | 55 +++----- .../views/product_customer_code_view.xml | 19 +-- .../views/product_product_view.xml | 17 ++- 8 files changed, 195 insertions(+), 115 deletions(-) create mode 100644 product_customer_code/README.rst create mode 100644 product_customer_code/models/__init__.py diff --git a/product_customer_code/README.rst b/product_customer_code/README.rst new file mode 100644 index 00000000000..0997ce96838 --- /dev/null +++ b/product_customer_code/README.rst @@ -0,0 +1,12 @@ +Customer' codes in product +========================== + +This module does just like the product.supplierinfo but for customers instead. For instance it +allows to have different references for the same product according to the customer. + +.. image:: product_customer_code/static/src/img/screenshot1.png + +.. tip:: + + You will need install some of the Apps which enable the product menu to see this module in + action, like Sales, Purchase or Warehouse Management \ No newline at end of file diff --git a/product_customer_code/__init__.py b/product_customer_code/__init__.py index df5910868b4..31dba0968e0 100644 --- a/product_customer_code/__init__.py +++ b/product_customer_code/__init__.py @@ -1,2 +1,27 @@ -import product_customer_code -import product +# -*- encoding: utf-8 -*- +########################################################################### +# Module Writen to OpenERP, Open Source Management Solution +# +# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com/ +# All Rights Reserved. +# info Vauxoo (info@vauxoo.com) +############################################################################ +# Coded by: el_rodo_1 (rodo@vauxoo.com) +############################################################################ +# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com +# +# 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 . +# +############################################################################## +from . import models diff --git a/product_customer_code/__openerp__.py b/product_customer_code/__openerp__.py index af8cd13e819..f2c4e9b2d6f 100644 --- a/product_customer_code/__openerp__.py +++ b/product_customer_code/__openerp__.py @@ -8,6 +8,7 @@ ############################################################################ # Coded by: el_rodo_1 (rodo@vauxoo.com) ############################################################################ +# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -31,30 +32,13 @@ "license": "AGPL-3", "category": "Generic Modules/Product", "summary": "Add many Customers' Codes in product", - "depends": [ - "base", - "product", - ], - "description": """ -Customer' codes in product -========================== - -This module does just like the product.supplierinfo but for customers instead. For instance it -allows to have different references for the same product according to the customer. - -.. image:: product_customer_code/static/src/img/screenshot1.png - -.. tip:: - - You will need install some of the Apps which enable the product menu to see this module in - action, like Sales, Purchase or Warehouse Management - """, + "depends": ["base", "product"], "data": [ - "security/product_customer_code_security.xml", - "security/ir.model.access.csv", - "product_customer_code_view.xml", - "product_product_view.xml", + 'security/product_customer_code_security.xml', + 'security/ir.model.access.csv', + 'views/product_customer_code_view.xml', + 'views/product_product_view.xml', ], - "active": False, - 'installable': False, + 'active': False, + 'installable': True, } diff --git a/product_customer_code/models/__init__.py b/product_customer_code/models/__init__.py new file mode 100644 index 00000000000..47d55d4964b --- /dev/null +++ b/product_customer_code/models/__init__.py @@ -0,0 +1,28 @@ +# -*- encoding: utf-8 -*- +########################################################################### +# Module Writen to OpenERP, Open Source Management Solution +# +# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com/ +# All Rights Reserved. +# info Vauxoo (info@vauxoo.com) +############################################################################ +# Coded by: el_rodo_1 (rodo@vauxoo.com) +############################################################################ +# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com +# +# 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 . +# +############################################################################## +from . import product_customer_code +from . import product diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py index 350a66f23db..63cd7b5fd98 100644 --- a/product_customer_code/models/product.py +++ b/product_customer_code/models/product.py @@ -8,6 +8,7 @@ ############################################################################ # Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) ############################################################################ +# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -23,51 +24,94 @@ # along with this program. If not, see . # ############################################################################## -from openerp.osv import orm, fields +from openerp import models, fields, api from openerp.tools.translate import _ -class product_product(orm.Model): - _inherit = "product.product" +class ProductTemplate(models.Model): + _inherit = "product.template" - _columns = { - 'product_customer_code_ids': fields.one2many('product.customer.code', - 'product_id', - 'Customer Codes'), - } + product_customer_code_ids = fields.One2many( + comodel_name='product.customer.code', inverse_name='product_id', + string='Customer Codes') - def copy(self, cr, uid, id, default=None, context=None): + @api.model + def copy(self, default): if not default: default = {} default['product_customer_code_ids'] = False - res = super(product_product, self).copy( - cr, uid, id, default=default, context=context) + res = super(ProductTemplate, self).copy(default) + return res + + def search(self, cr, uid, args, offset=0, limit=None, order=None, + context=None, count=False): + res = super(ProductTemplate, self).search(cr, uid, args, offset=offset, + limit=limit, order=order, + count=count) + operator = False + term = False + for arg in args: + if arg[0] == 'name': + operator = arg[1] + term = arg[2] + if not res and operator is not False and term is not False: + product_customer_code_obj = self.pool.get('product.customer.code') + product_ids = set(product_customer_code_obj.search( + cr, uid, [('product_code', operator, term)], limit=limit, + context=context)) + if not limit or len(product_ids) < limit: + limit2 = (limit - len(product_ids)) if limit else False + product_ids.update(product_customer_code_obj.search( + cr, uid, [('product_name', operator, term)], limit=limit2, + context=context)) + product_ids = list(product_ids) + + product_datas = product_customer_code_obj.browse(cr, uid, + product_ids, + context) + + prod_ids = [] + for product_data in product_datas: + prod_ids.append(product_data.product_id.id) + res = prod_ids + return res - def name_search(self, cr, user, name='', args=None, operator='ilike', - context=None, limit=80): - res = super(product_product, self).name_search( - cr, user, name, args, operator, context, limit) - if not context: - context = {} - product_customer_code_obj = self.pool.get('product.customer.code') - if not res: - ids = [] - partner_id = context.get('partner_id', False) - if partner_id: - id_prod_code = \ - product_customer_code_obj.search(cr, user, - [('product_code', - '=', name), - ('partner_id', '=', - partner_id)], - limit=limit, - context=context) - # TODO: Search for product customer name - id_prod = id_prod_code and product_customer_code_obj.browse( - cr, user, id_prod_code, context=context) or [] - for ppu in id_prod: - ids.append(ppu.product_id.id) - if ids: - res = self.name_get(cr, user, ids, context) + +class ProductProduct(models.Model): + _inherit = "product.product" + + def search(self, cr, uid, args, offset=0, limit=None, order=None, + context=None, count=False): + res = super(ProductProduct, self).search(cr, uid, args, offset=offset, + limit=limit, order=order, + context=context, count=count) + operator = False + term = False + for arg in args: + if arg[0] == 'name': + operator = arg[1] + term = arg[2] + + if not res and operator is not False and term is not False: + cust_data_obj = self.pool.get('product.customer.code') + cust_ids = set(cust_data_obj.search( + cr, uid, [('product_code', operator, term)], limit=limit, + context=context)) + if not limit or len(cust_ids) < limit: + limit2 = (limit - len(cust_ids)) if limit else False + cust_ids.update(cust_data_obj.search( + cr, uid, [('product_name', operator, term)], limit=limit2, + context=context)) + cust_ids = list(cust_ids) + + products_template = cust_data_obj.read(cr, uid, cust_ids, + ['product_id'], context) + product_obj = self.pool.get('product.product') + for template in products_template: + prod_ids = product_obj.search( + cr, uid, [('product_tmpl_id', '=', + template['product_id'][0])], context=context) + for prod_id in prod_ids: + res.append(prod_id) return res diff --git a/product_customer_code/models/product_customer_code.py b/product_customer_code/models/product_customer_code.py index d3593891a20..f19e70d1084 100644 --- a/product_customer_code/models/product_customer_code.py +++ b/product_customer_code/models/product_customer_code.py @@ -8,6 +8,7 @@ ############################################################################ # Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) ############################################################################ +# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -23,45 +24,27 @@ # along with this program. If not, see . # ############################################################################## -from openerp.osv import orm, fields +from openerp import models, fields, api from openerp.tools.translate import _ -class product_customer_code(orm.Model): +class ProductCustomerCode(models.Model): _name = "product.customer.code" _description = "Add manies Code of Customer's" - _rec_name = 'product_code' - - _columns = { - 'product_code': fields.char('Customer Product Code', size=64, - required=True, - help="""This customer's product code - will be used when searching into - a request for quotation."""), - 'product_name': fields.char('Customer Product Name', size=128, - help="""This customer's product name will - be used when searching into a - request for quotation."""), - 'product_id': fields.many2one('product.product', 'Product', - required=True), - 'partner_id': fields.many2one('res.partner', 'Customer', - required=True), - 'company_id': fields.many2one('res.company', 'Company', - required=False), - } - - _defaults = { - 'company_id': lambda s, cr, - uid, c: s.pool.get('res.company'). - _company_default_get(cr, uid, - 'product.customer.code', - context=c), - } - - _sql_constraints = [ - ('unique_code', 'unique(product_code,company_id,partner_id)', - 'Product Code of customer must be unique'), - ] - - # TODO: Add index to product_code, partner_id + product_name = fields.Char(string='Customer Product Name', + help="""This customer's product name will + be used when searching into a + request for quotation.""") + product_code = fields.Char(string='Customer Product Code', + help="""This customer's product code + will be used when searching into + a request for quotation.""") + product_id = fields.Many2one(comodel_name='product.template', + string='Product', required=True) + partner_id = fields.Many2one(comodel_name='res.partner', string='Customer', + required=True) + company_id = fields.Many2one( + comodel_name='res.company', string='Company', required=False, + default=lambda self: self.env['res.company']._company_default_get( + 'product.customer.code')) diff --git a/product_customer_code/views/product_customer_code_view.xml b/product_customer_code/views/product_customer_code_view.xml index 0fddfd30f01..dcb2d243c3e 100644 --- a/product_customer_code/views/product_customer_code_view.xml +++ b/product_customer_code/views/product_customer_code_view.xml @@ -6,11 +6,14 @@ view.product.customer.code.form product.customer.code -
- - - - + + + + + + + + @@ -20,10 +23,11 @@ product.customer.code + + - @@ -40,10 +44,11 @@ product.customer.code + + - diff --git a/product_customer_code/views/product_product_view.xml b/product_customer_code/views/product_product_view.xml index 3aec998b591..c4c91dce3fc 100644 --- a/product_customer_code/views/product_product_view.xml +++ b/product_customer_code/views/product_product_view.xml @@ -2,23 +2,22 @@ - - product.normal.form.inh.product.customer.code.01 - product.product - + + product.template.form.inh.product.customer.code.01 + product.template + - + + - -
+ + From 8fc901e686cc2fac33f8435f882bc899a18c5e1b Mon Sep 17 00:00:00 2001 From: acysos Date: Sun, 11 Jan 2015 17:19:54 +0100 Subject: [PATCH 3/9] [FIX] product_customer_code: fix flake8 error --- product_customer_code/models/product.py | 1 - product_customer_code/models/product_customer_code.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py index 63cd7b5fd98..29a9820ffe6 100644 --- a/product_customer_code/models/product.py +++ b/product_customer_code/models/product.py @@ -25,7 +25,6 @@ # ############################################################################## from openerp import models, fields, api -from openerp.tools.translate import _ class ProductTemplate(models.Model): diff --git a/product_customer_code/models/product_customer_code.py b/product_customer_code/models/product_customer_code.py index f19e70d1084..81b4768deac 100644 --- a/product_customer_code/models/product_customer_code.py +++ b/product_customer_code/models/product_customer_code.py @@ -24,8 +24,7 @@ # along with this program. If not, see . # ############################################################################## -from openerp import models, fields, api -from openerp.tools.translate import _ +from openerp import models, fields class ProductCustomerCode(models.Model): From dc57be42706cf4deb95f3a72ce8b5f24000c46b1 Mon Sep 17 00:00:00 2001 From: Nicola Malcontenti Date: Wed, 23 Dec 2015 15:37:33 +0100 Subject: [PATCH 4/9] [FIX] FIx flake8 --- product_customer_code/__openerp__.py | 1 - product_customer_code/models/product.py | 118 ++++++------------ .../models/product_customer_code.py | 2 +- product_customer_code/product.py | 73 ----------- .../product_customer_code.py | 67 ---------- .../product_customer_code_view.xml | 61 --------- .../product_product_view.xml | 31 ----- .../views/product_product_view.xml | 14 +-- 8 files changed, 44 insertions(+), 323 deletions(-) delete mode 100644 product_customer_code/product.py delete mode 100644 product_customer_code/product_customer_code.py delete mode 100644 product_customer_code/product_customer_code_view.xml delete mode 100644 product_customer_code/product_product_view.xml diff --git a/product_customer_code/__openerp__.py b/product_customer_code/__openerp__.py index f2c4e9b2d6f..80701c8c8c3 100644 --- a/product_customer_code/__openerp__.py +++ b/product_customer_code/__openerp__.py @@ -39,6 +39,5 @@ 'views/product_customer_code_view.xml', 'views/product_product_view.xml', ], - 'active': False, 'installable': True, } diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py index 29a9820ffe6..f0ec40e764e 100644 --- a/product_customer_code/models/product.py +++ b/product_customer_code/models/product.py @@ -8,7 +8,6 @@ ############################################################################ # Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) ############################################################################ -# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -24,93 +23,50 @@ # along with this program. If not, see . # ############################################################################## -from openerp import models, fields, api +from openerp.osv import orm, fields -class ProductTemplate(models.Model): - _inherit = "product.template" +class product_product(orm.Model): + _inherit = "product.product" - product_customer_code_ids = fields.One2many( - comodel_name='product.customer.code', inverse_name='product_id', - string='Customer Codes') + _columns = { + 'product_customer_code_ids': fields.one2many('product.customer.code', + 'product_id', + 'Customer Codes'), + } - @api.model - def copy(self, default): + def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} default['product_customer_code_ids'] = False - res = super(ProductTemplate, self).copy(default) - return res - - def search(self, cr, uid, args, offset=0, limit=None, order=None, - context=None, count=False): - res = super(ProductTemplate, self).search(cr, uid, args, offset=offset, - limit=limit, order=order, - count=count) - operator = False - term = False - for arg in args: - if arg[0] == 'name': - operator = arg[1] - term = arg[2] - if not res and operator is not False and term is not False: - product_customer_code_obj = self.pool.get('product.customer.code') - product_ids = set(product_customer_code_obj.search( - cr, uid, [('product_code', operator, term)], limit=limit, - context=context)) - if not limit or len(product_ids) < limit: - limit2 = (limit - len(product_ids)) if limit else False - product_ids.update(product_customer_code_obj.search( - cr, uid, [('product_name', operator, term)], limit=limit2, - context=context)) - product_ids = list(product_ids) - - product_datas = product_customer_code_obj.browse(cr, uid, - product_ids, - context) - - prod_ids = [] - for product_data in product_datas: - prod_ids.append(product_data.product_id.id) - res = prod_ids - + res = super(product_product, self).copy( + cr, uid, id, default=default, context=context) return res - -class ProductProduct(models.Model): - _inherit = "product.product" - - def search(self, cr, uid, args, offset=0, limit=None, order=None, - context=None, count=False): - res = super(ProductProduct, self).search(cr, uid, args, offset=offset, - limit=limit, order=order, - context=context, count=count) - operator = False - term = False - for arg in args: - if arg[0] == 'name': - operator = arg[1] - term = arg[2] - - if not res and operator is not False and term is not False: - cust_data_obj = self.pool.get('product.customer.code') - cust_ids = set(cust_data_obj.search( - cr, uid, [('product_code', operator, term)], limit=limit, - context=context)) - if not limit or len(cust_ids) < limit: - limit2 = (limit - len(cust_ids)) if limit else False - cust_ids.update(cust_data_obj.search( - cr, uid, [('product_name', operator, term)], limit=limit2, - context=context)) - cust_ids = list(cust_ids) - - products_template = cust_data_obj.read(cr, uid, cust_ids, - ['product_id'], context) - product_obj = self.pool.get('product.product') - for template in products_template: - prod_ids = product_obj.search( - cr, uid, [('product_tmpl_id', '=', - template['product_id'][0])], context=context) - for prod_id in prod_ids: - res.append(prod_id) + def name_search(self, cr, user, name='', args=None, operator='ilike', + context=None, limit=80): + res = super(product_product, self).name_search( + cr, user, name, args, operator, context, limit) + if not context: + context = {} + product_customer_code_obj = self.pool.get('product.customer.code') + if not res: + ids = [] + partner_id = context.get('partner_id', False) + if partner_id: + id_prod_code = \ + product_customer_code_obj.search(cr, user, + [('product_code', + '=', name), + ('partner_id', '=', + partner_id)], + limit=limit, + context=context) + # TODO: Search for product customer name + id_prod = id_prod_code and product_customer_code_obj.browse( + cr, user, id_prod_code, context=context) or [] + for ppu in id_prod: + ids.append(ppu.product_id.id) + if ids: + res = self.name_get(cr, user, ids, context) return res diff --git a/product_customer_code/models/product_customer_code.py b/product_customer_code/models/product_customer_code.py index 81b4768deac..45992b95fbc 100644 --- a/product_customer_code/models/product_customer_code.py +++ b/product_customer_code/models/product_customer_code.py @@ -39,7 +39,7 @@ class ProductCustomerCode(models.Model): help="""This customer's product code will be used when searching into a request for quotation.""") - product_id = fields.Many2one(comodel_name='product.template', + product_id = fields.Many2one(comodel_name='product.product', string='Product', required=True) partner_id = fields.Many2one(comodel_name='res.partner', string='Customer', required=True) diff --git a/product_customer_code/product.py b/product_customer_code/product.py deleted file mode 100644 index 350a66f23db..00000000000 --- a/product_customer_code/product.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com -# All Rights Reserved. -# info@vauxoo.com -############################################################################ -# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) -############################################################################ -# -# 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 . -# -############################################################################## -from openerp.osv import orm, fields -from openerp.tools.translate import _ - - -class product_product(orm.Model): - _inherit = "product.product" - - _columns = { - 'product_customer_code_ids': fields.one2many('product.customer.code', - 'product_id', - 'Customer Codes'), - } - - def copy(self, cr, uid, id, default=None, context=None): - if not default: - default = {} - default['product_customer_code_ids'] = False - res = super(product_product, self).copy( - cr, uid, id, default=default, context=context) - return res - - def name_search(self, cr, user, name='', args=None, operator='ilike', - context=None, limit=80): - res = super(product_product, self).name_search( - cr, user, name, args, operator, context, limit) - if not context: - context = {} - product_customer_code_obj = self.pool.get('product.customer.code') - if not res: - ids = [] - partner_id = context.get('partner_id', False) - if partner_id: - id_prod_code = \ - product_customer_code_obj.search(cr, user, - [('product_code', - '=', name), - ('partner_id', '=', - partner_id)], - limit=limit, - context=context) - # TODO: Search for product customer name - id_prod = id_prod_code and product_customer_code_obj.browse( - cr, user, id_prod_code, context=context) or [] - for ppu in id_prod: - ids.append(ppu.product_id.id) - if ids: - res = self.name_get(cr, user, ids, context) - return res diff --git a/product_customer_code/product_customer_code.py b/product_customer_code/product_customer_code.py deleted file mode 100644 index d3593891a20..00000000000 --- a/product_customer_code/product_customer_code.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com -# All Rights Reserved. -# info@vauxoo.com -############################################################################ -# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) -############################################################################ -# -# 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 . -# -############################################################################## -from openerp.osv import orm, fields -from openerp.tools.translate import _ - - -class product_customer_code(orm.Model): - _name = "product.customer.code" - _description = "Add manies Code of Customer's" - - _rec_name = 'product_code' - - _columns = { - 'product_code': fields.char('Customer Product Code', size=64, - required=True, - help="""This customer's product code - will be used when searching into - a request for quotation."""), - 'product_name': fields.char('Customer Product Name', size=128, - help="""This customer's product name will - be used when searching into a - request for quotation."""), - 'product_id': fields.many2one('product.product', 'Product', - required=True), - 'partner_id': fields.many2one('res.partner', 'Customer', - required=True), - 'company_id': fields.many2one('res.company', 'Company', - required=False), - } - - _defaults = { - 'company_id': lambda s, cr, - uid, c: s.pool.get('res.company'). - _company_default_get(cr, uid, - 'product.customer.code', - context=c), - } - - _sql_constraints = [ - ('unique_code', 'unique(product_code,company_id,partner_id)', - 'Product Code of customer must be unique'), - ] - - # TODO: Add index to product_code, partner_id diff --git a/product_customer_code/product_customer_code_view.xml b/product_customer_code/product_customer_code_view.xml deleted file mode 100644 index 0fddfd30f01..00000000000 --- a/product_customer_code/product_customer_code_view.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - view.product.customer.code.form - product.customer.code - -
- - - - - - -
- - - view.product.customer.code.tree - product.customer.code - - - - - - - - - - - - Product Customer Code - product.customer.code - form - - - - - view.product.customer.code.certificate.search - product.customer.code - - - - - - - - - - - - - - - - - - - -
-
diff --git a/product_customer_code/product_product_view.xml b/product_customer_code/product_product_view.xml deleted file mode 100644 index 3aec998b591..00000000000 --- a/product_customer_code/product_product_view.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - product.normal.form.inh.product.customer.code.01 - product.product - - - - - - - - - - -
- - - - -
-
-
-
- -
-
\ No newline at end of file diff --git a/product_customer_code/views/product_product_view.xml b/product_customer_code/views/product_product_view.xml index c4c91dce3fc..e261740a75c 100644 --- a/product_customer_code/views/product_product_view.xml +++ b/product_customer_code/views/product_product_view.xml @@ -2,22 +2,20 @@ - - product.template.form.inh.product.customer.code.01 - product.template - + + product.normal.form.inh.product.customer.code.01 + product.product + - + - -
+ - From 505ebe42b52eaee7849645321dbf541bd8daa0cb Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 14 May 2016 15:56:35 +0700 Subject: [PATCH 5/9] [ADD] Adding unittest for copy and name_search --- product_customer_code/__init__.py | 1 + product_customer_code/tests/__init__.py | 6 ++ product_customer_code/tests/test_copy.py | 16 +++++ .../tests/test_name_search.py | 60 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 product_customer_code/tests/__init__.py create mode 100644 product_customer_code/tests/test_copy.py create mode 100644 product_customer_code/tests/test_name_search.py diff --git a/product_customer_code/__init__.py b/product_customer_code/__init__.py index 31dba0968e0..ff1934ece2f 100644 --- a/product_customer_code/__init__.py +++ b/product_customer_code/__init__.py @@ -25,3 +25,4 @@ # ############################################################################## from . import models +from . import tests diff --git a/product_customer_code/tests/__init__.py b/product_customer_code/tests/__init__.py new file mode 100644 index 00000000000..7c47b606f9d --- /dev/null +++ b/product_customer_code/tests/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_copy +from . import test_name_search diff --git a/product_customer_code/tests/test_copy.py b/product_customer_code/tests/test_copy.py new file mode 100644 index 00000000000..7e7d50d4ee4 --- /dev/null +++ b/product_customer_code/tests/test_copy.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests.common import TransactionCase + + +class ProductCaseCopy(TransactionCase): + def setUp(self, *args, **kwargs): + super(ProductCaseCopy, self).setUp(*args, **kwargs) + # Data Products + self.prod = self.env.ref('product.product_product_5') + + def test_copy(self): + prod_copy = self.prod.copy() + self.assertFalse(prod_copy.product_customer_code_ids) diff --git a/product_customer_code/tests/test_name_search.py b/product_customer_code/tests/test_name_search.py new file mode 100644 index 00000000000..198cf2ba2ce --- /dev/null +++ b/product_customer_code/tests/test_name_search.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests.common import TransactionCase + + +class ProductCaseNameSearch(TransactionCase): + def setUp(self, *args, **kwargs): + super(ProductCaseNameSearch, self).setUp(*args, **kwargs) + # Objects + self.obj_product = self.env['product.product'] + + # Data Category Product + self.categ = self.ref('product.accessories') + + # Data UOM + self.uom = self.ref('product.product_uom_unit') + + # Data Partner + self.partner = self.ref('base.res_partner_3') + + def _prepare_product_data(self): + data = { + 'name': 'Test Product - 1', + 'categ_id': self.categ, + 'standard_price': 500.0, + 'list_price': 150.5, + 'type': 'consu', + 'uom_id': self.uom, + 'uom_po_id': self.uom, + 'default_code': 'TST001', + 'product_customer_code_ids': [ + (0, 0, {'product_name': 'Test Product - 1', + 'product_code': 'CUST001', + 'partner_id': self.partner}) + ] + } + + return data + + def _create_product(self): + data = self._prepare_product_data() + product = self.obj_product.create(data) + + return product + + def test_name_search(self): + prod_id = self._create_product().id + # Check Create Product + self.assertIsNotNone(prod_id) + + # Check Name Search + self.prod_ids = [prod_id] + search_ids = self.obj_product.with_context(partner_id=self.partner).\ + name_search( + name="CUST001", + operator='ilike', + args=[('id', 'in', self.prod_ids)]) + self.assertEqual(set([prod_id]), set([a[0] for a in search_ids])) From 4223cf5d04dfc150cfecf60d460a76db769a54ba Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 14 May 2016 16:01:11 +0700 Subject: [PATCH 6/9] [UPD] Using short header and adding OCA icon --- product_customer_code/__init__.py | 30 +++--------------- product_customer_code/__openerp__.py | 30 +++--------------- product_customer_code/models/__init__.py | 30 +++--------------- product_customer_code/models/product.py | 27 ++-------------- .../models/product_customer_code.py | 28 ++-------------- .../static/description/icon.png | Bin 0 -> 9455 bytes 6 files changed, 18 insertions(+), 127 deletions(-) create mode 100644 product_customer_code/static/description/icon.png diff --git a/product_customer_code/__init__.py b/product_customer_code/__init__.py index ff1934ece2f..c3fd553c6a0 100644 --- a/product_customer_code/__init__.py +++ b/product_customer_code/__init__.py @@ -1,28 +1,6 @@ -# -*- encoding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com/ -# All Rights Reserved. -# info Vauxoo (info@vauxoo.com) -############################################################################ -# Coded by: el_rodo_1 (rodo@vauxoo.com) -############################################################################ -# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com -# -# 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 . -# -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import models from . import tests diff --git a/product_customer_code/__openerp__.py b/product_customer_code/__openerp__.py index 80701c8c8c3..8a8413138d7 100644 --- a/product_customer_code/__openerp__.py +++ b/product_customer_code/__openerp__.py @@ -1,29 +1,7 @@ -# -*- encoding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com/ -# All Rights Reserved. -# info Vauxoo (info@vauxoo.com) -############################################################################ -# Coded by: el_rodo_1 (rodo@vauxoo.com) -############################################################################ -# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com -# -# 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 . -# -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + { "name": "Products Customer Code", "version": "1.0", diff --git a/product_customer_code/models/__init__.py b/product_customer_code/models/__init__.py index 47d55d4964b..69d00e818ec 100644 --- a/product_customer_code/models/__init__.py +++ b/product_customer_code/models/__init__.py @@ -1,28 +1,6 @@ -# -*- encoding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com/ -# All Rights Reserved. -# info Vauxoo (info@vauxoo.com) -############################################################################ -# Coded by: el_rodo_1 (rodo@vauxoo.com) -############################################################################ -# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com -# -# 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 . -# -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from . import product_customer_code from . import product diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py index f0ec40e764e..eeb83822669 100644 --- a/product_customer_code/models/product.py +++ b/product_customer_code/models/product.py @@ -1,28 +1,7 @@ # -*- coding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com -# All Rights Reserved. -# info@vauxoo.com -############################################################################ -# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) -############################################################################ -# -# 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 . -# -############################################################################## +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp.osv import orm, fields diff --git a/product_customer_code/models/product_customer_code.py b/product_customer_code/models/product_customer_code.py index 45992b95fbc..f4c3cbd1294 100644 --- a/product_customer_code/models/product_customer_code.py +++ b/product_customer_code/models/product_customer_code.py @@ -1,29 +1,7 @@ # -*- coding: utf-8 -*- -########################################################################### -# Module Writen to OpenERP, Open Source Management Solution -# -# Copyright (c) 2012 Vauxoo - http://www.vauxoo.com -# All Rights Reserved. -# info@vauxoo.com -############################################################################ -# Coded by: Rodo (rodo@vauxoo.com),Moy (moylop260@vauxoo.com) -############################################################################ -# Migrated to Odoo 8.0 by Acysos S.L. - http://www.acysos.com -# -# 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 . -# -############################################################################## +# © 2014 Acsone SA/NV (http://www.acsone.eu) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + from openerp import models, fields diff --git a/product_customer_code/static/description/icon.png b/product_customer_code/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From f384fe4e7bc05b121a4903e845444ecec4150ae3 Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 14 May 2016 16:12:14 +0700 Subject: [PATCH 7/9] [UPD] Adjusting README.rst with OCA --- product_customer_code/README.rst | 74 ++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/product_customer_code/README.rst b/product_customer_code/README.rst index 0997ce96838..4aecdc3d2a3 100644 --- a/product_customer_code/README.rst +++ b/product_customer_code/README.rst @@ -1,5 +1,10 @@ -Customer' codes in product -========================== +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +====================== +Products Customer Code +====================== This module does just like the product.supplierinfo but for customers instead. For instance it allows to have different references for the same product according to the customer. @@ -9,4 +14,67 @@ allows to have different references for the same product according to the custom .. tip:: You will need install some of the Apps which enable the product menu to see this module in - action, like Sales, Purchase or Warehouse Management \ No newline at end of file + action, like Sales, Purchase or Warehouse Management + +Installation +============ + +To install this module, you need to: + +1. Clone the branch 8.0 of the repository https://github.com/OCA/product-attribute +2. Add the path to this repository in your configuration (addons-path) +3. Update the module list +4. Go to menu *Setting -> Modules -> Local Modules* +5. Search For *Products Customer Code* +6. Install the module + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/135/8.0 + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed `feedback +`_. + + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Hurrinico +* OpenSynergy Indonesia +* Michael Viriyananda + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. From 1a56fa6241b505451794b834dfff6a326c38ef20 Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 19 May 2016 09:21:00 +0700 Subject: [PATCH 8/9] Fix error Travis --- product_customer_code/__openerp__.py | 18 +++++++------- product_customer_code/models/product.py | 24 +++++++++---------- .../views/product_product_view.xml | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/product_customer_code/__openerp__.py b/product_customer_code/__openerp__.py index 8a8413138d7..677d059ca36 100644 --- a/product_customer_code/__openerp__.py +++ b/product_customer_code/__openerp__.py @@ -3,19 +3,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - "name": "Products Customer Code", - "version": "1.0", - "author": "Vauxoo,Odoo Community Association (OCA)", - "website": "http://www.vauxoo.com/", - "license": "AGPL-3", - "category": "Generic Modules/Product", - "summary": "Add many Customers' Codes in product", - "depends": ["base", "product"], - "data": [ + 'name': 'Products Customer Code', + 'version': '8.0.1.0.0', + 'summary': 'Add many Customers Codes in product', + 'author': 'Vauxoo,Odoo Community Association (OCA)', + 'website': 'http://www.vauxoo.com/', + 'category': 'Generic Modules/Product', + 'depends': ['base', 'product'], + 'data': [ 'security/product_customer_code_security.xml', 'security/ir.model.access.csv', 'views/product_customer_code_view.xml', 'views/product_product_view.xml', ], 'installable': True, + 'license': 'AGPL-3', } diff --git a/product_customer_code/models/product.py b/product_customer_code/models/product.py index eeb83822669..a55465492a8 100644 --- a/product_customer_code/models/product.py +++ b/product_customer_code/models/product.py @@ -2,29 +2,29 @@ # © 2014 Acsone SA/NV (http://www.acsone.eu) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.osv import orm, fields +from openerp import api, fields, models -class product_product(orm.Model): +class ProductProduct(models.Model): _inherit = "product.product" - _columns = { - 'product_customer_code_ids': fields.one2many('product.customer.code', - 'product_id', - 'Customer Codes'), - } + product_customer_code_ids = fields.One2many( + string='Customer Codes', + comodel_name='product.customer.code', + inverse_name='product_id' + ) - def copy(self, cr, uid, id, default=None, context=None): + @api.multi + def copy(self, default=None): if not default: default = {} default['product_customer_code_ids'] = False - res = super(product_product, self).copy( - cr, uid, id, default=default, context=context) - return res + return super(ProductProduct, self.with_context(copy=True))\ + .copy(default) def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=80): - res = super(product_product, self).name_search( + res = super(ProductProduct, self).name_search( cr, user, name, args, operator, context, limit) if not context: context = {} diff --git a/product_customer_code/views/product_product_view.xml b/product_customer_code/views/product_product_view.xml index e261740a75c..d5585a50bc0 100644 --- a/product_customer_code/views/product_product_view.xml +++ b/product_customer_code/views/product_product_view.xml @@ -25,4 +25,4 @@
-
\ No newline at end of file +
From 5751224adfd3f203fe0ed2bbfaaf680533d715b9 Mon Sep 17 00:00:00 2001 From: Nicola Malcontenti Date: Mon, 3 Oct 2016 17:12:32 +0200 Subject: [PATCH 9/9] [FIX] Fix readme.rst --- product_customer_code/README.rst | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/product_customer_code/README.rst b/product_customer_code/README.rst index 4aecdc3d2a3..25a5b5002a8 100644 --- a/product_customer_code/README.rst +++ b/product_customer_code/README.rst @@ -9,7 +9,9 @@ Products Customer Code This module does just like the product.supplierinfo but for customers instead. For instance it allows to have different references for the same product according to the customer. -.. image:: product_customer_code/static/src/img/screenshot1.png +.. figure:: static/src/img/screenshot1.png + :alt: alternative description + :width: 600 px .. tip:: @@ -42,11 +44,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed `feedback -`_. +help us smashing it by providing a detailed and welcomed feedback. Credits