From 57cc9b5c71b61fc07b12688b99ee57c35f37c347 Mon Sep 17 00:00:00 2001 From: manu Date: Wed, 12 Oct 2011 15:01:59 +0200 Subject: [PATCH 01/26] [INIT] crm_claim_rma & product_warranty --- product_warranty/__init__.py | 23 +++++ product_warranty/__openerp__.py | 49 +++++++++ product_warranty/i18n/fr.po | 72 +++++++++++++ product_warranty/images/product_warranty.png | Bin 0 -> 85387 bytes product_warranty/product_warranty.py | 72 +++++++++++++ product_warranty/product_warranty_view.xml | 101 +++++++++++++++++++ 6 files changed, 317 insertions(+) create mode 100644 product_warranty/__init__.py create mode 100644 product_warranty/__openerp__.py create mode 100644 product_warranty/i18n/fr.po create mode 100644 product_warranty/images/product_warranty.png create mode 100644 product_warranty/product_warranty.py create mode 100644 product_warranty/product_warranty_view.xml diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py new file mode 100644 index 00000000..85031822 --- /dev/null +++ b/product_warranty/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +######################################################################### +# # +# # +######################################################################### +# # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# # +#This program is free software: you can redistribute it and/or modify # +#it under the terms of the GNU 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 General Public License for more details. # +# # +#You should have received a copy of the GNU General Public License # +#along with this program. If not, see . # +######################################################################### + +import product_warranty diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py new file mode 100644 index 00000000..1e45d31e --- /dev/null +++ b/product_warranty/__openerp__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +######################################################################### +# # +# # +######################################################################### +# # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# # +#This program is free software: you can redistribute it and/or modify # +#it under the terms of the GNU 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 General Public License for more details. # +# # +#You should have received a copy of the GNU General Public License # +#along with this program. If not, see . # +######################################################################### + + +{ + 'name': 'Product warranty', + 'version': '1.0', + 'category': 'Generic Modules/Product', + 'description': """ +Akretion - Emmanuel Samyn +Extend the product warranty management with warranty details on product / supplier relation +* supplier warranty duration +* return product to company, supplier, brand, other + """, + 'author': 'Akretion', + 'website': 'http://www.akretion.com', + 'depends': ['product'], + 'init_xml': [], + 'update_xml': [ + 'product_warranty_view.xml', + ], + 'demo_xml': [], + 'test': [], + 'installable': True, + 'active': False, + 'certificate' : '', + 'images': ['images/product_warranty.png'], +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_warranty/i18n/fr.po b/product_warranty/i18n/fr.po new file mode 100644 index 00000000..0fa3b071 --- /dev/null +++ b/product_warranty/i18n/fr.po @@ -0,0 +1,72 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0.2\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2011-10-20 10:07+0000\n" +"PO-Revision-Date: 2011-10-20 10:07+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_duration:0 +msgid "Warranty" +msgstr "Garantie" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" +msgstr "Garantie en nombre de mois pour ce fournisseur. Uniquement pour la relation entreprise/fournisseur (commandes d'achat) ; La relation entreprise/client (commandes de vente) utilise toujours le champ de garantie de la fiche produit" + +#. module: product_warranty +#: model:ir.module.module,description:product_warranty.module_meta_information +msgid "\n" +"Akretion - Emmanuel Samyn\n" +"Extend the product warranty management with warranty details on product / supplier relation\n" +"* supplier warranty duration\n" +"* return product to company, supplier, brand, other\n" +" " +msgstr "\n" +"Akretion - Emmanuel Samyn\n" +"Extend the product warranty management with warranty details on product / supplier relation\n" +"* supplier warranty duration\n" +"* return product to company, supplier, brand, other\n" +" " + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Information sur le fournisseur du produit" + +#. module: product_warranty +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Fournisseur actif" + +#. module: product_warranty +#: constraint:product.supplierinfo:0 +msgid "Error: The default UOM and the Supplier Product UOM must be in the same category." +msgstr "Erreur : l'UdM par défaut et l'UdM du fournisseur doivent appartenir à la même catégorie." + +#. module: product_warranty +#: model:ir.module.module,shortdesc:product_warranty.module_meta_information +msgid "Product warranty" +msgstr "Garantie du produit" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Warrantee return" +msgstr "Retour garantie" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" +msgstr "Indique qui est en charge du traitement du retour garantie envers le client final. L'entreprise utilise l'adresse de livraison, et sinon l'adresse par défaut. Il en va de même pour les options fournisseur ou fabricant. Ce champ n'implique pas forcément que la garantie qui va s'appliquer est celle de celui qui gère le retour." + diff --git a/product_warranty/images/product_warranty.png b/product_warranty/images/product_warranty.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eb36e6080badb69696ff6003d06c72a568c1c4 GIT binary patch literal 85387 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. # +######################################################################### + +from osv import fields, osv + +#===== +class return_instruction(osv.osv): + _name = "return.instruction" + _description = "Instructions for product return" + _columns = { + 'name': fields.char('Title', size=128, required=True), + 'instructions' : fields.text('Instructions', help="Instructions for product return"), + 'is_default' : fields.boolean('Is default', help="If is default, will be use to set the default value in supplier infos. Be careful to have only one default"), + } +return_instruction() + +#===== +class product_supplierinfo(osv.osv): + _inherit = "product.supplierinfo" + + def get_warranty_return_partner(self, cr, uid, context=None): + if self.pool.get('ir.module.module').search(cr, uid, [('name','like','product_brand'),('state','like','installed')]): + return [ + ('company','Company'), + ('supplier','Supplier'), + ('brand','Brand manufacturer'), + ('other','Other'),] + else: + return [ + ('company','Company'), + ('supplier','Supplier'), + ('other','Other'),] + + # Get selected lines to add to exchange + def _get_default_instructions(self, cr, uid,context): + instruction_ids = self.pool.get('return.instruction').search(cr, uid, [('is_default','=','FALSE')]) + if instruction_ids: + return instruction_ids[0] + + _columns = { + "warranty_duration" : fields.float('Warranty', help="Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field"), + "warranty_return_partner" : fields.selection(get_warranty_return_partner, 'Warrantee return', size=128, help="Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty"), + 'return_instructions': fields.many2one('return.instruction', 'Instructions',help="Instructions for product return"), + 'active_supplier' : fields.boolean('Active supplier', help=""), + } + _defaults = { + 'warranty_return_partner': lambda *a: 'company', + 'return_instructions': _get_default_instructions, + } + +product_supplierinfo() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml new file mode 100644 index 00000000..80c15889 --- /dev/null +++ b/product_warranty/product_warranty_view.xml @@ -0,0 +1,101 @@ + + + + + + + + + product.return.instructions.tree + return.instruction + tree + + + + + + + + + + + + product.return.instructions.form + return.instruction + form + +
+ + + + + + +
+ + + Products return instructions + ir.actions.act_window + return.instruction + form + tree,form + + + + + + + + product.supplierinfo.warranty.tree + product.supplierinfo + + tree + + + + + + + + + + + + + product.supplierinfo.warranty.form + product.supplierinfo + + form + + + + + + + + + + +
+
From c5171949426b3a0915116420cc3383a4e16ee254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulius=20Sladkevi=C4=8Dius?= Date: Thu, 15 Dec 2011 17:10:20 +0200 Subject: [PATCH 02/26] Added security rights for product_warranty --- product_warranty/__openerp__.py | 5 +++-- product_warranty/security/ir.model.access.csv | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 product_warranty/security/ir.model.access.csv diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 1e45d31e..03f092b0 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -36,10 +36,11 @@ Extend the product warranty management with warranty details on product / suppli 'depends': ['product'], 'init_xml': [], 'update_xml': [ + 'security/ir.model.access.csv', 'product_warranty_view.xml', ], - 'demo_xml': [], - 'test': [], + 'demo_xml': [], + 'test': [], 'installable': True, 'active': False, 'certificate' : '', diff --git a/product_warranty/security/ir.model.access.csv b/product_warranty/security/ir.model.access.csv new file mode 100644 index 00000000..a90c8a7a --- /dev/null +++ b/product_warranty/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id","group_id","perm_read","perm_write","perm_create","perm_unlink" +"access_return_instruction_user","return.instruction.user","return.instruction","Sales / User","True","True","True", +"access_return_instruction_manager","return.instruction.manager","return.instruction","Sales / Manager","True","True","True","True" From d45660b12f888fcb216c7312a2a002bd1c40493e Mon Sep 17 00:00:00 2001 From: manu Date: Tue, 3 Jan 2012 16:28:42 +0100 Subject: [PATCH 03/26] [UPDATE] --- product_warranty/product_warranty.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index b11858e3..544c3a82 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -54,7 +54,9 @@ class product_supplierinfo(osv.osv): def _get_default_instructions(self, cr, uid,context): instruction_ids = self.pool.get('return.instruction').search(cr, uid, [('is_default','=','FALSE')]) if instruction_ids: - return instruction_ids[0] + return instruction_ids[0] + # TO DO f(supplier) + other... + return False _columns = { "warranty_duration" : fields.float('Warranty', help="Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field"), From 51a0daee3a23204b167f3f6e9fb7046de5594fb2 Mon Sep 17 00:00:00 2001 From: Benoit Guillot Date: Wed, 12 Sep 2012 11:30:33 +0200 Subject: [PATCH 04/26] [IMP] product_warranty: add waranty_return_address on the product_supplierinfo --- product_warranty/product_warranty.py | 58 +++++++--- product_warranty/product_warranty_view.xml | 120 +++++++++++---------- 2 files changed, 103 insertions(+), 75 deletions(-) diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index 544c3a82..16c5e0bf 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -4,7 +4,7 @@ # # ######################################################################### # # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # # # #This program is free software: you can redistribute it and/or modify # #it under the terms of the GNU General Public License as published by # @@ -21,6 +21,7 @@ ######################################################################### from osv import fields, osv +from tools.translate import _ #===== class return_instruction(osv.osv): @@ -38,37 +39,62 @@ class product_supplierinfo(osv.osv): _inherit = "product.supplierinfo" def get_warranty_return_partner(self, cr, uid, context=None): + result = [ + ('company','Company'), + ('supplier','Supplier'), + ('other','Other'),] if self.pool.get('ir.module.module').search(cr, uid, [('name','like','product_brand'),('state','like','installed')]): - return [ - ('company','Company'), - ('supplier','Supplier'), - ('brand','Brand manufacturer'), - ('other','Other'),] - else: - return [ - ('company','Company'), - ('supplier','Supplier'), - ('other','Other'),] + result.append(('brand','Brand manufacturer'),) + return result # Get selected lines to add to exchange def _get_default_instructions(self, cr, uid,context): instruction_ids = self.pool.get('return.instruction').search(cr, uid, [('is_default','=','FALSE')]) if instruction_ids: - return instruction_ids[0] - # TO DO f(supplier) + other... + return instruction_ids[0] + # TO DO f(supplier) + other. return False - + + def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, context=None): + # Method to return the partner delivery address or if none, the default address + # dedicated_delivery_address stand for the case a new type of address more particularly dedicated to return delivery would be implemented. + result ={} + address_obj = self.pool.get('res.partner.address') + for supplier_info in self.browse(cr, uid, ids, context=context): + result[supplier_info.id] = {} + address_id = False + return_partner = supplier_info.warranty_return_partner + if return_partner: + if return_partner == 'supplier': + partner_id = supplier_info.name.id + elif sreturn_partner == 'brand': + if not supplier_info.product_id.product_brand_id.partner_id: + raise osv.except_osv(_('Error !'), _('You need to define a partner for the brand of the product !')) + partner_id = supplier_info.product_id.product_brand_id.partner_id.id + else: + partner_id = supplier_info.company_id.partner_id.id + address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'dedicated_delivery')], context=context) + if not address_id: + address_id = address_obj.search(cr, uid, [('partner_id','=', partner_id), ('type','like','delivery')], context=context) + if not address_id: + address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'default')], context=context) + if not address_id: + raise osv.except_osv(_('Error !'), _('No address define for the %s!') % return_partner) + result[supplier_info.id] = address_id[0] + return result + _columns = { "warranty_duration" : fields.float('Warranty', help="Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field"), "warranty_return_partner" : fields.selection(get_warranty_return_partner, 'Warrantee return', size=128, help="Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty"), 'return_instructions': fields.many2one('return.instruction', 'Instructions',help="Instructions for product return"), 'active_supplier' : fields.boolean('Active supplier', help=""), + 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner.address', string="Warranty return address"), } _defaults = { 'warranty_return_partner': lambda *a: 'company', 'return_instructions': _get_default_instructions, } - -product_supplierinfo() + +product_supplierinfo() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml index 80c15889..6dae3cb9 100644 --- a/product_warranty/product_warranty_view.xml +++ b/product_warranty/product_warranty_view.xml @@ -23,33 +23,33 @@ - - product.return.instructions.tree - return.instruction - tree - - - - - - - - - - - - product.return.instructions.form - return.instruction - form - -
- - - - - - -
+ + product.return.instructions.tree + return.instruction + tree + + + + + + + + + + + + product.return.instructions.form + return.instruction + form + +
+ + + + + + +
Products return instructions @@ -60,42 +60,44 @@ - + parent="product.prod_config_main" sequence="3"/> - - product.supplierinfo.warranty.tree - product.supplierinfo - - tree - - - - - - - - - - - - - product.supplierinfo.warranty.form - product.supplierinfo - - form - - - - - - - - - + + product.supplierinfo.warranty.tree + product.supplierinfo + + tree + + + + + + + + + + + + + + product.supplierinfo.warranty.form + product.supplierinfo + + form + + + + + + + + + +
From 450033ea573e4a162b4a6d4f4b734a8c77b745f1 Mon Sep 17 00:00:00 2001 From: sebastien beau Date: Wed, 12 Sep 2012 18:58:33 +0200 Subject: [PATCH 05/26] [FIX] product_waranty : fix syntax error --- product_warranty/product_warranty.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index 16c5e0bf..7ed9f7eb 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -23,13 +23,13 @@ from osv import fields, osv from tools.translate import _ -#===== -class return_instruction(osv.osv): +#===== +class return_instruction(osv.osv): _name = "return.instruction" _description = "Instructions for product return" _columns = { 'name': fields.char('Title', size=128, required=True), - 'instructions' : fields.text('Instructions', help="Instructions for product return"), + 'instructions' : fields.text('Instructions', help="Instructions for product return"), 'is_default' : fields.boolean('Is default', help="If is default, will be use to set the default value in supplier infos. Be careful to have only one default"), } return_instruction() @@ -64,10 +64,10 @@ class product_supplierinfo(osv.osv): result[supplier_info.id] = {} address_id = False return_partner = supplier_info.warranty_return_partner - if return_partner: + if return_partner: if return_partner == 'supplier': partner_id = supplier_info.name.id - elif sreturn_partner == 'brand': + elif return_partner == 'brand': if not supplier_info.product_id.product_brand_id.partner_id: raise osv.except_osv(_('Error !'), _('You need to define a partner for the brand of the product !')) partner_id = supplier_info.product_id.product_brand_id.partner_id.id @@ -88,7 +88,7 @@ class product_supplierinfo(osv.osv): "warranty_return_partner" : fields.selection(get_warranty_return_partner, 'Warrantee return', size=128, help="Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty"), 'return_instructions': fields.many2one('return.instruction', 'Instructions',help="Instructions for product return"), 'active_supplier' : fields.boolean('Active supplier', help=""), - 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner.address', string="Warranty return address"), + 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner.address', string="Warranty return address"), } _defaults = { 'warranty_return_partner': lambda *a: 'company', From 93befc06cdf0a7204b93a55e4630d381d4a95fd0 Mon Sep 17 00:00:00 2001 From: manu Date: Fri, 14 Sep 2012 15:13:17 +0200 Subject: [PATCH 06/26] [UPDATE] website --- product_warranty/__openerp__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 03f092b0..b844f932 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -31,8 +31,8 @@ Extend the product warranty management with warranty details on product / suppli * supplier warranty duration * return product to company, supplier, brand, other """, - 'author': 'Akretion', - 'website': 'http://www.akretion.com', + 'author': 'esamyn', + 'website': 'http://www.erp-236.com', 'depends': ['product'], 'init_xml': [], 'update_xml': [ From 01e33bff75a3dc8a3014c2cde8181e9e18f692d1 Mon Sep 17 00:00:00 2001 From: Angel Moya Date: Thu, 17 Jan 2013 10:38:20 +0100 Subject: [PATCH 07/26] [ADD] Spanish translation for crm_claim_rma and product_warranty --- product_warranty/i18n/es.po | 99 +++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 product_warranty/i18n/es.po diff --git a/product_warranty/i18n/es.po b/product_warranty/i18n/es.po new file mode 100644 index 00000000..09567c73 --- /dev/null +++ b/product_warranty/i18n/es.po @@ -0,0 +1,99 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: product_warranty.es\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2011-10-20 10:07+0000\n" +"PO-Revision-Date: 2013-01-15 16:31+0100\n" +"Last-Translator: Rafa Soler \n" +"Language-Team: Domatix Technologies\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"Language: es_ES\n" +"X-Generator: Poedit 1.5.4\n" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_duration:0 +msgid "Warranty" +msgstr "Garantía" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "" +"Warranty in month for this product/supplier relation. Only for company/" +"supplier relation (purchase order) ; the customer/company relation (sale " +"order) always use the product main warranty field" +msgstr "" +"Garantía en meses para este producto/proveedor. Únicamente para relaciones " +"empresa/proveedor (Orden de compra); la relación cliente/proveedor (Orden de " +"venta) usa siempre el campo garantía de la ficha de producto." + +#. module: product_warranty +#: model:ir.module.module,description:product_warranty.module_meta_information +msgid "" +"\n" +"Akretion - Emmanuel Samyn\n" +"Extend the product warranty management with warranty details on product / " +"supplier relation\n" +"* supplier warranty duration\n" +"* return product to company, supplier, brand, other\n" +" " +msgstr "" +"\n" +"Akretion - Emmanuel Samyn\n" +"Extiende la gestión de la garantía de los productos incorporando los plazos " +"de garantía a los productos (por proveedor)\n" +"* plazo de garntía dle proveedor\n" +"* devolución del producto a la empresa /proveedor/matriz/otro\n" +" " + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Información sobre un proveedor de producto" + +#. module: product_warranty +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Proveedor activo" + +#. module: product_warranty +#: constraint:product.supplierinfo:0 +msgid "" +"Error: The default UOM and the Supplier Product UOM must be in the same " +"category." +msgstr "" +"Error: El UOM y el UOM del proveedor del producto debe estar en la misma " +"categoría." + +#. module: product_warranty +#: model:ir.module.module,shortdesc:product_warranty.module_meta_information +msgid "Product warranty" +msgstr "Garantía de producto" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Warrantee return" +msgstr "Devolución en garantía" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +#, fuzzy +msgid "" +"Who is in charge of the warranty return treatment toward the end customer. " +"Company will use the current compagny delivery or default address and so on " +"for supplier and brand manufacturer. Doesn't necessarly mean that the " +"warranty to be applied is the one of the return partner (ie: can be returned " +"to the company and be under the brand warranty" +msgstr "" +"Indique quien se encarga de la gestión de postventa frente al cliente final. " +"La empresa utilizará la dirección de envío de la empresa o la dirección " +"predeterminadaL'entreprise utilise l'adresse de livraison, et sinon " +"l'adresse par défaut. Il en va de même pour les options fournisseur ou " +"fabricant. Ce champ n'implique pas forcément que la garantie qui va " +"s'appliquer est celle de celui qui gère le retour." From 7de0239fe92f7b25a280ce790da5fc8a88bc6309 Mon Sep 17 00:00:00 2001 From: davidbeal Date: Mon, 11 Feb 2013 15:26:42 +0100 Subject: [PATCH 08/26] [FIX] fix security rule syntax in crm_claim_rma and product warranty --- product_warranty/security/ir.model.access.csv | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/product_warranty/security/ir.model.access.csv b/product_warranty/security/ir.model.access.csv index a90c8a7a..b8cc8fff 100644 --- a/product_warranty/security/ir.model.access.csv +++ b/product_warranty/security/ir.model.access.csv @@ -1,3 +1,4 @@ -"id","name","model_id","group_id","perm_read","perm_write","perm_create","perm_unlink" -"access_return_instruction_user","return.instruction.user","return.instruction","Sales / User","True","True","True", -"access_return_instruction_manager","return.instruction.manager","return.instruction","Sales / Manager","True","True","True","True" +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_return_instruction_user","return.instruction.user","model_return_instruction","base.group_user","True","False","False","False" +"access_return_instruction_manager","return.instruction.manager","model_return_instruction","base.group_sale_manager","True","True","True","True" +"access_return_instruction_salesman","return.instruction.salesman","model_return_instruction","base.group_sale_salesman","True","True","True","True" From dcfbce6864f9a88c7ce80940c314dbdf695c9368 Mon Sep 17 00:00:00 2001 From: Joao Alfredo Gama Batista Date: Fri, 22 Feb 2013 17:40:51 -0500 Subject: [PATCH 09/26] [IMP] 7.0 initial version --- product_warranty/product_warranty_view.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml index 6dae3cb9..1ab3e23f 100644 --- a/product_warranty/product_warranty_view.xml +++ b/product_warranty/product_warranty_view.xml @@ -26,7 +26,6 @@ product.return.instructions.tree return.instruction - tree @@ -40,7 +39,6 @@ product.return.instructions.form return.instruction - form
@@ -53,7 +51,6 @@ Products return instructions - ir.actions.act_window return.instruction form tree,form @@ -61,7 +58,7 @@ @@ -70,7 +67,6 @@ product.supplierinfo.warranty.tree product.supplierinfo - tree @@ -87,7 +83,6 @@ product.supplierinfo.warranty.form product.supplierinfo - form From e851fe3f4e85c47e68409770af87f4df00ed1039 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 6 Aug 2013 16:33:08 -0400 Subject: [PATCH 10/26] [UPD] Remove references to res.partner.address --- product_warranty/product_warranty.py | 37 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index 7ed9f7eb..e63abdbe 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -20,11 +20,10 @@ #along with this program. If not, see . # ######################################################################### -from osv import fields, osv +from openerp.osv import orm, fields from tools.translate import _ -#===== -class return_instruction(osv.osv): +class return_instruction(orm.Model): _name = "return.instruction" _description = "Instructions for product return" _columns = { @@ -32,10 +31,8 @@ class return_instruction(osv.osv): 'instructions' : fields.text('Instructions', help="Instructions for product return"), 'is_default' : fields.boolean('Is default', help="If is default, will be use to set the default value in supplier infos. Be careful to have only one default"), } -return_instruction() -#===== -class product_supplierinfo(osv.osv): +class product_supplierinfo(orm.Model): _inherit = "product.supplierinfo" def get_warranty_return_partner(self, cr, uid, context=None): @@ -48,18 +45,18 @@ class product_supplierinfo(osv.osv): return result # Get selected lines to add to exchange - def _get_default_instructions(self, cr, uid,context): + def _get_default_instructions(self, cr, uid, context=None): instruction_ids = self.pool.get('return.instruction').search(cr, uid, [('is_default','=','FALSE')]) if instruction_ids: return instruction_ids[0] - # TO DO f(supplier) + other. + # TODO f(supplier) + other. return False def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, context=None): # Method to return the partner delivery address or if none, the default address # dedicated_delivery_address stand for the case a new type of address more particularly dedicated to return delivery would be implemented. result ={} - address_obj = self.pool.get('res.partner.address') + address_obj = self.pool.get('res.partner') for supplier_info in self.browse(cr, uid, ids, context=context): result[supplier_info.id] = {} address_id = False @@ -73,14 +70,17 @@ class product_supplierinfo(osv.osv): partner_id = supplier_info.product_id.product_brand_id.partner_id.id else: partner_id = supplier_info.company_id.partner_id.id - address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'dedicated_delivery')], context=context) - if not address_id: - address_id = address_obj.search(cr, uid, [('partner_id','=', partner_id), ('type','like','delivery')], context=context) - if not address_id: - address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'default')], context=context) - if not address_id: - raise osv.except_osv(_('Error !'), _('No address define for the %s!') % return_partner) - result[supplier_info.id] = address_id[0] +# TODO : Find the partner with a delivery address, child of the partner +# v6.1 code with res.partner.address : +# address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'dedicated_delivery')], context=context) +# if not address_id: +# address_id = address_obj.search(cr, uid, [('partner_id','=', partner_id), ('type','like','delivery')], context=context) +# if not address_id: +# address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'default')], context=context) +# if not address_id: +# raise osv.except_osv(_('Error !'), _('No address define for the %s!') % return_partner) +# #result[supplier_info.id] = address_id[0] + result[supplier_info.id] = partner_id return result _columns = { @@ -88,13 +88,12 @@ class product_supplierinfo(osv.osv): "warranty_return_partner" : fields.selection(get_warranty_return_partner, 'Warrantee return', size=128, help="Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty"), 'return_instructions': fields.many2one('return.instruction', 'Instructions',help="Instructions for product return"), 'active_supplier' : fields.boolean('Active supplier', help=""), - 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner.address', string="Warranty return address"), + 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner', string="Warranty return address"), } _defaults = { 'warranty_return_partner': lambda *a: 'company', 'return_instructions': _get_default_instructions, } -product_supplierinfo() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From e7cc2e33aee296a0b475bb0fad12dd8f9a62ad86 Mon Sep 17 00:00:00 2001 From: Joel Grand-Guillaume Date: Thu, 14 Nov 2013 11:11:07 +0100 Subject: [PATCH 11/26] [IMP] Clean the product waranty module (PEP8) + remove use of brand as it seems to be lost in another module that is not here --- product_warranty/__init__.py | 4 +- product_warranty/__openerp__.py | 24 ++-- product_warranty/i18n/product_warranty.pot | 132 +++++++++++++++++++++ product_warranty/product_warranty.py | 69 ++++++----- product_warranty/product_warranty_view.xml | 24 +++- product_warranty/res_company.py | 38 ++++++ product_warranty/res_company_view.xml | 23 ++++ 7 files changed, 269 insertions(+), 45 deletions(-) create mode 100644 product_warranty/i18n/product_warranty.pot create mode 100644 product_warranty/res_company.py create mode 100644 product_warranty/res_company_view.xml diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py index 85031822..7c715039 100644 --- a/product_warranty/__init__.py +++ b/product_warranty/__init__.py @@ -19,5 +19,5 @@ #You should have received a copy of the GNU General Public License # #along with this program. If not, see . # ######################################################################### - -import product_warranty +from . import product_warranty +from . import res_company \ No newline at end of file diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index b844f932..6ffdaca7 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -26,17 +26,25 @@ 'version': '1.0', 'category': 'Generic Modules/Product', 'description': """ -Akretion - Emmanuel Samyn -Extend the product warranty management with warranty details on product / supplier relation +Product Warranty +================ + +Extend the product warranty management with warranty details on product / supplier relation: + * supplier warranty duration -* return product to company, supplier, brand, other - """, - 'author': 'esamyn', - 'website': 'http://www.erp-236.com', +* Set default return address for company (if different from standard one) +* return product to company, supplier, other + + +Those informations are used in the RMA Claim (Product Return Management) module. + +""", + 'author': 'Akretion', + 'website': 'http://akretion.com', 'depends': ['product'], - 'init_xml': [], - 'update_xml': [ + 'data': [ 'security/ir.model.access.csv', + 'res_company_view.xml', 'product_warranty_view.xml', ], 'demo_xml': [], diff --git a/product_warranty/i18n/product_warranty.pot b/product_warranty/i18n/product_warranty.pot new file mode 100644 index 00000000..7c7fd45b --- /dev/null +++ b/product_warranty/i18n/product_warranty.pot @@ -0,0 +1,132 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2013-11-21 15:06+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "" + +#. module: product_warranty +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Where the customer has to send back the product(s) if warranty return is setto 'other'." +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" +msgstr "" + +#. module: product_warranty +#: view:res.company:0 +msgid "Crm product return address" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "Where the goods should be returned (computed field based on other infos.)" +msgstr "" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" +msgstr "" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "" + +#. module: product_warranty +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "" + diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index e63abdbe..0c2f8b50 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -28,8 +28,11 @@ class return_instruction(orm.Model): _description = "Instructions for product return" _columns = { 'name': fields.char('Title', size=128, required=True), - 'instructions' : fields.text('Instructions', help="Instructions for product return"), - 'is_default' : fields.boolean('Is default', help="If is default, will be use to set the default value in supplier infos. Be careful to have only one default"), + 'instructions' : fields.text('Instructions', + help="Instructions for product return"), + 'is_default' : fields.boolean('Is default', + help="If is default, will be use to set the default value in " + "supplier infos. Be careful to have only one default"), } class product_supplierinfo(orm.Model): @@ -40,13 +43,12 @@ class product_supplierinfo(orm.Model): ('company','Company'), ('supplier','Supplier'), ('other','Other'),] - if self.pool.get('ir.module.module').search(cr, uid, [('name','like','product_brand'),('state','like','installed')]): - result.append(('brand','Brand manufacturer'),) return result # Get selected lines to add to exchange def _get_default_instructions(self, cr, uid, context=None): - instruction_ids = self.pool.get('return.instruction').search(cr, uid, [('is_default','=','FALSE')]) + instruction_ids = self.pool.get('return.instruction').search(cr, uid, + [('is_default','=','FALSE')]) if instruction_ids: return instruction_ids[0] # TODO f(supplier) + other. @@ -54,46 +56,55 @@ class product_supplierinfo(orm.Model): def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, context=None): # Method to return the partner delivery address or if none, the default address - # dedicated_delivery_address stand for the case a new type of address more particularly dedicated to return delivery would be implemented. + # dedicated_delivery_address stand for the case a new type of address more particularly + # dedicated to return delivery would be implemented. result ={} address_obj = self.pool.get('res.partner') for supplier_info in self.browse(cr, uid, ids, context=context): result[supplier_info.id] = {} address_id = False return_partner = supplier_info.warranty_return_partner + partner_id = supplier_info.company_id.partner_id.id if return_partner: if return_partner == 'supplier': partner_id = supplier_info.name.id - elif return_partner == 'brand': - if not supplier_info.product_id.product_brand_id.partner_id: - raise osv.except_osv(_('Error !'), _('You need to define a partner for the brand of the product !')) - partner_id = supplier_info.product_id.product_brand_id.partner_id.id - else: - partner_id = supplier_info.company_id.partner_id.id -# TODO : Find the partner with a delivery address, child of the partner -# v6.1 code with res.partner.address : -# address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'dedicated_delivery')], context=context) -# if not address_id: -# address_id = address_obj.search(cr, uid, [('partner_id','=', partner_id), ('type','like','delivery')], context=context) -# if not address_id: -# address_id = address_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', 'like', 'default')], context=context) -# if not address_id: -# raise osv.except_osv(_('Error !'), _('No address define for the %s!') % return_partner) -# #result[supplier_info.id] = address_id[0] + elif return_partner == 'company': + if supplier_info.company_id.crm_return_address_id: + partner_id = supplier_info.company_id.crm_return_address_id.id + elif return_partner == 'other': + if supplier_info.warranty_return_other_address_id: + partner_id = supplier_info.warranty_return_other_address_id.id result[supplier_info.id] = partner_id return result _columns = { - "warranty_duration" : fields.float('Warranty', help="Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field"), - "warranty_return_partner" : fields.selection(get_warranty_return_partner, 'Warrantee return', size=128, help="Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty"), - 'return_instructions': fields.many2one('return.instruction', 'Instructions',help="Instructions for product return"), - 'active_supplier' : fields.boolean('Active supplier', help=""), - 'warranty_return_address': fields.function(_get_warranty_return_address, type='many2one', relation='res.partner', string="Warranty return address"), + "warranty_duration": fields.float('Period', + help="Warranty in month for this product/supplier relation. Only for " + "company/supplier relation (purchase order) ; the customer/company " + "relation (sale order) always use the product main warranty field"), + "warranty_return_partner": fields.selection(get_warranty_return_partner, + 'Return type', + required=True, + help="Who is in charge of the warranty return treatment toward the end customer. " + "Company will use the current compagny delivery or default address and so on for " + "supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be " + "applied is the one of the return partner (ie: can be returned to the company and " + "be under the brand warranty"), + 'return_instructions': fields.many2one('return.instruction', + 'Instructions', + help="Instructions for product return"), + 'active_supplier': fields.boolean('Active supplier', + help="Is this supplier still active, only for information"), + 'warranty_return_address': fields.function(_get_warranty_return_address, + type='many2one', relation='res.partner', string="Return address", + help="Where the goods should be returned (computed field based on other infos.)"), + "warranty_return_other_address_id" : fields.many2one('res.partner', + 'Return address', + help="Where the customer has to send back the product(s) if warranty return is set" + "to 'other'."), } _defaults = { 'warranty_return_partner': lambda *a: 'company', 'return_instructions': _get_default_instructions, } - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml index 1ab3e23f..bf59e48b 100644 --- a/product_warranty/product_warranty_view.xml +++ b/product_warranty/product_warranty_view.xml @@ -84,12 +84,24 @@ product.supplierinfo - - - - - - + + + + + + + + + + +
+
+
+
+
diff --git a/product_warranty/res_company.py b/product_warranty/res_company.py new file mode 100644 index 00000000..e0d132fd --- /dev/null +++ b/product_warranty/res_company.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright 2013 Camptocamp +# Copyright 2009-2013 Akretion, +# Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, Joel Grand-Guillaume +# +# 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 fields, orm, osv + + +class res_company(orm.Model): + + _inherit = "res.company" + + _columns = { + 'crm_return_address_id': fields.many2one('res.partner', + 'Return address', + help="Default address where the customers has to send back the " + "returned product. If empty, the address is the " + "company address"), + } + + diff --git a/product_warranty/res_company_view.xml b/product_warranty/res_company_view.xml new file mode 100644 index 00000000..492be670 --- /dev/null +++ b/product_warranty/res_company_view.xml @@ -0,0 +1,23 @@ + + + + + + + crm_claim_rma.company_form + res.company + + + + + + + + + + + + + + + From 4acafa0cbfd599bce7f69a7a813c609fb63ddbe2 Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Tue, 3 Dec 2013 11:21:07 +0100 Subject: [PATCH 12/26] [FIX] crm_claim.date is a datetime, error when a product has no supplier, in such case, returns the product to the company's address --- product_warranty/product_warranty.py | 87 ++++++++++++++++------------ product_warranty/res_company.py | 9 ++- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py index 0c2f8b50..2ad7aabb 100644 --- a/product_warranty/product_warranty.py +++ b/product_warranty/product_warranty.py @@ -21,48 +21,54 @@ ######################################################################### from openerp.osv import orm, fields -from tools.translate import _ + class return_instruction(orm.Model): _name = "return.instruction" _description = "Instructions for product return" _columns = { - 'name': fields.char('Title', size=128, required=True), - 'instructions' : fields.text('Instructions', + 'name': fields.char('Title', required=True), + 'instructions': fields.text( + 'Instructions', help="Instructions for product return"), - 'is_default' : fields.boolean('Is default', + 'is_default': fields.boolean( + 'Is default', help="If is default, will be use to set the default value in " "supplier infos. Be careful to have only one default"), - } + } + class product_supplierinfo(orm.Model): _inherit = "product.supplierinfo" def get_warranty_return_partner(self, cr, uid, context=None): - result = [ - ('company','Company'), - ('supplier','Supplier'), - ('other','Other'),] + result = [('company', 'Company'), + ('supplier', 'Supplier'), + ('other', 'Other'), + ] return result - # Get selected lines to add to exchange def _get_default_instructions(self, cr, uid, context=None): - instruction_ids = self.pool.get('return.instruction').search(cr, uid, - [('is_default','=','FALSE')]) + """ Get selected lines to add to exchange """ + instr_obj = self.pool.get('return.instruction') + instruction_ids = instr_obj.search(cr, uid, + [('is_default', '=', 'FALSE')], + context=context) if instruction_ids: return instruction_ids[0] - # TODO f(supplier) + other. return False def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, context=None): - # Method to return the partner delivery address or if none, the default address - # dedicated_delivery_address stand for the case a new type of address more particularly - # dedicated to return delivery would be implemented. - result ={} - address_obj = self.pool.get('res.partner') + """ Method to return the partner delivery address or if none, the default address + + dedicated_delivery_address stand for the case a new type of + address more particularly dedicated to return delivery would be + implemented. + + """ + result = {} for supplier_info in self.browse(cr, uid, ids, context=context): - result[supplier_info.id] = {} - address_id = False + result[supplier_info.id] = False return_partner = supplier_info.warranty_return_partner partner_id = supplier_info.company_id.partner_id.id if return_partner: @@ -78,33 +84,40 @@ class product_supplierinfo(orm.Model): return result _columns = { - "warranty_duration": fields.float('Period', + "warranty_duration": fields.float( + 'Period', help="Warranty in month for this product/supplier relation. Only for " "company/supplier relation (purchase order) ; the customer/company " "relation (sale order) always use the product main warranty field"), - "warranty_return_partner": fields.selection(get_warranty_return_partner, + "warranty_return_partner": fields.selection( + get_warranty_return_partner, 'Return type', required=True, help="Who is in charge of the warranty return treatment toward the end customer. " - "Company will use the current compagny delivery or default address and so on for " - "supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be " - "applied is the one of the return partner (ie: can be returned to the company and " - "be under the brand warranty"), - 'return_instructions': fields.many2one('return.instruction', + "Company will use the current compagny delivery or default address and so on for " + "supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be " + "applied is the one of the return partner (ie: can be returned to the company and " + "be under the brand warranty"), + 'return_instructions': fields.many2one( + 'return.instruction', 'Instructions', help="Instructions for product return"), - 'active_supplier': fields.boolean('Active supplier', + 'active_supplier': fields.boolean( + 'Active supplier', help="Is this supplier still active, only for information"), - 'warranty_return_address': fields.function(_get_warranty_return_address, + 'warranty_return_address': fields.function( + _get_warranty_return_address, type='many2one', relation='res.partner', string="Return address", - help="Where the goods should be returned (computed field based on other infos.)"), - "warranty_return_other_address_id" : fields.many2one('res.partner', + help="Where the goods should be returned " + "(computed field based on other infos.)"), + "warranty_return_other_address_id": fields.many2one( + 'res.partner', 'Return address', - help="Where the customer has to send back the product(s) if warranty return is set" - "to 'other'."), - } - _defaults = { - 'warranty_return_partner': lambda *a: 'company', - 'return_instructions': _get_default_instructions, + help="Where the customer has to send back the product(s) " + "if warranty return is set to 'other'."), } + _defaults = { + 'warranty_return_partner': 'company', + 'return_instructions': _get_default_instructions, + } diff --git a/product_warranty/res_company.py b/product_warranty/res_company.py index e0d132fd..30618813 100644 --- a/product_warranty/res_company.py +++ b/product_warranty/res_company.py @@ -20,19 +20,18 @@ # ############################################################################## -from openerp.osv import fields, orm, osv +from openerp.osv import fields, orm class res_company(orm.Model): - + _inherit = "res.company" _columns = { - 'crm_return_address_id': fields.many2one('res.partner', + 'crm_return_address_id': fields.many2one( + 'res.partner', 'Return address', help="Default address where the customers has to send back the " "returned product. If empty, the address is the " "company address"), } - - From d0a10ac04f075b53462626af8fe4d0171a75e17e Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerprma Date: Thu, 23 Jan 2014 05:58:36 +0000 Subject: [PATCH 13/26] Launchpad automatic translations update. --- product_warranty/i18n/es.po | 206 +++++++++++++++++++++++------------- product_warranty/i18n/fr.po | 165 ++++++++++++++++++++++------- 2 files changed, 258 insertions(+), 113 deletions(-) diff --git a/product_warranty/i18n/es.po b/product_warranty/i18n/es.po index 09567c73..e2d613ac 100644 --- a/product_warranty/i18n/es.po +++ b/product_warranty/i18n/es.po @@ -6,84 +6,33 @@ msgid "" msgstr "" "Project-Id-Version: product_warranty.es\n" "Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-10-20 10:07+0000\n" -"PO-Revision-Date: 2013-01-15 16:31+0100\n" -"Last-Translator: Rafa Soler \n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2014-01-22 19:43+0000\n" +"Last-Translator: Pedro Manuel Baeza \n" "Language-Team: Domatix Technologies\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-SourceCharset: utf-8\n" +"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" +"X-Generator: Launchpad (build 17017)\n" "Language: es_ES\n" -"X-Generator: Poedit 1.5.4\n" +"X-Poedit-SourceCharset: utf-8\n" #. module: product_warranty -#: field:product.supplierinfo,warranty_duration:0 -msgid "Warranty" -msgstr "Garantía" +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "Dirección de devolución" #. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "" -"Warranty in month for this product/supplier relation. Only for company/" -"supplier relation (purchase order) ; the customer/company relation (sale " -"order) always use the product main warranty field" -msgstr "" -"Garantía en meses para este producto/proveedor. Únicamente para relaciones " -"empresa/proveedor (Orden de compra); la relación cliente/proveedor (Orden de " -"venta) usa siempre el campo garantía de la ficha de producto." - -#. module: product_warranty -#: model:ir.module.module,description:product_warranty.module_meta_information -msgid "" -"\n" -"Akretion - Emmanuel Samyn\n" -"Extend the product warranty management with warranty details on product / " -"supplier relation\n" -"* supplier warranty duration\n" -"* return product to company, supplier, brand, other\n" -" " -msgstr "" -"\n" -"Akretion - Emmanuel Samyn\n" -"Extiende la gestión de la garantía de los productos incorporando los plazos " -"de garantía a los productos (por proveedor)\n" -"* plazo de garntía dle proveedor\n" -"* devolución del producto a la empresa /proveedor/matriz/otro\n" -" " - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "Información sobre un proveedor de producto" - -#. module: product_warranty -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "Proveedor activo" - -#. module: product_warranty -#: constraint:product.supplierinfo:0 -msgid "" -"Error: The default UOM and the Supplier Product UOM must be in the same " -"category." -msgstr "" -"Error: El UOM y el UOM del proveedor del producto debe estar en la misma " -"categoría." - -#. module: product_warranty -#: model:ir.module.module,shortdesc:product_warranty.module_meta_information -msgid "Product warranty" -msgstr "Garantía de producto" - -#. module: product_warranty -#: field:product.supplierinfo,warranty_return_partner:0 -msgid "Warrantee return" -msgstr "Devolución en garantía" +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "Información de garantía" #. module: product_warranty #: help:product.supplierinfo,warranty_return_partner:0 -#, fuzzy msgid "" "Who is in charge of the warranty return treatment toward the end customer. " "Company will use the current compagny delivery or default address and so on " @@ -91,9 +40,122 @@ msgid "" "warranty to be applied is the one of the return partner (ie: can be returned " "to the company and be under the brand warranty" msgstr "" -"Indique quien se encarga de la gestión de postventa frente al cliente final. " -"La empresa utilizará la dirección de envío de la empresa o la dirección " -"predeterminadaL'entreprise utilise l'adresse de livraison, et sinon " -"l'adresse par défaut. Il en va de même pour les options fournisseur ou " -"fabricant. Ce champ n'implique pas forcément que la garantie qui va " -"s'appliquer est celle de celui qui gère le retour." +"Especifica quién es el responsable del tratamiento de la devolución de " +"garantía para el cliente final. La compañía utilizará la dirección por " +"defecto o la dirección de envío de la compañía, y así sucesivamente por " +"proveedor y marca del fabricante. No significa necesariamente que la " +"garantía que se aplica es el de la empresa que hace la devolución (es decir: " +"se puede devolver a la empresa y estar bajo la garantía de la marca)" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "" +"Where the customer has to send back the product(s) if warranty return is " +"setto 'other'." +msgstr "" +"Dónde debe enviar el cliente de vuelta el/los producto/s si la garantía de " +"devolución se establece a 'otra'." + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "" +"Warranty in month for this product/supplier relation. Only for " +"company/supplier relation (purchase order) ; the customer/company relation " +"(sale order) always use the product main warranty field" +msgstr "" +"Garantía en meses para este producto/proveedor. Únicamente para relaciones " +"empresa/proveedor (Orden de compra); la relación cliente/proveedor (Orden de " +"venta) usa siempre el campo garantía de la ficha de producto." + +#. module: product_warranty +#: view:res.company:0 +msgid "Crm product return address" +msgstr "Dirección de devolución del producto" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "Instrucciones para la devolución del producto" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "Periodo" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "Título" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Proveedor activo" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "Por defecto" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "" +"Where the goods should be returned (computed field based on other infos.)" +msgstr "" +"Dónde se devolverán los bienes (campo calculado basado en otra información)." + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "" +"If is default, will be use to set the default value in supplier infos. Be " +"careful to have only one default" +msgstr "" +"Si es por defecto, se usará para establecer el valor por defecto en la " +"información del proveedor. Tenga cuidado de tener sólo un por defecto." + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "Instrucciones de devolución de los productos" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Información sobre un proveedor de producto" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "Indica si el proveedor todavía está activo. Sólo para información." + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "Tipo de devolución" + +#. module: product_warranty +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "Instrucciones de devolución" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "Instrucciones" diff --git a/product_warranty/i18n/fr.po b/product_warranty/i18n/fr.po index 0fa3b071..7de5da02 100644 --- a/product_warranty/i18n/fr.po +++ b/product_warranty/i18n/fr.po @@ -6,39 +6,123 @@ msgid "" msgstr "" "Project-Id-Version: OpenERP Server 6.0.2\n" "Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2011-10-20 10:07+0000\n" -"PO-Revision-Date: 2011-10-20 10:07+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2014-01-22 19:17+0000\n" +"Last-Translator: Joël Grand-Guillaume @ camptocamp " +"\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" +"X-Generator: Launchpad (build 17017)\n" #. module: product_warranty -#: field:product.supplierinfo,warranty_duration:0 -msgid "Warranty" -msgstr "Garantie" +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "" + +#. module: product_warranty +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "" +"Who is in charge of the warranty return treatment toward the end customer. " +"Company will use the current compagny delivery or default address and so on " +"for supplier and brand manufacturer. Doesn't necessarly mean that the " +"warranty to be applied is the one of the return partner (ie: can be returned " +"to the company and be under the brand warranty" +msgstr "" +"Indique qui est en charge du traitement du retour garantie envers le client " +"final. L'entreprise utilise l'adresse de livraison, et sinon l'adresse par " +"défaut. Il en va de même pour les options fournisseur ou fabricant. Ce champ " +"n'implique pas forcément que la garantie qui va s'appliquer est celle de " +"celui qui gère le retour." + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "" +"Where the customer has to send back the product(s) if warranty return is " +"setto 'other'." +msgstr "" #. module: product_warranty #: help:product.supplierinfo,warranty_duration:0 -msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" -msgstr "Garantie en nombre de mois pour ce fournisseur. Uniquement pour la relation entreprise/fournisseur (commandes d'achat) ; La relation entreprise/client (commandes de vente) utilise toujours le champ de garantie de la fiche produit" +msgid "" +"Warranty in month for this product/supplier relation. Only for " +"company/supplier relation (purchase order) ; the customer/company relation " +"(sale order) always use the product main warranty field" +msgstr "" +"Garantie en nombre de mois pour ce fournisseur. Uniquement pour la relation " +"entreprise/fournisseur (commandes d'achat) ; La relation entreprise/client " +"(commandes de vente) utilise toujours le champ de garantie de la fiche " +"produit" #. module: product_warranty -#: model:ir.module.module,description:product_warranty.module_meta_information -msgid "\n" -"Akretion - Emmanuel Samyn\n" -"Extend the product warranty management with warranty details on product / supplier relation\n" -"* supplier warranty duration\n" -"* return product to company, supplier, brand, other\n" -" " -msgstr "\n" -"Akretion - Emmanuel Samyn\n" -"Extend the product warranty management with warranty details on product / supplier relation\n" -"* supplier warranty duration\n" -"* return product to company, supplier, brand, other\n" -" " +#: view:res.company:0 +msgid "Crm product return address" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Fournisseur actif" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "" +"Where the goods should be returned (computed field based on other infos.)" +msgstr "" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "" +"If is default, will be use to set the default value in supplier infos. Be " +"careful to have only one default" +msgstr "" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "" #. module: product_warranty #: model:ir.model,name:product_warranty.model_product_supplierinfo @@ -46,27 +130,26 @@ msgid "Information about a product supplier" msgstr "Information sur le fournisseur du produit" #. module: product_warranty -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "Fournisseur actif" - -#. module: product_warranty -#: constraint:product.supplierinfo:0 -msgid "Error: The default UOM and the Supplier Product UOM must be in the same category." -msgstr "Erreur : l'UdM par défaut et l'UdM du fournisseur doivent appartenir à la même catégorie." - -#. module: product_warranty -#: model:ir.module.module,shortdesc:product_warranty.module_meta_information -msgid "Product warranty" -msgstr "Garantie du produit" +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "" #. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner #: field:product.supplierinfo,warranty_return_partner:0 -msgid "Warrantee return" -msgstr "Retour garantie" +msgid "Return type" +msgstr "" #. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" -msgstr "Indique qui est en charge du traitement du retour garantie envers le client final. L'entreprise utilise l'adresse de livraison, et sinon l'adresse par défaut. Il en va de même pour les options fournisseur ou fabricant. Ce champ n'implique pas forcément que la garantie qui va s'appliquer est celle de celui qui gère le retour." +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "" +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "" From bf6223d3d0afb8bd1e3b5f49e323dcb1eeb2e105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Grand-Guillaume?= Date: Wed, 16 Jul 2014 14:46:22 +0200 Subject: [PATCH 14/26] Clean a bit of PEP8 things --- product_warranty/__openerp__.py | 2 +- product_warranty/res_company.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 6ffdaca7..f63f0296 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -51,7 +51,7 @@ Those informations are used in the RMA Claim (Product Return Management) module. 'test': [], 'installable': True, 'active': False, - 'certificate' : '', + 'certificate': '', 'images': ['images/product_warranty.png'], } diff --git a/product_warranty/res_company.py b/product_warranty/res_company.py index 30618813..a3625170 100644 --- a/product_warranty/res_company.py +++ b/product_warranty/res_company.py @@ -2,7 +2,7 @@ ############################################################################## # # Copyright 2013 Camptocamp -# Copyright 2009-2013 Akretion, +# Copyright 2009-2013 Akretion, # Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, Joel Grand-Guillaume # # This program is free software: you can redistribute it and/or modify From 45c3addeac08c45077743e21f0479534cd0deba9 Mon Sep 17 00:00:00 2001 From: StefanRijnhart Date: Mon, 2 Feb 2015 12:03:38 +0100 Subject: [PATCH 15/26] [PRT] Move modules to __unported__ for 8.0 branch creation --- product_warranty/__init__.py | 23 --- product_warranty/__openerp__.py | 58 ------- product_warranty/i18n/es.po | 161 ------------------ product_warranty/i18n/fr.po | 155 ----------------- product_warranty/i18n/product_warranty.pot | 132 -------------- product_warranty/images/product_warranty.png | Bin 85387 -> 0 bytes product_warranty/product_warranty.py | 123 ------------- product_warranty/product_warranty_view.xml | 110 ------------ product_warranty/res_company.py | 37 ---- product_warranty/res_company_view.xml | 23 --- product_warranty/security/ir.model.access.csv | 4 - 11 files changed, 826 deletions(-) delete mode 100644 product_warranty/__init__.py delete mode 100644 product_warranty/__openerp__.py delete mode 100644 product_warranty/i18n/es.po delete mode 100644 product_warranty/i18n/fr.po delete mode 100644 product_warranty/i18n/product_warranty.pot delete mode 100644 product_warranty/images/product_warranty.png delete mode 100644 product_warranty/product_warranty.py delete mode 100644 product_warranty/product_warranty_view.xml delete mode 100644 product_warranty/res_company.py delete mode 100644 product_warranty/res_company_view.xml delete mode 100644 product_warranty/security/ir.model.access.csv diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py deleted file mode 100644 index 7c715039..00000000 --- a/product_warranty/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -######################################################################### -# # -# # -######################################################################### -# # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # -# # -#This program is free software: you can redistribute it and/or modify # -#it under the terms of the GNU 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 General Public License for more details. # -# # -#You should have received a copy of the GNU General Public License # -#along with this program. If not, see . # -######################################################################### -from . import product_warranty -from . import res_company \ No newline at end of file diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py deleted file mode 100644 index f63f0296..00000000 --- a/product_warranty/__openerp__.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -######################################################################### -# # -# # -######################################################################### -# # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # -# # -#This program is free software: you can redistribute it and/or modify # -#it under the terms of the GNU 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 General Public License for more details. # -# # -#You should have received a copy of the GNU General Public License # -#along with this program. If not, see . # -######################################################################### - - -{ - 'name': 'Product warranty', - 'version': '1.0', - 'category': 'Generic Modules/Product', - 'description': """ -Product Warranty -================ - -Extend the product warranty management with warranty details on product / supplier relation: - -* supplier warranty duration -* Set default return address for company (if different from standard one) -* return product to company, supplier, other - - -Those informations are used in the RMA Claim (Product Return Management) module. - -""", - 'author': 'Akretion', - 'website': 'http://akretion.com', - 'depends': ['product'], - 'data': [ - 'security/ir.model.access.csv', - 'res_company_view.xml', - 'product_warranty_view.xml', - ], - 'demo_xml': [], - 'test': [], - 'installable': True, - 'active': False, - 'certificate': '', - 'images': ['images/product_warranty.png'], -} - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_warranty/i18n/es.po b/product_warranty/i18n/es.po deleted file mode 100644 index e2d613ac..00000000 --- a/product_warranty/i18n/es.po +++ /dev/null @@ -1,161 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * product_warranty -# -msgid "" -msgstr "" -"Project-Id-Version: product_warranty.es\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2013-11-21 15:06+0000\n" -"PO-Revision-Date: 2014-01-22 19:43+0000\n" -"Last-Translator: Pedro Manuel Baeza \n" -"Language-Team: Domatix Technologies\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" -"X-Generator: Launchpad (build 17017)\n" -"Language: es_ES\n" -"X-Poedit-SourceCharset: utf-8\n" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id -#: field:product.supplierinfo,warranty_return_address:0 -#: field:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Return address" -msgstr "Dirección de devolución" - -#. module: product_warranty -#: view:product.supplierinfo:0 -msgid "Warranty informations" -msgstr "Información de garantía" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "" -"Who is in charge of the warranty return treatment toward the end customer. " -"Company will use the current compagny delivery or default address and so on " -"for supplier and brand manufacturer. Doesn't necessarly mean that the " -"warranty to be applied is the one of the return partner (ie: can be returned " -"to the company and be under the brand warranty" -msgstr "" -"Especifica quién es el responsable del tratamiento de la devolución de " -"garantía para el cliente final. La compañía utilizará la dirección por " -"defecto o la dirección de envío de la compañía, y así sucesivamente por " -"proveedor y marca del fabricante. No significa necesariamente que la " -"garantía que se aplica es el de la empresa que hace la devolución (es decir: " -"se puede devolver a la empresa y estar bajo la garantía de la marca)" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_other_address_id:0 -msgid "" -"Where the customer has to send back the product(s) if warranty return is " -"setto 'other'." -msgstr "" -"Dónde debe enviar el cliente de vuelta el/los producto/s si la garantía de " -"devolución se establece a 'otra'." - -#. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "" -"Warranty in month for this product/supplier relation. Only for " -"company/supplier relation (purchase order) ; the customer/company relation " -"(sale order) always use the product main warranty field" -msgstr "" -"Garantía en meses para este producto/proveedor. Únicamente para relaciones " -"empresa/proveedor (Orden de compra); la relación cliente/proveedor (Orden de " -"venta) usa siempre el campo garantía de la ficha de producto." - -#. module: product_warranty -#: view:res.company:0 -msgid "Crm product return address" -msgstr "Dirección de devolución del producto" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_return_instruction -#: help:product.supplierinfo,return_instructions:0 -#: help:return.instruction,instructions:0 -msgid "Instructions for product return" -msgstr "Instrucciones para la devolución del producto" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration -#: field:product.supplierinfo,warranty_duration:0 -msgid "Period" -msgstr "Periodo" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name -#: field:return.instruction,name:0 -msgid "Title" -msgstr "Título" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_res_company -msgid "Companies" -msgstr "Compañías" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "Proveedor activo" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default -#: field:return.instruction,is_default:0 -msgid "Is default" -msgstr "Por defecto" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_address:0 -msgid "" -"Where the goods should be returned (computed field based on other infos.)" -msgstr "" -"Dónde se devolverán los bienes (campo calculado basado en otra información)." - -#. module: product_warranty -#: help:return.instruction,is_default:0 -msgid "" -"If is default, will be use to set the default value in supplier infos. Be " -"careful to have only one default" -msgstr "" -"Si es por defecto, se usará para establecer el valor por defecto en la " -"información del proveedor. Tenga cuidado de tener sólo un por defecto." - -#. module: product_warranty -#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action -#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action -msgid "Products return instructions" -msgstr "Instrucciones de devolución de los productos" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "Información sobre un proveedor de producto" - -#. module: product_warranty -#: help:product.supplierinfo,active_supplier:0 -msgid "Is this supplier still active, only for information" -msgstr "Indica si el proveedor todavía está activo. Sólo para información." - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner -#: field:product.supplierinfo,warranty_return_partner:0 -msgid "Return type" -msgstr "Tipo de devolución" - -#. module: product_warranty -#: view:return.instruction:0 -msgid "Return instructions" -msgstr "Instrucciones de devolución" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions -#: field:product.supplierinfo,return_instructions:0 -#: view:return.instruction:0 -#: field:return.instruction,instructions:0 -msgid "Instructions" -msgstr "Instrucciones" diff --git a/product_warranty/i18n/fr.po b/product_warranty/i18n/fr.po deleted file mode 100644 index 7de5da02..00000000 --- a/product_warranty/i18n/fr.po +++ /dev/null @@ -1,155 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * product_warranty -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0.2\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2013-11-21 15:06+0000\n" -"PO-Revision-Date: 2014-01-22 19:17+0000\n" -"Last-Translator: Joël Grand-Guillaume @ camptocamp " -"\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" -"X-Generator: Launchpad (build 17017)\n" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id -#: field:product.supplierinfo,warranty_return_address:0 -#: field:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Return address" -msgstr "" - -#. module: product_warranty -#: view:product.supplierinfo:0 -msgid "Warranty informations" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "" -"Who is in charge of the warranty return treatment toward the end customer. " -"Company will use the current compagny delivery or default address and so on " -"for supplier and brand manufacturer. Doesn't necessarly mean that the " -"warranty to be applied is the one of the return partner (ie: can be returned " -"to the company and be under the brand warranty" -msgstr "" -"Indique qui est en charge du traitement du retour garantie envers le client " -"final. L'entreprise utilise l'adresse de livraison, et sinon l'adresse par " -"défaut. Il en va de même pour les options fournisseur ou fabricant. Ce champ " -"n'implique pas forcément que la garantie qui va s'appliquer est celle de " -"celui qui gère le retour." - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_other_address_id:0 -msgid "" -"Where the customer has to send back the product(s) if warranty return is " -"setto 'other'." -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "" -"Warranty in month for this product/supplier relation. Only for " -"company/supplier relation (purchase order) ; the customer/company relation " -"(sale order) always use the product main warranty field" -msgstr "" -"Garantie en nombre de mois pour ce fournisseur. Uniquement pour la relation " -"entreprise/fournisseur (commandes d'achat) ; La relation entreprise/client " -"(commandes de vente) utilise toujours le champ de garantie de la fiche " -"produit" - -#. module: product_warranty -#: view:res.company:0 -msgid "Crm product return address" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_return_instruction -#: help:product.supplierinfo,return_instructions:0 -#: help:return.instruction,instructions:0 -msgid "Instructions for product return" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration -#: field:product.supplierinfo,warranty_duration:0 -msgid "Period" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name -#: field:return.instruction,name:0 -msgid "Title" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_res_company -msgid "Companies" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "Fournisseur actif" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default -#: field:return.instruction,is_default:0 -msgid "Is default" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_address:0 -msgid "" -"Where the goods should be returned (computed field based on other infos.)" -msgstr "" - -#. module: product_warranty -#: help:return.instruction,is_default:0 -msgid "" -"If is default, will be use to set the default value in supplier infos. Be " -"careful to have only one default" -msgstr "" - -#. module: product_warranty -#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action -#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action -msgid "Products return instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "Information sur le fournisseur du produit" - -#. module: product_warranty -#: help:product.supplierinfo,active_supplier:0 -msgid "Is this supplier still active, only for information" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner -#: field:product.supplierinfo,warranty_return_partner:0 -msgid "Return type" -msgstr "" - -#. module: product_warranty -#: view:return.instruction:0 -msgid "Return instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions -#: field:product.supplierinfo,return_instructions:0 -#: view:return.instruction:0 -#: field:return.instruction,instructions:0 -msgid "Instructions" -msgstr "" diff --git a/product_warranty/i18n/product_warranty.pot b/product_warranty/i18n/product_warranty.pot deleted file mode 100644 index 7c7fd45b..00000000 --- a/product_warranty/i18n/product_warranty.pot +++ /dev/null @@ -1,132 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * product_warranty -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-21 15:06+0000\n" -"PO-Revision-Date: 2013-11-21 15:06+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id -#: field:product.supplierinfo,warranty_return_address:0 -#: field:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Return address" -msgstr "" - -#. module: product_warranty -#: view:product.supplierinfo:0 -msgid "Warranty informations" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Where the customer has to send back the product(s) if warranty return is setto 'other'." -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" -msgstr "" - -#. module: product_warranty -#: view:res.company:0 -msgid "Crm product return address" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_return_instruction -#: help:product.supplierinfo,return_instructions:0 -#: help:return.instruction,instructions:0 -msgid "Instructions for product return" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration -#: field:product.supplierinfo,warranty_duration:0 -msgid "Period" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name -#: field:return.instruction,name:0 -msgid "Title" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_res_company -msgid "Companies" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default -#: field:return.instruction,is_default:0 -msgid "Is default" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_address:0 -msgid "Where the goods should be returned (computed field based on other infos.)" -msgstr "" - -#. module: product_warranty -#: help:return.instruction,is_default:0 -msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" -msgstr "" - -#. module: product_warranty -#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action -#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action -msgid "Products return instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,active_supplier:0 -msgid "Is this supplier still active, only for information" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner -#: field:product.supplierinfo,warranty_return_partner:0 -msgid "Return type" -msgstr "" - -#. module: product_warranty -#: view:return.instruction:0 -msgid "Return instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions -#: field:product.supplierinfo,return_instructions:0 -#: view:return.instruction:0 -#: field:return.instruction,instructions:0 -msgid "Instructions" -msgstr "" - diff --git a/product_warranty/images/product_warranty.png b/product_warranty/images/product_warranty.png deleted file mode 100644 index c2eb36e6080badb69696ff6003d06c72a568c1c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85387 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. # -######################################################################### - -from openerp.osv import orm, fields - - -class return_instruction(orm.Model): - _name = "return.instruction" - _description = "Instructions for product return" - _columns = { - 'name': fields.char('Title', required=True), - 'instructions': fields.text( - 'Instructions', - help="Instructions for product return"), - 'is_default': fields.boolean( - 'Is default', - help="If is default, will be use to set the default value in " - "supplier infos. Be careful to have only one default"), - } - - -class product_supplierinfo(orm.Model): - _inherit = "product.supplierinfo" - - def get_warranty_return_partner(self, cr, uid, context=None): - result = [('company', 'Company'), - ('supplier', 'Supplier'), - ('other', 'Other'), - ] - return result - - def _get_default_instructions(self, cr, uid, context=None): - """ Get selected lines to add to exchange """ - instr_obj = self.pool.get('return.instruction') - instruction_ids = instr_obj.search(cr, uid, - [('is_default', '=', 'FALSE')], - context=context) - if instruction_ids: - return instruction_ids[0] - return False - - def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, context=None): - """ Method to return the partner delivery address or if none, the default address - - dedicated_delivery_address stand for the case a new type of - address more particularly dedicated to return delivery would be - implemented. - - """ - result = {} - for supplier_info in self.browse(cr, uid, ids, context=context): - result[supplier_info.id] = False - return_partner = supplier_info.warranty_return_partner - partner_id = supplier_info.company_id.partner_id.id - if return_partner: - if return_partner == 'supplier': - partner_id = supplier_info.name.id - elif return_partner == 'company': - if supplier_info.company_id.crm_return_address_id: - partner_id = supplier_info.company_id.crm_return_address_id.id - elif return_partner == 'other': - if supplier_info.warranty_return_other_address_id: - partner_id = supplier_info.warranty_return_other_address_id.id - result[supplier_info.id] = partner_id - return result - - _columns = { - "warranty_duration": fields.float( - 'Period', - help="Warranty in month for this product/supplier relation. Only for " - "company/supplier relation (purchase order) ; the customer/company " - "relation (sale order) always use the product main warranty field"), - "warranty_return_partner": fields.selection( - get_warranty_return_partner, - 'Return type', - required=True, - help="Who is in charge of the warranty return treatment toward the end customer. " - "Company will use the current compagny delivery or default address and so on for " - "supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be " - "applied is the one of the return partner (ie: can be returned to the company and " - "be under the brand warranty"), - 'return_instructions': fields.many2one( - 'return.instruction', - 'Instructions', - help="Instructions for product return"), - 'active_supplier': fields.boolean( - 'Active supplier', - help="Is this supplier still active, only for information"), - 'warranty_return_address': fields.function( - _get_warranty_return_address, - type='many2one', relation='res.partner', string="Return address", - help="Where the goods should be returned " - "(computed field based on other infos.)"), - "warranty_return_other_address_id": fields.many2one( - 'res.partner', - 'Return address', - help="Where the customer has to send back the product(s) " - "if warranty return is set to 'other'."), - } - - _defaults = { - 'warranty_return_partner': 'company', - 'return_instructions': _get_default_instructions, - } diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml deleted file mode 100644 index bf59e48b..00000000 --- a/product_warranty/product_warranty_view.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - product.return.instructions.tree - return.instruction - - - - - - - - - - - - product.return.instructions.form - return.instruction - - - - - - - - - - - - Products return instructions - return.instruction - form - tree,form - - - - - - - - product.supplierinfo.warranty.tree - product.supplierinfo - - - - - - - - - - - - - - - product.supplierinfo.warranty.form - product.supplierinfo - - - - - - - - - - - - -
-
-
-
-
-
-
-
- -
-
diff --git a/product_warranty/res_company.py b/product_warranty/res_company.py deleted file mode 100644 index a3625170..00000000 --- a/product_warranty/res_company.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright 2013 Camptocamp -# Copyright 2009-2013 Akretion, -# Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, Joel Grand-Guillaume -# -# 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 fields, orm - - -class res_company(orm.Model): - - _inherit = "res.company" - - _columns = { - 'crm_return_address_id': fields.many2one( - 'res.partner', - 'Return address', - help="Default address where the customers has to send back the " - "returned product. If empty, the address is the " - "company address"), - } diff --git a/product_warranty/res_company_view.xml b/product_warranty/res_company_view.xml deleted file mode 100644 index 492be670..00000000 --- a/product_warranty/res_company_view.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - crm_claim_rma.company_form - res.company - - - - - - - - - - - - - - - diff --git a/product_warranty/security/ir.model.access.csv b/product_warranty/security/ir.model.access.csv deleted file mode 100644 index b8cc8fff..00000000 --- a/product_warranty/security/ir.model.access.csv +++ /dev/null @@ -1,4 +0,0 @@ -"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_return_instruction_user","return.instruction.user","model_return_instruction","base.group_user","True","False","False","False" -"access_return_instruction_manager","return.instruction.manager","model_return_instruction","base.group_sale_manager","True","True","True","True" -"access_return_instruction_salesman","return.instruction.salesman","model_return_instruction","base.group_sale_salesman","True","True","True","True" From 69a2a4b95b8111b9b2df2154ec21094e639e0fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 23 Apr 2015 16:31:49 +0100 Subject: [PATCH 16/26] [IMP] Port product_warranty --- product_warranty/README.rst | 48 ++++++ product_warranty/__init__.py | 21 +++ product_warranty/__openerp__.py | 38 +++++ product_warranty/i18n/es.po | 161 ++++++++++++++++++ product_warranty/i18n/fr.po | 155 +++++++++++++++++ product_warranty/i18n/product_warranty.pot | 131 ++++++++++++++ product_warranty/images/product_warranty.png | Bin 0 -> 85387 bytes product_warranty/product_warranty.py | 128 ++++++++++++++ product_warranty/product_warranty_view.xml | 113 ++++++++++++ product_warranty/res_company.py | 38 +++++ product_warranty/res_company_view.xml | 23 +++ product_warranty/security/ir.model.access.csv | 4 + 12 files changed, 860 insertions(+) create mode 100644 product_warranty/README.rst create mode 100644 product_warranty/__init__.py create mode 100644 product_warranty/__openerp__.py create mode 100644 product_warranty/i18n/es.po create mode 100644 product_warranty/i18n/fr.po create mode 100644 product_warranty/i18n/product_warranty.pot create mode 100644 product_warranty/images/product_warranty.png create mode 100644 product_warranty/product_warranty.py create mode 100644 product_warranty/product_warranty_view.xml create mode 100644 product_warranty/res_company.py create mode 100644 product_warranty/res_company_view.xml create mode 100644 product_warranty/security/ir.model.access.csv diff --git a/product_warranty/README.rst b/product_warranty/README.rst new file mode 100644 index 00000000..70f169fe --- /dev/null +++ b/product_warranty/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +Product Warranty +================ + +Extends the product warranty management with warranty details on product / +supplier relation: + +* supplier warranty duration +* Set default return address for company (if different from standard one) +* Whether to return product to company, supplier, other + +Usage +===== + +The new information is not explicitly used by the system until you install +another module that makes use of it, e.g. RMA Claim (Product Return +Management). + +Credits +======= + +Contributors +------------ + +* Emmanuel Samyn +* Paulius Sladkevičius +* Benoît Guillot +* David Beal +* Maxime Chambreuil +* Joël Grand-Guillaume +* Ondřej Kuzník + +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 http://odoo-community.org. diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py new file mode 100644 index 00000000..4e914a85 --- /dev/null +++ b/product_warranty/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn +# +# 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_warranty +from . import res_company diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py new file mode 100644 index 00000000..f0d15262 --- /dev/null +++ b/product_warranty/__openerp__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn +# +# 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 . +# +############################################################################## + +{ + 'name': 'Product warranty', + 'version': '1.0', + 'category': 'Generic Modules/Product', + 'author': "Akretion,Odoo Community Association (OCA)", + 'website': 'http://akretion.com', + 'license': 'AGPL-3', + 'depends': ['product'], + 'data': [ + 'security/ir.model.access.csv', + 'res_company_view.xml', + 'product_warranty_view.xml', + ], + 'demo_xml': [], + 'test': [], + 'installable': True, + 'images': ['images/product_warranty.png'], +} diff --git a/product_warranty/i18n/es.po b/product_warranty/i18n/es.po new file mode 100644 index 00000000..93d58607 --- /dev/null +++ b/product_warranty/i18n/es.po @@ -0,0 +1,161 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: product_warranty.es\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2014-01-22 19:43+0000\n" +"Last-Translator: Pedro Manuel Baeza \n" +"Language-Team: Domatix Technologies\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" +"X-Generator: Launchpad (build 17017)\n" +"Language: es_ES\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "Dirección de devolución" + +#. module: product_warranty +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "Información de garantía" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "" +"Who is in charge of the warranty return treatment toward the end customer. " +"Company will use the current company delivery or default address and so on " +"for supplier and brand manufacturer. Doesn't necessarily mean that the " +"warranty to be applied is the one of the return partner (i.e. can be returned " +"to the company and be under the brand warranty" +msgstr "" +"Especifica quién es el responsable del tratamiento de la devolución de " +"garantía para el cliente final. La compañía utilizará la dirección por " +"defecto o la dirección de envío de la compañía, y así sucesivamente por " +"proveedor y marca del fabricante. No significa necesariamente que la " +"garantía que se aplica es el de la empresa que hace la devolución (es decir: " +"se puede devolver a la empresa y estar bajo la garantía de la marca)" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "" +"Where the customer has to send back the product(s) if warranty return is " +"set to 'other'." +msgstr "" +"Dónde debe enviar el cliente de vuelta el/los producto/s si la garantía de " +"devolución se establece a 'otra'." + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "" +"Warranty in month for this product/supplier relation. Only for " +"company/supplier relation (purchase order) ; the customer/company relation " +"(sale order) always use the product main warranty field" +msgstr "" +"Garantía en meses para este producto/proveedor. Únicamente para relaciones " +"empresa/proveedor (Orden de compra); la relación cliente/proveedor (Orden de " +"venta) usa siempre el campo garantía de la ficha de producto." + +#. module: product_warranty +#: view:res.company:0 +msgid "Crm product return address" +msgstr "Dirección de devolución del producto" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "Instrucciones para la devolución del producto" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "Periodo" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "Título" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Proveedor activo" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "Por defecto" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "" +"Where the goods should be returned (computed field based on other infos.)" +msgstr "" +"Dónde se devolverán los bienes (campo calculado basado en otra información)." + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "" +"If is default, will be use to set the default value in supplier infos. Be " +"careful to have only one default" +msgstr "" +"Si es por defecto, se usará para establecer el valor por defecto en la " +"información del proveedor. Tenga cuidado de tener sólo un por defecto." + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "Instrucciones de devolución de los productos" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Información sobre un proveedor de producto" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "Indica si el proveedor todavía está activo. Sólo para información." + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "Tipo de devolución" + +#. module: product_warranty +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "Instrucciones de devolución" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "Instrucciones" diff --git a/product_warranty/i18n/fr.po b/product_warranty/i18n/fr.po new file mode 100644 index 00000000..60c3abc7 --- /dev/null +++ b/product_warranty/i18n/fr.po @@ -0,0 +1,155 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0.2\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2014-01-22 19:17+0000\n" +"Last-Translator: Joël Grand-Guillaume @ camptocamp " +"\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-05-24 06:50+0000\n" +"X-Generator: Launchpad (build 17017)\n" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "" + +#. module: product_warranty +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "" +"Who is in charge of the warranty return treatment toward the end customer. " +"Company will use the current company delivery or default address and so on " +"for supplier and brand manufacturer. Doesn't necessarily mean that the " +"warranty to be applied is the one of the return partner (i.e. can be returned " +"to the company and be under the brand warranty" +msgstr "" +"Indique qui est en charge du traitement du retour garantie envers le client " +"final. L'entreprise utilise l'adresse de livraison, et sinon l'adresse par " +"défaut. Il en va de même pour les options fournisseur ou fabricant. Ce champ " +"n'implique pas forcément que la garantie qui va s'appliquer est celle de " +"celui qui gère le retour." + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "" +"Where the customer has to send back the product(s) if warranty return is " +"set to 'other'." +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "" +"Warranty in month for this product/supplier relation. Only for " +"company/supplier relation (purchase order) ; the customer/company relation " +"(sale order) always use the product main warranty field" +msgstr "" +"Garantie en nombre de mois pour ce fournisseur. Uniquement pour la relation " +"entreprise/fournisseur (commandes d'achat) ; La relation entreprise/client " +"(commandes de vente) utilise toujours le champ de garantie de la fiche " +"produit" + +#. module: product_warranty +#: view:res.company:0 +msgid "Crm product return address" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Fournisseur actif" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "" +"Where the goods should be returned (computed field based on other infos.)" +msgstr "" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "" +"If is default, will be use to set the default value in supplier infos. Be " +"careful to have only one default" +msgstr "" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Information sur le fournisseur du produit" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "" + +#. module: product_warranty +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "" diff --git a/product_warranty/i18n/product_warranty.pot b/product_warranty/i18n/product_warranty.pot new file mode 100644 index 00000000..fe6295d5 --- /dev/null +++ b/product_warranty/i18n/product_warranty.pot @@ -0,0 +1,131 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-11-21 15:06+0000\n" +"PO-Revision-Date: 2013-11-21 15:06+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id +#: field:product.supplierinfo,warranty_return_address:0 +#: field:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Return address" +msgstr "" + +#. module: product_warranty +#: view:product.supplierinfo:0 +msgid "Warranty informations" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current company delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarily mean that the warranty to be applied is the one of the return partner (i.e. can be returned to the company and be under the brand warranty" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address_id:0 +msgid "Where the customer has to send back the product(s) if warranty return is set to 'other'." +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" +msgstr "" + +#. module: product_warranty +#: view:res.company:0 +msgid "Crm product return address" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name +#: field:return.instruction,name:0 +msgid "Title" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_address:0 +msgid "Where the goods should be returned (computed field based on other infos.)" +msgstr "" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" +msgstr "" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "" + +#. module: product_warranty +#: view:return.instruction:0 +msgid "Return instructions" +msgstr "" + +#. module: product_warranty +#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions +#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:0 +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "" diff --git a/product_warranty/images/product_warranty.png b/product_warranty/images/product_warranty.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eb36e6080badb69696ff6003d06c72a568c1c4 GIT binary patch literal 85387 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. +# +############################################################################## + +from openerp.osv import orm, fields + + +class return_instruction(orm.Model): + _name = "return.instruction" + _description = "Instructions for product return" + _columns = { + 'name': fields.char('Title', required=True), + 'instructions': fields.text( + 'Instructions', + help="Instructions for product return"), + 'is_default': fields.boolean( + 'Is default', + help="If is default, will be use to set the default value in " + "supplier infos. Be careful to have only one default"), + } + + +class product_supplierinfo(orm.Model): + _inherit = "product.supplierinfo" + + def get_warranty_return_partner(self, cr, uid, context=None): + result = [('company', 'Company'), + ('supplier', 'Supplier'), + ('other', 'Other'), + ] + return result + + def _get_default_instructions(self, cr, uid, context=None): + """ Get selected lines to add to exchange """ + instr_obj = self.pool.get('return.instruction') + instruction_ids = instr_obj.search(cr, uid, + [('is_default', '=', True)], + context=context) + if instruction_ids: + return instruction_ids[0] + return False + + def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, + context=None): + """ Method to return the partner delivery address or if none, the + default address + + dedicated_delivery_address stand for the case a new type of + address more particularly dedicated to return delivery would be + implemented. + + """ + result = {} + for supplier_info in self.browse(cr, uid, ids, context=context): + result[supplier_info.id] = False + return_partner = supplier_info.warranty_return_partner + partner_id = supplier_info.company_id.partner_id.id + if return_partner: + if return_partner == 'supplier': + partner_id = supplier_info.name.id + elif return_partner == 'company': + if supplier_info.company_id.crm_return_address_id: + partner_id = supplier_info.company_id.\ + crm_return_address_id.id + elif return_partner == 'other': + if supplier_info.warranty_return_other_address_id: + partner_id = supplier_info.\ + warranty_return_other_address_id.id + result[supplier_info.id] = partner_id + return result + + _columns = { + "warranty_duration": fields.float( + 'Period', + help="Warranty in month for this product/supplier relation. " + "Only for company/supplier relation (purchase order) ; " + "the customer/company relation (sale order) always use " + "the product main warranty field"), + "warranty_return_partner": fields.selection( + get_warranty_return_partner, + 'Return type', + required=True, + help="Who is in charge of the warranty return treatment toward " + "the end customer. Company will use the current company " + "delivery or default address and so on for supplier and " + "brand manufacturer. Doesn't necessarily mean that " + "the warranty to be applied is the one of the return partner " + "(i.e. can be returned to the company and be under the brand " + "warranty"), + 'return_instructions': fields.many2one( + 'return.instruction', + 'Instructions', + help="Instructions for product return"), + 'active_supplier': fields.boolean( + 'Active supplier', + help="Is this supplier still active, only for information"), + 'warranty_return_address': fields.function( + _get_warranty_return_address, + type='many2one', relation='res.partner', string="Return address", + help="Where the goods should be returned " + "(computed field based on other infos.)"), + "warranty_return_other_address_id": fields.many2one( + 'res.partner', + 'Return address', + help="Where the customer has to send back the product(s) " + "if warranty return is set to 'other'."), + } + + _defaults = { + 'warranty_return_partner': 'company', + 'return_instructions': _get_default_instructions, + } diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/product_warranty_view.xml new file mode 100644 index 00000000..5160ed2b --- /dev/null +++ b/product_warranty/product_warranty_view.xml @@ -0,0 +1,113 @@ + + + + + + + + + product.return.instructions.tree + return.instruction + + + + + + + + + + + + product.return.instructions.form + return.instruction + +
+ + + + + + + + +
+ + + Products return instructions + return.instruction + form + tree,form + + + + + + + + product.supplierinfo.warranty.tree + product.supplierinfo + + + + + + + + + + + + + + + product.supplierinfo.warranty.form + product.supplierinfo + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ +
+
diff --git a/product_warranty/res_company.py b/product_warranty/res_company.py new file mode 100644 index 00000000..146979ee --- /dev/null +++ b/product_warranty/res_company.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright 2013 Camptocamp +# Copyright 2009-2013 Akretion, +# Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, +# Joel Grand-Guillaume +# +# 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 fields, orm + + +class res_company(orm.Model): + + _inherit = "res.company" + + _columns = { + 'crm_return_address_id': fields.many2one( + 'res.partner', + 'Return address', + help="Default address where the customers has to send back the " + "returned product. If empty, the address is the " + "company address"), + } diff --git a/product_warranty/res_company_view.xml b/product_warranty/res_company_view.xml new file mode 100644 index 00000000..34bdf2ee --- /dev/null +++ b/product_warranty/res_company_view.xml @@ -0,0 +1,23 @@ + + + + + + + crm_claim_rma.company_form + res.company + + + + + + + + + + + + + + + diff --git a/product_warranty/security/ir.model.access.csv b/product_warranty/security/ir.model.access.csv new file mode 100644 index 00000000..b8cc8fff --- /dev/null +++ b/product_warranty/security/ir.model.access.csv @@ -0,0 +1,4 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_return_instruction_user","return.instruction.user","model_return_instruction","base.group_user","True","False","False","False" +"access_return_instruction_manager","return.instruction.manager","model_return_instruction","base.group_sale_manager","True","True","True","True" +"access_return_instruction_salesman","return.instruction.salesman","model_return_instruction","base.group_sale_salesman","True","True","True","True" From 0480f83640c347df68520b50ad90f9484ff906c7 Mon Sep 17 00:00:00 2001 From: "Yanina Aular (Vauxoo)" Date: Mon, 3 Aug 2015 16:52:51 -0430 Subject: [PATCH 17/26] [IMP] product_warranty module is migrated to API 8.0 and odoo 8.0 --- product_warranty/README.rst | 1 + product_warranty/__init__.py | 42 ++--- product_warranty/__openerp__.py | 50 +++--- product_warranty/demo/product_warranty.xml | 64 +++++++ product_warranty/demo/res_company.xml | 10 ++ product_warranty/i18n/es.po | 133 ++++++++++++++ product_warranty/i18n/es_MX.po | 16 ++ product_warranty/i18n/es_PA.po | 16 ++ product_warranty/i18n/es_VE.po | 16 ++ product_warranty/i18n/product_warranty.pot | 167 ++++++++++-------- product_warranty/models/__init__.py | 25 +++ .../models/product_supplierinfo.py | 107 +++++++++++ product_warranty/{ => models}/res_company.py | 19 +- product_warranty/models/return_instruction.py | 40 +++++ product_warranty/product_warranty.py | 128 -------------- product_warranty/tests/__init__.py | 22 +++ .../tests/test_product_warranty.py | 80 +++++++++ .../{ => views}/product_warranty_view.xml | 15 +- .../{ => views}/res_company_view.xml | 14 +- 19 files changed, 692 insertions(+), 273 deletions(-) create mode 100644 product_warranty/demo/product_warranty.xml create mode 100644 product_warranty/demo/res_company.xml create mode 100644 product_warranty/i18n/es_MX.po create mode 100644 product_warranty/i18n/es_PA.po create mode 100644 product_warranty/i18n/es_VE.po create mode 100644 product_warranty/models/__init__.py create mode 100644 product_warranty/models/product_supplierinfo.py rename product_warranty/{ => models}/res_company.py (73%) create mode 100644 product_warranty/models/return_instruction.py delete mode 100644 product_warranty/product_warranty.py create mode 100644 product_warranty/tests/__init__.py create mode 100644 product_warranty/tests/test_product_warranty.py rename product_warranty/{ => views}/product_warranty_view.xml (86%) rename product_warranty/{ => views}/res_company_view.xml (57%) diff --git a/product_warranty/README.rst b/product_warranty/README.rst index 70f169fe..aba2e4b2 100644 --- a/product_warranty/README.rst +++ b/product_warranty/README.rst @@ -31,6 +31,7 @@ Contributors * Maxime Chambreuil * Joël Grand-Guillaume * Ondřej Kuzník +* Yanina Aular Maintainer ---------- diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py index 4e914a85..7297bf89 100644 --- a/product_warranty/__init__.py +++ b/product_warranty/__init__.py @@ -1,21 +1,23 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn -# -# 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_warranty -from . import res_company +######################################################################### +# # +# # +######################################################################### +# # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU 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 General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +######################################################################### + +from . import models diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index f0d15262..7eb6fbbb 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -1,38 +1,44 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn -# -# 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 . -# -############################################################################## +######################################################################### +# # +# # +######################################################################### +# # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU 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 General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +######################################################################### { 'name': 'Product warranty', 'version': '1.0', 'category': 'Generic Modules/Product', - 'author': "Akretion,Odoo Community Association (OCA)", + 'author': "Akretion,Odoo Community Association (OCA),Vauxoo", 'website': 'http://akretion.com', 'license': 'AGPL-3', 'depends': ['product'], 'data': [ 'security/ir.model.access.csv', - 'res_company_view.xml', - 'product_warranty_view.xml', + 'views/res_company_view.xml', + 'views/product_warranty_view.xml', + ], + 'demo': [ + 'demo/product_warranty.xml', + 'demo/res_company.xml', ], - 'demo_xml': [], 'test': [], 'installable': True, + 'active': False, 'images': ['images/product_warranty.png'], } diff --git a/product_warranty/demo/product_warranty.xml b/product_warranty/demo/product_warranty.xml new file mode 100644 index 00000000..6f7f3f8e --- /dev/null +++ b/product_warranty/demo/product_warranty.xml @@ -0,0 +1,64 @@ + + + + + + Default Instruction + To return a product purchased through our platform vendor Marketplace access our online Returns Center and click Return products to begin the application process for the return. +Select the product you want to return and the reason for the return. You will need you to provide detailed information to enable the seller to handle your request. Once the seller has reviewed your application, it will respond by e-mail within 3 working days. + 1 + + + + Provisional Instruction + Under the provisions of these Conditions of Sale, you may return the products received once you have contacted our customer service department adidas Mexico and the request is authorized. If you choose to return your order, we will refund: the full purchase price, as long as we have previously returned the products you order in perfect condition: (i) new product unused, (ii) with packaging, original box and tags (iii) be in the period of 30 calendar days after receiving the product. If you do not return the products to fulfill the above conditions, we are entitled to charge the products or the costs of recovery. + + + + + + 5 + + + + + other + + 8 + + + 5 + 1 + + + + + supplier + 12 + + + 5 + 1 + + + + + + 5 + + + + + supplier + 10 + + + + + supplier + 6 + + + + diff --git a/product_warranty/demo/res_company.xml b/product_warranty/demo/res_company.xml new file mode 100644 index 00000000..63f04793 --- /dev/null +++ b/product_warranty/demo/res_company.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/product_warranty/i18n/es.po b/product_warranty/i18n/es.po index 93d58607..b7902cd8 100644 --- a/product_warranty/i18n/es.po +++ b/product_warranty/i18n/es.po @@ -159,3 +159,136 @@ msgstr "Instrucciones de devolución" #: field:return.instruction,instructions:0 msgid "Instructions" msgstr "Instrucciones" + +#. module: product_warranty +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" +msgstr "Proveedor activo" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: product_warranty +#: field:return.instruction,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: product_warranty +#: field:return.instruction,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: product_warranty +#: view:res.company:product_warranty.company_form +msgid "Crm product return address" +msgstr "Dirección de devolución del producto" + +#. module: product_warranty +#: help:res.company,crm_return_address_id:0 +msgid "Default address where the customers has to send back the returned product. If empty, the address is the company address" +msgstr "Dirección por defecto donde los clientes deben enviar de regresa los productos devueltos. Si está vacío, la dirección es la dirección de la compañía" + +#. module: product_warranty +#: field:return.instruction,id:0 +msgid "ID" +msgstr "ID" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" +msgstr "Si es por defecto, se usará para establecer el valor por defecto en la información del proveedor. Tenga cuidado de tener sólo un por defecto." + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "Información sobre un proveedor de producto" + +#. module: product_warranty +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:product_warranty.product_return_instructions_form_view +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "Instrucciones" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_return_instruction +#: help:product.supplierinfo,return_instructions:0 +#: help:return.instruction,instructions:0 +msgid "Instructions for product return" +msgstr "Instrucciones para la devolución del producto" + +#. module: product_warranty +#: field:return.instruction,is_default:0 +msgid "Is default" +msgstr "Por defecto" + +#. module: product_warranty +#: help:product.supplierinfo,active_supplier:0 +msgid "Is this supplier still active, only for information" +msgstr "Indica si el proveedor todavía está activo. Sólo para información." + +#. module: product_warranty +#: field:return.instruction,write_uid:0 +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: product_warranty +#: field:return.instruction,write_date:0 +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "Periodo" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products Return Instructions" +msgstr "Intrucciones para devolución de productos" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_return_other_address:0 +#: field:res.company,crm_return_address_id:0 +msgid "Return address" +msgstr "Dirección de retorno" + +#. module: product_warranty +#: view:return.instruction:product_warranty.product_return_instructions_form_view +#: view:return.instruction:product_warranty.product_return_instructions_tree_view +msgid "Return instructions" +msgstr "Instrucciones de devolución" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_return_partner:0 +msgid "Return type" +msgstr "Tipo de devolución" + +#. module: product_warranty +#: field:return.instruction,name:0 +msgid "Title" +msgstr "Título" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_duration:0 +msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" +msgstr "Garantía en meses para la relación producto/proveedor. Sólo para la relación producto/compañía (orden de compra); la relación cliente/compañía (orden de venta) siempre usa el producto principal para el campo garantía" + +#. module: product_warranty +#: view:product.supplierinfo:product_warranty.product_supplierinfo_warranty_form_view +msgid "Warranty informations" +msgstr "Información de garantía" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address:0 +msgid "Where the customer has to send back the product(s) if warranty return is set to 'other'." +msgstr "Donde el cliente debe enviar el producto si la garantía es 'otros'" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" +msgstr "Quién se encarga del tratamiento de retorno de garantía hacia el cliente final. Compañía utilizará la entrega compagny actual o la dirección por defecto y así sucesivamente para el proveedor y el fabricante de la marca. No significa necessarly que la garantía que se aplica es el de la pareja de retorno (es decir: pueden ser devueltos a la empresa y estar bajo la garantía de la marca" + diff --git a/product_warranty/i18n/es_MX.po b/product_warranty/i18n/es_MX.po new file mode 100644 index 00000000..2481cca0 --- /dev/null +++ b/product_warranty/i18n/es_MX.po @@ -0,0 +1,16 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-17 20:41+0000\n" +"PO-Revision-Date: 2015-07-17 20:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" diff --git a/product_warranty/i18n/es_PA.po b/product_warranty/i18n/es_PA.po new file mode 100644 index 00000000..2481cca0 --- /dev/null +++ b/product_warranty/i18n/es_PA.po @@ -0,0 +1,16 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-17 20:41+0000\n" +"PO-Revision-Date: 2015-07-17 20:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" diff --git a/product_warranty/i18n/es_VE.po b/product_warranty/i18n/es_VE.po new file mode 100644 index 00000000..2481cca0 --- /dev/null +++ b/product_warranty/i18n/es_VE.po @@ -0,0 +1,16 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_warranty +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-17 20:41+0000\n" +"PO-Revision-Date: 2015-07-17 20:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" diff --git a/product_warranty/i18n/product_warranty.pot b/product_warranty/i18n/product_warranty.pot index fe6295d5..982757ab 100644 --- a/product_warranty/i18n/product_warranty.pot +++ b/product_warranty/i18n/product_warranty.pot @@ -1,13 +1,13 @@ -# Translation of OpenERP Server. +# Translation of Odoo Server. # This file contains the translation of the following modules: # * product_warranty # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" +"Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-21 15:06+0000\n" -"PO-Revision-Date: 2013-11-21 15:06+0000\n" +"POT-Creation-Date: 2015-07-18 02:03+0000\n" +"PO-Revision-Date: 2015-07-18 02:03+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -16,38 +16,57 @@ msgstr "" "Plural-Forms: \n" #. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_address -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_other_address_id -#: field:product.supplierinfo,warranty_return_address:0 -#: field:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Return address" +#: field:product.supplierinfo,active_supplier:0 +msgid "Active supplier" msgstr "" #. module: product_warranty -#: view:product.supplierinfo:0 -msgid "Warranty informations" +#: model:ir.model,name:product_warranty.model_res_company +msgid "Companies" msgstr "" #. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current company delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarily mean that the warranty to be applied is the one of the return partner (i.e. can be returned to the company and be under the brand warranty" +#: field:return.instruction,create_uid:0 +msgid "Created by" msgstr "" #. module: product_warranty -#: help:product.supplierinfo,warranty_return_other_address_id:0 -msgid "Where the customer has to send back the product(s) if warranty return is set to 'other'." +#: field:return.instruction,create_date:0 +msgid "Created on" msgstr "" #. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" -msgstr "" - -#. module: product_warranty -#: view:res.company:0 +#: view:res.company:product_warranty.company_form msgid "Crm product return address" msgstr "" +#. module: product_warranty +#: help:res.company,crm_return_address_id:0 +msgid "Default address where the customers has to send back the returned product. If empty, the address is the company address" +msgstr "" + +#. module: product_warranty +#: field:return.instruction,id:0 +msgid "ID" +msgstr "" + +#. module: product_warranty +#: help:return.instruction,is_default:0 +msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" +msgstr "" + +#. module: product_warranty +#: model:ir.model,name:product_warranty.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product_warranty +#: field:product.supplierinfo,return_instructions:0 +#: view:return.instruction:product_warranty.product_return_instructions_form_view +#: field:return.instruction,instructions:0 +msgid "Instructions" +msgstr "" + #. module: product_warranty #: model:ir.model,name:product_warranty.model_return_instruction #: help:product.supplierinfo,return_instructions:0 @@ -56,76 +75,74 @@ msgid "Instructions for product return" msgstr "" #. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_duration -#: field:product.supplierinfo,warranty_duration:0 -msgid "Period" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_name -#: field:return.instruction,name:0 -msgid "Title" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_res_company -msgid "Companies" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_active_supplier -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "" - -#. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_is_default #: field:return.instruction,is_default:0 msgid "Is default" msgstr "" -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_address:0 -msgid "Where the goods should be returned (computed field based on other infos.)" -msgstr "" - -#. module: product_warranty -#: help:return.instruction,is_default:0 -msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" -msgstr "" - -#. module: product_warranty -#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action -#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action -msgid "Products return instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "" - #. module: product_warranty #: help:product.supplierinfo,active_supplier:0 msgid "Is this supplier still active, only for information" msgstr "" #. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_warranty_return_partner +#: field:return.instruction,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: product_warranty +#: field:return.instruction,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_duration:0 +msgid "Period" +msgstr "" + +#. module: product_warranty +#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action +#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action +msgid "Products Return Instructions" +msgstr "" + +#. module: product_warranty +#: field:product.supplierinfo,warranty_return_other_address:0 +#: field:res.company,crm_return_address_id:0 +msgid "Return address" +msgstr "" + +#. module: product_warranty +#: view:return.instruction:product_warranty.product_return_instructions_form_view +#: view:return.instruction:product_warranty.product_return_instructions_tree_view +msgid "Return instructions" +msgstr "" + +#. module: product_warranty #: field:product.supplierinfo,warranty_return_partner:0 msgid "Return type" msgstr "" #. module: product_warranty -#: view:return.instruction:0 -msgid "Return instructions" +#: field:return.instruction,name:0 +msgid "Title" msgstr "" #. module: product_warranty -#: model:ir.model.fields,field_description:product_warranty.field_product_supplierinfo_return_instructions -#: model:ir.model.fields,field_description:product_warranty.field_return_instruction_instructions -#: field:product.supplierinfo,return_instructions:0 -#: view:return.instruction:0 -#: field:return.instruction,instructions:0 -msgid "Instructions" +#: help:product.supplierinfo,warranty_duration:0 +msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" +msgstr "" + +#. module: product_warranty +#: view:product.supplierinfo:product_warranty.product_supplierinfo_warranty_form_view +msgid "Warranty informations" +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_other_address:0 +msgid "Where the customer has to send back the product(s) if warranty return is set to 'other'." +msgstr "" + +#. module: product_warranty +#: help:product.supplierinfo,warranty_return_partner:0 +msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" msgstr "" diff --git a/product_warranty/models/__init__.py b/product_warranty/models/__init__.py new file mode 100644 index 00000000..8e2e2580 --- /dev/null +++ b/product_warranty/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +######################################################################### +# # +# # +######################################################################### +# # +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU 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 General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +######################################################################### + +from . import return_instruction +from . import product_supplierinfo +from . import res_company diff --git a/product_warranty/models/product_supplierinfo.py b/product_warranty/models/product_supplierinfo.py new file mode 100644 index 00000000..3139fc66 --- /dev/null +++ b/product_warranty/models/product_supplierinfo.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# ######################################################################## +# # +# # +# ######################################################################## +# # +# Copyright 2015 Vauxoo +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU 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 General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +########################################################################## + +from openerp import api, fields, models + + +class ProductSupplierInfo(models.Model): + + _inherit = "product.supplierinfo" + + @api.model + def get_warranty_return_partner(self): + result = [('company', 'Company'), + ('supplier', 'Supplier'), + ('other', 'Other'), + ] + return result + + @api.model + def _get_default_instructions(self): + """ Get selected lines to add to exchange """ + instruction_ids = self.env['return.instruction']\ + .search([('is_default', '=', True)], limit=1) + return instruction_ids + + @api.one + @api.depends('warranty_return_partner') + def _compute_warranty_return_address(self): + """ Method to return the partner delivery address or if none, + the default address + + dedicated_delivery_address stand for the case a new type of + address more particularly dedicated to return delivery would be + implemented. + + """ + return_partner = self.warranty_return_partner + partner_id = self.company_id.partner_id.id + if return_partner: + if return_partner == 'supplier': + partner_id = self.name.id + elif return_partner == 'company': + if self.company_id.crm_return_address_id: + partner_id = self.company_id.\ + crm_return_address_id.id + elif return_partner == 'other': + if self.warranty_return_other_address: + partner_id = self.\ + warranty_return_other_address.id + self.warranty_return_address = partner_id + + warranty_duration = fields.Float( + 'Period', + help="Warranty in month for this product/supplier relation. Only " + "for company/supplier relation (purchase order) ; the " + "customer/company relation (sale order) always use the " + "product main warranty field") + warranty_return_partner = fields.Selection( + get_warranty_return_partner, + 'Return type', + required=True, + default='company', + help="Who is in charge of the warranty return treatment toward the" + " end customer. Company will use the current compagny " + " delivery or default address and so on for supplier and " + "brand manufacturer. Doesn't necessarly mean that the " + "warranty to be applied is the one of the return partner " + "(ie: can be returned to the company and be under the " + "brand warranty") + return_instructions = fields.Many2one( + 'return.instruction', + 'Instructions', + default=_get_default_instructions, + help="Instructions for product return") + active_supplier = fields.Boolean( + help="Is this supplier still active, only for information") + warranty_return_address = fields.Many2one( + 'res.partner', + compute='_compute_warranty_return_address', + string="Return address", + help="Where the goods should be returned " + "(computed field based on other infos.)") + warranty_return_other_address = fields.Many2one( + 'res.partner', + string='Return address', + help="Where the customer has to send back the product(s) " + "if warranty return is set to 'other'.") diff --git a/product_warranty/res_company.py b/product_warranty/models/res_company.py similarity index 73% rename from product_warranty/res_company.py rename to product_warranty/models/res_company.py index 146979ee..fce2579e 100644 --- a/product_warranty/res_company.py +++ b/product_warranty/models/res_company.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- ############################################################################## # +# Copyright 2015 Vauxoo # Copyright 2013 Camptocamp # Copyright 2009-2013 Akretion, # Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, @@ -21,18 +22,16 @@ # ############################################################################## -from openerp.osv import fields, orm +from openerp import fields, models -class res_company(orm.Model): +class ResCompany(models.Model): _inherit = "res.company" - _columns = { - 'crm_return_address_id': fields.many2one( - 'res.partner', - 'Return address', - help="Default address where the customers has to send back the " - "returned product. If empty, the address is the " - "company address"), - } + crm_return_address_id = fields.Many2one( + 'res.partner', + string='Return address', + help="Default address where the customers has to send back the " + "returned product. If empty, the address is the " + "company address") diff --git a/product_warranty/models/return_instruction.py b/product_warranty/models/return_instruction.py new file mode 100644 index 00000000..0c430d46 --- /dev/null +++ b/product_warranty/models/return_instruction.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# ######################################################################## +# # +# # +# ######################################################################## +# # +# Copyright 2015 Vauxoo +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU 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 General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +########################################################################## + +from openerp import fields, models + + +class ReturnInstruction(models.Model): + + _name = "return.instruction" + _description = "Instructions for product return" + + name = fields.Char('Title', required=True) + instructions = fields.Text( + 'Instructions', + help="Instructions for product return") + is_default = fields.Boolean('Is default', + help="If is default, will be use " + "to set the default value in " + "supplier infos. Be careful to " + "have only one default") diff --git a/product_warranty/product_warranty.py b/product_warranty/product_warranty.py deleted file mode 100644 index c34cb4e9..00000000 --- a/product_warranty/product_warranty.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot -# -# 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 - - -class return_instruction(orm.Model): - _name = "return.instruction" - _description = "Instructions for product return" - _columns = { - 'name': fields.char('Title', required=True), - 'instructions': fields.text( - 'Instructions', - help="Instructions for product return"), - 'is_default': fields.boolean( - 'Is default', - help="If is default, will be use to set the default value in " - "supplier infos. Be careful to have only one default"), - } - - -class product_supplierinfo(orm.Model): - _inherit = "product.supplierinfo" - - def get_warranty_return_partner(self, cr, uid, context=None): - result = [('company', 'Company'), - ('supplier', 'Supplier'), - ('other', 'Other'), - ] - return result - - def _get_default_instructions(self, cr, uid, context=None): - """ Get selected lines to add to exchange """ - instr_obj = self.pool.get('return.instruction') - instruction_ids = instr_obj.search(cr, uid, - [('is_default', '=', True)], - context=context) - if instruction_ids: - return instruction_ids[0] - return False - - def _get_warranty_return_address(self, cr, uid, ids, field_names, arg, - context=None): - """ Method to return the partner delivery address or if none, the - default address - - dedicated_delivery_address stand for the case a new type of - address more particularly dedicated to return delivery would be - implemented. - - """ - result = {} - for supplier_info in self.browse(cr, uid, ids, context=context): - result[supplier_info.id] = False - return_partner = supplier_info.warranty_return_partner - partner_id = supplier_info.company_id.partner_id.id - if return_partner: - if return_partner == 'supplier': - partner_id = supplier_info.name.id - elif return_partner == 'company': - if supplier_info.company_id.crm_return_address_id: - partner_id = supplier_info.company_id.\ - crm_return_address_id.id - elif return_partner == 'other': - if supplier_info.warranty_return_other_address_id: - partner_id = supplier_info.\ - warranty_return_other_address_id.id - result[supplier_info.id] = partner_id - return result - - _columns = { - "warranty_duration": fields.float( - 'Period', - help="Warranty in month for this product/supplier relation. " - "Only for company/supplier relation (purchase order) ; " - "the customer/company relation (sale order) always use " - "the product main warranty field"), - "warranty_return_partner": fields.selection( - get_warranty_return_partner, - 'Return type', - required=True, - help="Who is in charge of the warranty return treatment toward " - "the end customer. Company will use the current company " - "delivery or default address and so on for supplier and " - "brand manufacturer. Doesn't necessarily mean that " - "the warranty to be applied is the one of the return partner " - "(i.e. can be returned to the company and be under the brand " - "warranty"), - 'return_instructions': fields.many2one( - 'return.instruction', - 'Instructions', - help="Instructions for product return"), - 'active_supplier': fields.boolean( - 'Active supplier', - help="Is this supplier still active, only for information"), - 'warranty_return_address': fields.function( - _get_warranty_return_address, - type='many2one', relation='res.partner', string="Return address", - help="Where the goods should be returned " - "(computed field based on other infos.)"), - "warranty_return_other_address_id": fields.many2one( - 'res.partner', - 'Return address', - help="Where the customer has to send back the product(s) " - "if warranty return is set to 'other'."), - } - - _defaults = { - 'warranty_return_partner': 'company', - 'return_instructions': _get_default_instructions, - } diff --git a/product_warranty/tests/__init__.py b/product_warranty/tests/__init__.py new file mode 100644 index 00000000..07376694 --- /dev/null +++ b/product_warranty/tests/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Yanina Aular +# Copyright 2015 Vauxoo +# +# 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 test_product_warranty diff --git a/product_warranty/tests/test_product_warranty.py b/product_warranty/tests/test_product_warranty.py new file mode 100644 index 00000000..b6eb670c --- /dev/null +++ b/product_warranty/tests/test_product_warranty.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author: Yanina Aular +# Copyright 2015 Vauxoo +# +# 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.tests.common import TransactionCase + + +class TestProductWarranty(TransactionCase): + + def setUp(self): + super(TestProductWarranty, self).setUp() + self.instruction_model = self.env['return.instruction'] + self.supplierinfo = self.env['product.supplierinfo'] + self.create_product_supplierinfo() + + def create_product_supplierinfo(self): + """ + Create a record of product.supplier for next tests + """ + + product_tmpl_id = self.env.ref('product.product_product_3') + + partner_id = self.env.ref('base.res_partner_4') + + supplierinfo_data = dict(name=partner_id.id, + product_name='Test SupplierInfo for' + ' display Default Instruction', + min_qty=4, + delay=5, + warranty_return_partner='supplier', + product_tmpl_id=product_tmpl_id.id,) + self.supplierinfo_brw = \ + self.supplierinfo.create(supplierinfo_data) + + def test_default_instruction(self): + """ + Test for return.instruction record with + default field in True. If is assigned + correctly when one record of + product.supplierinfo is created + """ + + return_instructions_id = self.env.ref('product_warranty.' + 'return_instruction_1') + + self.assertEquals(self.supplierinfo_brw.return_instructions.id, + return_instructions_id.id) + + def test_warranty_return_address(self): + """ + Test warranty_return_address field is calculate correctly depends of + warranty_return_partner + """ + self.create_product_supplierinfo() + + self.assertEquals(self.supplierinfo_brw.warranty_return_address.id, + self.supplierinfo_brw.name.id) + + self.supplierinfo_brw.write({'warranty_return_partner': 'company'}) + + self.assertEquals(self.supplierinfo_brw.warranty_return_address.id, + self.supplierinfo_brw.company_id. + crm_return_address_id.id) diff --git a/product_warranty/product_warranty_view.xml b/product_warranty/views/product_warranty_view.xml similarity index 86% rename from product_warranty/product_warranty_view.xml rename to product_warranty/views/product_warranty_view.xml index 5160ed2b..6148dc30 100644 --- a/product_warranty/product_warranty_view.xml +++ b/product_warranty/views/product_warranty_view.xml @@ -53,7 +53,7 @@
- Products return instructions + Products Return Instructions return.instruction form tree,form @@ -71,13 +71,13 @@ product.supplierinfo - + - + @@ -97,13 +97,10 @@ -
-
-
+ + + diff --git a/product_warranty/res_company_view.xml b/product_warranty/views/res_company_view.xml similarity index 57% rename from product_warranty/res_company_view.xml rename to product_warranty/views/res_company_view.xml index 34bdf2ee..973bd889 100644 --- a/product_warranty/res_company_view.xml +++ b/product_warranty/views/res_company_view.xml @@ -6,18 +6,14 @@ crm_claim_rma.company_form res.company - - + - - - - - - + + + + - From afa518251ca6f247d97ad1ebd78b0c518deac5e0 Mon Sep 17 00:00:00 2001 From: Nhomar Hernandez Date: Wed, 5 Aug 2015 02:54:26 -0500 Subject: [PATCH 18/26] [FIX] typo on comment being refered to an unexistent field. --- product_warranty/README.rst | 2 +- product_warranty/models/product_supplierinfo.py | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/product_warranty/README.rst b/product_warranty/README.rst index aba2e4b2..ebe7a63c 100644 --- a/product_warranty/README.rst +++ b/product_warranty/README.rst @@ -7,7 +7,7 @@ Product Warranty Extends the product warranty management with warranty details on product / supplier relation: -* supplier warranty duration +* Supplier warranty duration * Set default return address for company (if different from standard one) * Whether to return product to company, supplier, other diff --git a/product_warranty/models/product_supplierinfo.py b/product_warranty/models/product_supplierinfo.py index 3139fc66..937eb284 100644 --- a/product_warranty/models/product_supplierinfo.py +++ b/product_warranty/models/product_supplierinfo.py @@ -46,13 +46,8 @@ class ProductSupplierInfo(models.Model): @api.one @api.depends('warranty_return_partner') def _compute_warranty_return_address(self): - """ Method to return the partner delivery address or if none, - the default address - - dedicated_delivery_address stand for the case a new type of - address more particularly dedicated to return delivery would be - implemented. - + """ Method to return the partner delivery address or if none, the + default address """ return_partner = self.warranty_return_partner partner_id = self.company_id.partner_id.id From 289eb3a93b9c0335212b16b74eb1ecb3b1c201c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 9 Oct 2015 10:02:59 +0200 Subject: [PATCH 19/26] [UPD] prefix versions with 8.0 --- product_warranty/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 7eb6fbbb..77f075cb 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -22,7 +22,7 @@ { 'name': 'Product warranty', - 'version': '1.0', + 'version': '8.0.1.0.0', 'category': 'Generic Modules/Product', 'author': "Akretion,Odoo Community Association (OCA),Vauxoo", 'website': 'http://akretion.com', From 750db08274d419aa064b72cfd820e87af17fc5fd Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 14 Oct 2015 03:32:04 +0200 Subject: [PATCH 20/26] [MIG] Make modules uninstallable --- product_warranty/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 77f075cb..79f4e8c1 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -38,7 +38,7 @@ 'demo/res_company.xml', ], 'test': [], - 'installable': True, + 'installable': False, 'active': False, 'images': ['images/product_warranty.png'], } From 72cc7e75c2d908fe044c0c775f2fff740d908fb8 Mon Sep 17 00:00:00 2001 From: Cyril Gaudin Date: Thu, 21 Apr 2016 16:32:59 +0200 Subject: [PATCH 21/26] product_warranty: migration V9 --- product_warranty/README.rst | 1 + product_warranty/__init__.py | 23 +---- product_warranty/__openerp__.py | 4 +- product_warranty/demo/product_warranty.xml | 2 +- product_warranty/models/__init__.py | 23 +---- .../models/product_supplierinfo.py | 83 +++++++------------ product_warranty/models/res_company.py | 25 +----- product_warranty/models/return_instruction.py | 25 +----- .../tests/test_product_warranty.py | 50 +++++------ .../views/product_warranty_view.xml | 40 +++------ product_warranty/views/res_company_view.xml | 6 +- 11 files changed, 84 insertions(+), 198 deletions(-) diff --git a/product_warranty/README.rst b/product_warranty/README.rst index ebe7a63c..a7ad1661 100644 --- a/product_warranty/README.rst +++ b/product_warranty/README.rst @@ -32,6 +32,7 @@ Contributors * Joël Grand-Guillaume * Ondřej Kuzník * Yanina Aular +* Cyril Gaudin Maintainer ---------- diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py index 7297bf89..0d135c28 100644 --- a/product_warranty/__init__.py +++ b/product_warranty/__init__.py @@ -1,23 +1,6 @@ # -*- coding: utf-8 -*- -######################################################################### -# # -# # -######################################################################### -# # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU 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 General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -######################################################################### +# © 2016 Cyril Gaudin (Camptocamp) +# © 2009-2011 Akretion, Emmanuel Samyn +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 79f4e8c1..64864487 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -22,7 +22,7 @@ { 'name': 'Product warranty', - 'version': '8.0.1.0.0', + 'version': '9.0.1.0.0', 'category': 'Generic Modules/Product', 'author': "Akretion,Odoo Community Association (OCA),Vauxoo", 'website': 'http://akretion.com', @@ -38,7 +38,7 @@ 'demo/res_company.xml', ], 'test': [], - 'installable': False, + 'installable': True, 'active': False, 'images': ['images/product_warranty.png'], } diff --git a/product_warranty/demo/product_warranty.xml b/product_warranty/demo/product_warranty.xml index 6f7f3f8e..faea7cc5 100644 --- a/product_warranty/demo/product_warranty.xml +++ b/product_warranty/demo/product_warranty.xml @@ -37,7 +37,7 @@ Select the product you want to return and the reason for the return. You will ne supplier 12 - + 5 1
diff --git a/product_warranty/models/__init__.py b/product_warranty/models/__init__.py index 8e2e2580..b29d709f 100644 --- a/product_warranty/models/__init__.py +++ b/product_warranty/models/__init__.py @@ -1,24 +1,7 @@ # -*- coding: utf-8 -*- -######################################################################### -# # -# # -######################################################################### -# # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU 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 General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -######################################################################### +# © 2016 Cyril Gaudin (Camptocamp) +# © 2009-2011 Akretion, Emmanuel Samyn +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import return_instruction from . import product_supplierinfo diff --git a/product_warranty/models/product_supplierinfo.py b/product_warranty/models/product_supplierinfo.py index 937eb284..c406f98c 100644 --- a/product_warranty/models/product_supplierinfo.py +++ b/product_warranty/models/product_supplierinfo.py @@ -1,25 +1,8 @@ # -*- coding: utf-8 -*- -# ######################################################################## -# # -# # -# ######################################################################## -# # -# Copyright 2015 Vauxoo -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU 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 General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -########################################################################## +# © 2016 Cyril Gaudin (Camptocamp) +# © 2015 Vauxoo +# © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import api, fields, models @@ -28,14 +11,6 @@ class ProductSupplierInfo(models.Model): _inherit = "product.supplierinfo" - @api.model - def get_warranty_return_partner(self): - result = [('company', 'Company'), - ('supplier', 'Supplier'), - ('other', 'Other'), - ] - return result - @api.model def _get_default_instructions(self): """ Get selected lines to add to exchange """ @@ -43,36 +18,35 @@ class ProductSupplierInfo(models.Model): .search([('is_default', '=', True)], limit=1) return instruction_ids - @api.one @api.depends('warranty_return_partner') def _compute_warranty_return_address(self): """ Method to return the partner delivery address or if none, the default address """ - return_partner = self.warranty_return_partner - partner_id = self.company_id.partner_id.id - if return_partner: - if return_partner == 'supplier': - partner_id = self.name.id - elif return_partner == 'company': - if self.company_id.crm_return_address_id: - partner_id = self.company_id.\ - crm_return_address_id.id - elif return_partner == 'other': - if self.warranty_return_other_address: - partner_id = self.\ - warranty_return_other_address.id - self.warranty_return_address = partner_id + for record in self: + return_partner = record.warranty_return_partner + partner_id = record.company_id.partner_id.id + if return_partner: + if return_partner == 'supplier': + partner_id = record.name.id + elif return_partner == 'company': + if record.company_id.crm_return_address_id: + partner_id = record.company_id.crm_return_address_id.id + elif return_partner == 'other': + if record.warranty_return_other_address: + partner_id = record.warranty_return_other_address.id + record.warranty_return_address = partner_id warranty_duration = fields.Float( 'Period', help="Warranty in month for this product/supplier relation. Only " "for company/supplier relation (purchase order) ; the " "customer/company relation (sale order) always use the " - "product main warranty field") + "product main warranty field" + ) warranty_return_partner = fields.Selection( - get_warranty_return_partner, - 'Return type', + [('company', 'Company'), ('supplier', 'Supplier'), ('other', 'Other')], + string='Return type', required=True, default='company', help="Who is in charge of the warranty return treatment toward the" @@ -81,22 +55,27 @@ class ProductSupplierInfo(models.Model): "brand manufacturer. Doesn't necessarly mean that the " "warranty to be applied is the one of the return partner " "(ie: can be returned to the company and be under the " - "brand warranty") + "brand warranty)" + ) return_instructions = fields.Many2one( 'return.instruction', 'Instructions', default=_get_default_instructions, - help="Instructions for product return") + help="Instructions for product return" + ) active_supplier = fields.Boolean( - help="Is this supplier still active, only for information") + help="Is this supplier still active, only for information" + ) warranty_return_address = fields.Many2one( 'res.partner', compute='_compute_warranty_return_address', string="Return address", help="Where the goods should be returned " - "(computed field based on other infos.)") + "(computed field based on other infos.)" + ) warranty_return_other_address = fields.Many2one( 'res.partner', string='Return address', help="Where the customer has to send back the product(s) " - "if warranty return is set to 'other'.") + "if warranty return is set to 'other'." + ) diff --git a/product_warranty/models/res_company.py b/product_warranty/models/res_company.py index fce2579e..8c7258cf 100644 --- a/product_warranty/models/res_company.py +++ b/product_warranty/models/res_company.py @@ -1,26 +1,7 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Copyright 2015 Vauxoo -# Copyright 2013 Camptocamp -# Copyright 2009-2013 Akretion, -# Author: Emmanuel Samyn, Raphaël Valyi, Sébastien Beau, -# Joel Grand-Guillaume -# -# 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 . -# -############################################################################## +# © 2016 Joel Grand-Guillaume, Cyril Gaudin (Camptocamp) +# © 2009-2013 Akretion, Emmanuel Samyn, Raphaël Valyi, Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import fields, models diff --git a/product_warranty/models/return_instruction.py b/product_warranty/models/return_instruction.py index 0c430d46..cb646a61 100644 --- a/product_warranty/models/return_instruction.py +++ b/product_warranty/models/return_instruction.py @@ -1,25 +1,8 @@ # -*- coding: utf-8 -*- -# ######################################################################## -# # -# # -# ######################################################################## -# # -# Copyright 2015 Vauxoo -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU 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 General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -########################################################################## +# © 2016 Cyril Gaudin (Camptocamp) +# © 2015 Vauxoo +# © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import fields, models diff --git a/product_warranty/tests/test_product_warranty.py b/product_warranty/tests/test_product_warranty.py index b6eb670c..98bb2ad8 100644 --- a/product_warranty/tests/test_product_warranty.py +++ b/product_warranty/tests/test_product_warranty.py @@ -1,23 +1,7 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Yanina Aular -# Copyright 2015 Vauxoo -# -# 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 . -# -############################################################################## +# © 2016 Cyril Gaudin (Camptocamp) +# © 2015 Vauxoo, Yanina Aular +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.tests.common import TransactionCase @@ -38,16 +22,19 @@ class TestProductWarranty(TransactionCase): product_tmpl_id = self.env.ref('product.product_product_3') partner_id = self.env.ref('base.res_partner_4') + other_partner = self.env.ref('base.res_partner_12') - supplierinfo_data = dict(name=partner_id.id, - product_name='Test SupplierInfo for' - ' display Default Instruction', - min_qty=4, - delay=5, - warranty_return_partner='supplier', - product_tmpl_id=product_tmpl_id.id,) - self.supplierinfo_brw = \ - self.supplierinfo.create(supplierinfo_data) + supplierinfo_data = dict( + name=partner_id.id, + product_name='Test SupplierInfo for display Default Instruction', + min_qty=4, + delay=5, + warranty_return_partner='supplier', + product_tmpl_id=product_tmpl_id.id, + warranty_return_other_address=other_partner.id, + ) + + self.supplierinfo_brw = self.supplierinfo.create(supplierinfo_data) def test_default_instruction(self): """ @@ -78,3 +65,10 @@ class TestProductWarranty(TransactionCase): self.assertEquals(self.supplierinfo_brw.warranty_return_address.id, self.supplierinfo_brw.company_id. crm_return_address_id.id) + + self.supplierinfo_brw.write({'warranty_return_partner': 'other'}) + + self.assertEquals( + self.supplierinfo_brw.warranty_return_address.id, + self.supplierinfo_brw.warranty_return_other_address.id + ) diff --git a/product_warranty/views/product_warranty_view.xml b/product_warranty/views/product_warranty_view.xml index 6148dc30..aef144f2 100644 --- a/product_warranty/views/product_warranty_view.xml +++ b/product_warranty/views/product_warranty_view.xml @@ -1,29 +1,7 @@ - - - - + product.return.instructions.tree return.instruction @@ -36,7 +14,7 @@ - + product.return.instructions.form return.instruction @@ -64,20 +42,20 @@ groups="base.group_no_one" id="menu_product_return_instructions_action" parent="product.prod_config_main" sequence="3"/> - + product.supplierinfo.warranty.tree product.supplierinfo - + - + @@ -87,7 +65,7 @@ product.supplierinfo - + @@ -97,12 +75,14 @@ - + - + diff --git a/product_warranty/views/res_company_view.xml b/product_warranty/views/res_company_view.xml index 973bd889..831c09d8 100644 --- a/product_warranty/views/res_company_view.xml +++ b/product_warranty/views/res_company_view.xml @@ -8,9 +8,11 @@ res.company - + - + + + From 585dd19eabec064127c72e78d1ff060ad63610de Mon Sep 17 00:00:00 2001 From: "Yanina Aular (Vauxoo)" Date: Mon, 16 May 2016 11:58:55 -0400 Subject: [PATCH 22/26] [FIX] file naming of view files --- product_warranty/__openerp__.py | 4 ++-- .../views/{product_warranty_view.xml => product_warranty.xml} | 0 .../views/{res_company_view.xml => res_company.xml} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename product_warranty/views/{product_warranty_view.xml => product_warranty.xml} (100%) rename product_warranty/views/{res_company_view.xml => res_company.xml} (100%) diff --git a/product_warranty/__openerp__.py b/product_warranty/__openerp__.py index 64864487..ebe22030 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__openerp__.py @@ -30,8 +30,8 @@ 'depends': ['product'], 'data': [ 'security/ir.model.access.csv', - 'views/res_company_view.xml', - 'views/product_warranty_view.xml', + 'views/res_company.xml', + 'views/product_warranty.xml', ], 'demo': [ 'demo/product_warranty.xml', diff --git a/product_warranty/views/product_warranty_view.xml b/product_warranty/views/product_warranty.xml similarity index 100% rename from product_warranty/views/product_warranty_view.xml rename to product_warranty/views/product_warranty.xml diff --git a/product_warranty/views/res_company_view.xml b/product_warranty/views/res_company.xml similarity index 100% rename from product_warranty/views/res_company_view.xml rename to product_warranty/views/res_company.xml From fe26a7bb82155b56bcc50ee281ba496e443d1bac Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:06:55 +0200 Subject: [PATCH 23/26] [MIG] Make modules uninstallable --- product_warranty/{__openerp__.py => __manifest__.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename product_warranty/{__openerp__.py => __manifest__.py} (98%) diff --git a/product_warranty/__openerp__.py b/product_warranty/__manifest__.py similarity index 98% rename from product_warranty/__openerp__.py rename to product_warranty/__manifest__.py index ebe22030..54b4e53b 100644 --- a/product_warranty/__openerp__.py +++ b/product_warranty/__manifest__.py @@ -38,7 +38,7 @@ 'demo/res_company.xml', ], 'test': [], - 'installable': True, + 'installable': False, 'active': False, 'images': ['images/product_warranty.png'], } From 099f2da9adafcf824e53c6aea3641085acc1919d Mon Sep 17 00:00:00 2001 From: bima Date: Wed, 24 May 2017 20:46:48 +0700 Subject: [PATCH 24/26] Migrate to v10.0 - Add dependency sale because group "group_sale_salesman" and "group_sale_manager" are defined on modul sales_team * sale depend to sales_team * update ir.model.access base. -> sales_team. - Fix product.prod_config_main not compatible and moved to sale.prod_config_main - Make removed col="6 when add product supplier info field too small (width) --- product_warranty/README.rst | 1 + product_warranty/__manifest__.py | 6 +++--- product_warranty/demo/product_warranty.xml | 4 ++-- product_warranty/demo/res_company.xml | 4 ++-- product_warranty/models/product_supplierinfo.py | 2 +- product_warranty/models/res_company.py | 2 +- product_warranty/models/return_instruction.py | 2 +- product_warranty/security/ir.model.access.csv | 4 ++-- product_warranty/tests/test_product_warranty.py | 2 +- product_warranty/views/product_warranty.xml | 12 ++++++------ product_warranty/views/res_company.xml | 4 ++-- 11 files changed, 22 insertions(+), 21 deletions(-) diff --git a/product_warranty/README.rst b/product_warranty/README.rst index a7ad1661..a07914af 100644 --- a/product_warranty/README.rst +++ b/product_warranty/README.rst @@ -33,6 +33,7 @@ Contributors * Ondřej Kuzník * Yanina Aular * Cyril Gaudin +* Bima Jati Wijaya Maintainer ---------- diff --git a/product_warranty/__manifest__.py b/product_warranty/__manifest__.py index 54b4e53b..e2b6badb 100644 --- a/product_warranty/__manifest__.py +++ b/product_warranty/__manifest__.py @@ -22,12 +22,12 @@ { 'name': 'Product warranty', - 'version': '9.0.1.0.0', + 'version': '10.0.1.0.0', 'category': 'Generic Modules/Product', 'author': "Akretion,Odoo Community Association (OCA),Vauxoo", 'website': 'http://akretion.com', 'license': 'AGPL-3', - 'depends': ['product'], + 'depends': ['product', 'sale'], 'data': [ 'security/ir.model.access.csv', 'views/res_company.xml', @@ -38,7 +38,7 @@ 'demo/res_company.xml', ], 'test': [], - 'installable': False, + 'installable': True, 'active': False, 'images': ['images/product_warranty.png'], } diff --git a/product_warranty/demo/product_warranty.xml b/product_warranty/demo/product_warranty.xml index faea7cc5..570568cf 100644 --- a/product_warranty/demo/product_warranty.xml +++ b/product_warranty/demo/product_warranty.xml @@ -1,5 +1,5 @@ - + @@ -61,4 +61,4 @@ Select the product you want to return and the reason for the return. You will ne - + diff --git a/product_warranty/demo/res_company.xml b/product_warranty/demo/res_company.xml index 63f04793..43f0a72f 100644 --- a/product_warranty/demo/res_company.xml +++ b/product_warranty/demo/res_company.xml @@ -1,5 +1,5 @@ - + @@ -7,4 +7,4 @@ - + diff --git a/product_warranty/models/product_supplierinfo.py b/product_warranty/models/product_supplierinfo.py index c406f98c..7bf4c88a 100644 --- a/product_warranty/models/product_supplierinfo.py +++ b/product_warranty/models/product_supplierinfo.py @@ -4,7 +4,7 @@ # © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import api, fields, models +from odoo import api, fields, models class ProductSupplierInfo(models.Model): diff --git a/product_warranty/models/res_company.py b/product_warranty/models/res_company.py index 8c7258cf..30009796 100644 --- a/product_warranty/models/res_company.py +++ b/product_warranty/models/res_company.py @@ -3,7 +3,7 @@ # © 2009-2013 Akretion, Emmanuel Samyn, Raphaël Valyi, Sébastien Beau # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import fields, models +from odoo import fields, models class ResCompany(models.Model): diff --git a/product_warranty/models/return_instruction.py b/product_warranty/models/return_instruction.py index cb646a61..b1798a6e 100644 --- a/product_warranty/models/return_instruction.py +++ b/product_warranty/models/return_instruction.py @@ -4,7 +4,7 @@ # © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import fields, models +from odoo import fields, models class ReturnInstruction(models.Model): diff --git a/product_warranty/security/ir.model.access.csv b/product_warranty/security/ir.model.access.csv index b8cc8fff..ba6c463e 100644 --- a/product_warranty/security/ir.model.access.csv +++ b/product_warranty/security/ir.model.access.csv @@ -1,4 +1,4 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" "access_return_instruction_user","return.instruction.user","model_return_instruction","base.group_user","True","False","False","False" -"access_return_instruction_manager","return.instruction.manager","model_return_instruction","base.group_sale_manager","True","True","True","True" -"access_return_instruction_salesman","return.instruction.salesman","model_return_instruction","base.group_sale_salesman","True","True","True","True" +"access_return_instruction_manager","return.instruction.manager","model_return_instruction","sales_team.group_sale_manager","True","True","True","True" +"access_return_instruction_salesman","return.instruction.salesman","model_return_instruction","sales_team.group_sale_salesman","True","True","True","True" diff --git a/product_warranty/tests/test_product_warranty.py b/product_warranty/tests/test_product_warranty.py index 98bb2ad8..38a68707 100644 --- a/product_warranty/tests/test_product_warranty.py +++ b/product_warranty/tests/test_product_warranty.py @@ -3,7 +3,7 @@ # © 2015 Vauxoo, Yanina Aular # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class TestProductWarranty(TransactionCase): diff --git a/product_warranty/views/product_warranty.xml b/product_warranty/views/product_warranty.xml index aef144f2..23741c1c 100644 --- a/product_warranty/views/product_warranty.xml +++ b/product_warranty/views/product_warranty.xml @@ -1,5 +1,5 @@ - + @@ -20,7 +20,7 @@ return.instruction
- + @@ -41,7 +41,7 @@ + parent="sale.prod_config_main" sequence="3"/> @@ -66,11 +66,11 @@ - + - + @@ -87,4 +87,4 @@ - + diff --git a/product_warranty/views/res_company.xml b/product_warranty/views/res_company.xml index 831c09d8..51317c05 100644 --- a/product_warranty/views/res_company.xml +++ b/product_warranty/views/res_company.xml @@ -1,5 +1,5 @@ - + @@ -18,4 +18,4 @@ - + From c3a6e672d0cdc7505b8bd1fa856b7b56645f04ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Fri, 15 Jun 2018 23:39:05 +0200 Subject: [PATCH 25/26] remove obsolete .pot files [ci skip] --- product_warranty/i18n/product_warranty.pot | 148 --------------------- 1 file changed, 148 deletions(-) delete mode 100644 product_warranty/i18n/product_warranty.pot diff --git a/product_warranty/i18n/product_warranty.pot b/product_warranty/i18n/product_warranty.pot deleted file mode 100644 index 982757ab..00000000 --- a/product_warranty/i18n/product_warranty.pot +++ /dev/null @@ -1,148 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_warranty -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-18 02:03+0000\n" -"PO-Revision-Date: 2015-07-18 02:03+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_warranty -#: field:product.supplierinfo,active_supplier:0 -msgid "Active supplier" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_res_company -msgid "Companies" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,create_date:0 -msgid "Created on" -msgstr "" - -#. module: product_warranty -#: view:res.company:product_warranty.company_form -msgid "Crm product return address" -msgstr "" - -#. module: product_warranty -#: help:res.company,crm_return_address_id:0 -msgid "Default address where the customers has to send back the returned product. If empty, the address is the company address" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,id:0 -msgid "ID" -msgstr "" - -#. module: product_warranty -#: help:return.instruction,is_default:0 -msgid "If is default, will be use to set the default value in supplier infos. Be careful to have only one default" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_product_supplierinfo -msgid "Information about a product supplier" -msgstr "" - -#. module: product_warranty -#: field:product.supplierinfo,return_instructions:0 -#: view:return.instruction:product_warranty.product_return_instructions_form_view -#: field:return.instruction,instructions:0 -msgid "Instructions" -msgstr "" - -#. module: product_warranty -#: model:ir.model,name:product_warranty.model_return_instruction -#: help:product.supplierinfo,return_instructions:0 -#: help:return.instruction,instructions:0 -msgid "Instructions for product return" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,is_default:0 -msgid "Is default" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,active_supplier:0 -msgid "Is this supplier still active, only for information" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: product_warranty -#: field:product.supplierinfo,warranty_duration:0 -msgid "Period" -msgstr "" - -#. module: product_warranty -#: model:ir.actions.act_window,name:product_warranty.product_return_instructions_action -#: model:ir.ui.menu,name:product_warranty.menu_product_return_instructions_action -msgid "Products Return Instructions" -msgstr "" - -#. module: product_warranty -#: field:product.supplierinfo,warranty_return_other_address:0 -#: field:res.company,crm_return_address_id:0 -msgid "Return address" -msgstr "" - -#. module: product_warranty -#: view:return.instruction:product_warranty.product_return_instructions_form_view -#: view:return.instruction:product_warranty.product_return_instructions_tree_view -msgid "Return instructions" -msgstr "" - -#. module: product_warranty -#: field:product.supplierinfo,warranty_return_partner:0 -msgid "Return type" -msgstr "" - -#. module: product_warranty -#: field:return.instruction,name:0 -msgid "Title" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_duration:0 -msgid "Warranty in month for this product/supplier relation. Only for company/supplier relation (purchase order) ; the customer/company relation (sale order) always use the product main warranty field" -msgstr "" - -#. module: product_warranty -#: view:product.supplierinfo:product_warranty.product_supplierinfo_warranty_form_view -msgid "Warranty informations" -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_other_address:0 -msgid "Where the customer has to send back the product(s) if warranty return is set to 'other'." -msgstr "" - -#. module: product_warranty -#: help:product.supplierinfo,warranty_return_partner:0 -msgid "Who is in charge of the warranty return treatment toward the end customer. Company will use the current compagny delivery or default address and so on for supplier and brand manufacturer. Doesn't necessarly mean that the warranty to be applied is the one of the return partner (ie: can be returned to the company and be under the brand warranty" -msgstr "" From 5668f90d65106d07a059256a6081bc4d59bf6a7a Mon Sep 17 00:00:00 2001 From: osi-scampbell Date: Fri, 4 Jan 2019 15:37:56 -0700 Subject: [PATCH 26/26] [MIG] Migrate product_warranty to 11.0 --- product_warranty/README.rst | 62 +++++-------------- product_warranty/__init__.py | 1 - product_warranty/__manifest__.py | 45 +++++--------- product_warranty/models/__init__.py | 10 +-- .../models/product_supplierinfo.py | 2 - product_warranty/models/product_template.py | 16 +++++ product_warranty/models/res_company.py | 2 - product_warranty/models/return_instruction.py | 2 - product_warranty/readme/CONTRIBUTORS.rst | 10 +++ product_warranty/readme/CREDITS.rst | 10 +++ product_warranty/readme/DESCRIPTION.rst | 6 ++ product_warranty/readme/USAGE.rst | 3 + product_warranty/tests/__init__.py | 23 +------ .../tests/test_product_warranty.py | 1 - product_warranty/views/product_template.xml | 24 +++++++ product_warranty/views/res_company.xml | 2 +- 16 files changed, 111 insertions(+), 108 deletions(-) create mode 100644 product_warranty/models/product_template.py create mode 100644 product_warranty/readme/CONTRIBUTORS.rst create mode 100644 product_warranty/readme/CREDITS.rst create mode 100644 product_warranty/readme/DESCRIPTION.rst create mode 100644 product_warranty/readme/USAGE.rst create mode 100644 product_warranty/views/product_template.xml diff --git a/product_warranty/README.rst b/product_warranty/README.rst index a07914af..21cd7854 100644 --- a/product_warranty/README.rst +++ b/product_warranty/README.rst @@ -1,51 +1,21 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 +**This file is going to be generated by oca-gen-addon-readme.** -Product Warranty -================ +*Manual changes will be overwritten.* -Extends the product warranty management with warranty details on product / -supplier relation: +Please provide content in the ``readme`` directory: -* Supplier warranty duration -* Set default return address for company (if different from standard one) -* Whether to return product to company, supplier, other +* **DESCRIPTION.rst** (required) +* INSTALL.rst (optional) +* CONFIGURE.rst (optional) +* **USAGE.rst** (optional, highly recommended) +* DEVELOP.rst (optional) +* ROADMAP.rst (optional) +* HISTORY.rst (optional, recommended) +* **CONTRIBUTORS.rst** (optional, highly recommended) +* CREDITS.rst (optional) -Usage -===== +Content of this README will also be drawn from the addon manifest, +from keys such as name, authors, maintainers, development_status, +and license. -The new information is not explicitly used by the system until you install -another module that makes use of it, e.g. RMA Claim (Product Return -Management). - -Credits -======= - -Contributors ------------- - -* Emmanuel Samyn -* Paulius Sladkevičius -* Benoît Guillot -* David Beal -* Maxime Chambreuil -* Joël Grand-Guillaume -* Ondřej Kuzník -* Yanina Aular -* Cyril Gaudin -* Bima Jati Wijaya - -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 http://odoo-community.org. +A good, one sentence summary in the manifest is also highly recommended. diff --git a/product_warranty/__init__.py b/product_warranty/__init__.py index 0d135c28..466cdd81 100644 --- a/product_warranty/__init__.py +++ b/product_warranty/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Cyril Gaudin (Camptocamp) # © 2009-2011 Akretion, Emmanuel Samyn # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/product_warranty/__manifest__.py b/product_warranty/__manifest__.py index e2b6badb..563ab9ca 100644 --- a/product_warranty/__manifest__.py +++ b/product_warranty/__manifest__.py @@ -1,44 +1,31 @@ -# -*- coding: utf-8 -*- -######################################################################### -# # -# # -######################################################################### -# # -# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn # -# # -# This program is free software: you can redistribute it and/or modify # -# it under the terms of the GNU 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 General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -######################################################################### +# Copyright (C) 2009-2011 Akretion, Emmanuel Samyn +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Product warranty', - 'version': '10.0.1.0.0', + 'name': 'Product Warranty', + 'version': '11.0.1.0.0', 'category': 'Generic Modules/Product', - 'author': "Akretion,Odoo Community Association (OCA),Vauxoo", - 'website': 'http://akretion.com', + 'author': 'Akretion, Vauxoo, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/rma', 'license': 'AGPL-3', - 'depends': ['product', 'sale'], + 'depends': [ + 'product', + 'sale', + ], 'data': [ 'security/ir.model.access.csv', 'views/res_company.xml', 'views/product_warranty.xml', + 'views/product_template.xml' ], 'demo': [ 'demo/product_warranty.xml', 'demo/res_company.xml', ], - 'test': [], - 'installable': True, - 'active': False, 'images': ['images/product_warranty.png'], + 'development_status': 'Production/Stable', + 'maintainers': [ + 'osi-scampbell', + 'max3903', + ] } diff --git a/product_warranty/models/__init__.py b/product_warranty/models/__init__.py index b29d709f..22635978 100644 --- a/product_warranty/models/__init__.py +++ b/product_warranty/models/__init__.py @@ -1,8 +1,10 @@ -# -*- coding: utf-8 -*- # © 2016 Cyril Gaudin (Camptocamp) # © 2009-2011 Akretion, Emmanuel Samyn # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import return_instruction -from . import product_supplierinfo -from . import res_company +from . import ( + return_instruction, + product_supplierinfo, + res_company, + product_template +) diff --git a/product_warranty/models/product_supplierinfo.py b/product_warranty/models/product_supplierinfo.py index 7bf4c88a..ec8ea4d2 100644 --- a/product_warranty/models/product_supplierinfo.py +++ b/product_warranty/models/product_supplierinfo.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Cyril Gaudin (Camptocamp) # © 2015 Vauxoo # © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot @@ -8,7 +7,6 @@ from odoo import api, fields, models class ProductSupplierInfo(models.Model): - _inherit = "product.supplierinfo" @api.model diff --git a/product_warranty/models/product_template.py b/product_warranty/models/product_template.py new file mode 100644 index 00000000..bc985aa2 --- /dev/null +++ b/product_warranty/models/product_template.py @@ -0,0 +1,16 @@ +# Copyright (C) 2018 - TODAY, Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + warranty = fields.Integer(string='Warranty Duration') + warranty_type = fields.Selection([('day', 'Day(s)'), + ('week', 'Week(s)'), + ('month', 'Month(s)'), + ('year', 'Year(s)')], + string='Warranty Type', + required=True, default='day') diff --git a/product_warranty/models/res_company.py b/product_warranty/models/res_company.py index 30009796..9c917fd0 100644 --- a/product_warranty/models/res_company.py +++ b/product_warranty/models/res_company.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Joel Grand-Guillaume, Cyril Gaudin (Camptocamp) # © 2009-2013 Akretion, Emmanuel Samyn, Raphaël Valyi, Sébastien Beau # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). @@ -7,7 +6,6 @@ from odoo import fields, models class ResCompany(models.Model): - _inherit = "res.company" crm_return_address_id = fields.Many2one( diff --git a/product_warranty/models/return_instruction.py b/product_warranty/models/return_instruction.py index b1798a6e..c0649214 100644 --- a/product_warranty/models/return_instruction.py +++ b/product_warranty/models/return_instruction.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Cyril Gaudin (Camptocamp) # © 2015 Vauxoo # © 2009-2011 Akretion, Emmanuel Samyn, Benoît Guillot @@ -8,7 +7,6 @@ from odoo import fields, models class ReturnInstruction(models.Model): - _name = "return.instruction" _description = "Instructions for product return" diff --git a/product_warranty/readme/CONTRIBUTORS.rst b/product_warranty/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..d810a2eb --- /dev/null +++ b/product_warranty/readme/CONTRIBUTORS.rst @@ -0,0 +1,10 @@ +* Emmanuel Samyn +* Paulius Sladkevičius +* Benoît Guillot +* David Beal +* Maxime Chambreuil +* Joël Grand-Guillaume +* Ondřej Kuzník +* Yanina Aular +* Cyril Gaudin +* Bima Jati Wijaya diff --git a/product_warranty/readme/CREDITS.rst b/product_warranty/readme/CREDITS.rst new file mode 100644 index 00000000..b6f1055f --- /dev/null +++ b/product_warranty/readme/CREDITS.rst @@ -0,0 +1,10 @@ +This module has been financially supported by: + +* Inovera +* Akretion Brazil +* Akretion +* Savoir-faire Linux +* Credativ +* Vauxoo +* Camp 2 Camp +* Open Source Integrators diff --git a/product_warranty/readme/DESCRIPTION.rst b/product_warranty/readme/DESCRIPTION.rst new file mode 100644 index 00000000..da2b8af9 --- /dev/null +++ b/product_warranty/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +Extends the product warranty management with warranty details on product / +supplier relation: + +* Supplier warranty duration +* Set default return address for company (if different from standard one) +* Whether to return product to company, supplier, other diff --git a/product_warranty/readme/USAGE.rst b/product_warranty/readme/USAGE.rst new file mode 100644 index 00000000..af453434 --- /dev/null +++ b/product_warranty/readme/USAGE.rst @@ -0,0 +1,3 @@ +The new information is not explicitly used by the system until you install +another module that makes use of it, e.g. RMA Claim (Product Return +Management). diff --git a/product_warranty/tests/__init__.py b/product_warranty/tests/__init__.py index 07376694..1d0ff0c3 100644 --- a/product_warranty/tests/__init__.py +++ b/product_warranty/tests/__init__.py @@ -1,22 +1,5 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Yanina Aular -# Copyright 2015 Vauxoo -# -# 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 . -# -############################################################################## +# Author: Yanina Aular +# Copyright 2015 Vauxoo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_product_warranty diff --git a/product_warranty/tests/test_product_warranty.py b/product_warranty/tests/test_product_warranty.py index 38a68707..7ddca775 100644 --- a/product_warranty/tests/test_product_warranty.py +++ b/product_warranty/tests/test_product_warranty.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2016 Cyril Gaudin (Camptocamp) # © 2015 Vauxoo, Yanina Aular # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/product_warranty/views/product_template.xml b/product_warranty/views/product_template.xml new file mode 100644 index 00000000..868a7a3c --- /dev/null +++ b/product_warranty/views/product_template.xml @@ -0,0 +1,24 @@ + + + + + product.template + + + + + + + + + + + + + diff --git a/product_warranty/views/res_company.xml b/product_warranty/views/res_company.xml index 51317c05..88c76b06 100644 --- a/product_warranty/views/res_company.xml +++ b/product_warranty/views/res_company.xml @@ -9,7 +9,7 @@ - +