diff --git a/base_partner_sequence/README.rst b/base_partner_sequence/README.rst new file mode 100644 index 000000000..acdb03db3 --- /dev/null +++ b/base_partner_sequence/README.rst @@ -0,0 +1,84 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +===================== +Base Partner Sequence +===================== + +This module adds the possibility to define a sequence for +the partner's reference. This reference is then set as default +when you create a new partner, using the defined sequence. + +The reference field is treated as a commercial field, i.e. it +is managed from the commercial partner and then propagated to +the partner's contacts. The field is visible on the contacts, +but it can only be modified from the commercial partner. + +No references are assigned for contacts such as shipping and +invoice addresses. + +Installation +============ + +There are no special instructions regarding installation. + +Configuration +============= + +No configuration is needed. + +Usage +===== + +To use this module, you need to: + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/10.0 + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Thomas Rehn +* Stefan Rijnhart +* Yannick Vaucher +* Sandy Carter +* Laurent Mignon (ACSONE) +* Guewen Baconnier +* Alexandre Fayolle +* Vicent Cubells +* Akim Juillerat + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/base_partner_sequence/__init__.py b/base_partner_sequence/__init__.py index c6e9f2e38..062d23fcc 100644 --- a/base_partner_sequence/__init__.py +++ b/base_partner_sequence/__init__.py @@ -1,22 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# -*- coding: utf-8 -*- +# Copyright 2004-2009 Tiny SPRL (). +# Copyright 2013 initOS GmbH & Co. KG (). +# Copyright 2016 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import partner +from . import models +from . import tests diff --git a/base_partner_sequence/__manifest__.py b/base_partner_sequence/__manifest__.py index 5eaa43580..39f656ce6 100644 --- a/base_partner_sequence/__manifest__.py +++ b/base_partner_sequence/__manifest__.py @@ -1,54 +1,27 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2013 initOS GmbH & Co. KG (). -# Author Thomas Rehn -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# -*- coding: utf-8 -*- +# Copyright 2004-2009 Tiny SPRL (). +# Copyright 2013 initOS GmbH & Co. KG (). +# Copyright 2016 Tecnativa - Vicent Cubells +# Copyright 2016 Camptocamp - Akim Juillerat (). +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { + "author": "Tiny/initOS GmbH & Co. KG," + "ACSONE SA/NV," + "Tecnativa, " + "Odoo Community Association (OCA), " + "Camptocamp, ", "name": "Add a sequence on customers' code", - "version": "8.0.1.1.0", - "author": "Tiny/initOS GmbH & Co. KG,Odoo Community Association (OCA)", + "version": "10.0.1.0.0", "category": "Generic Modules/Base", "website": "http://www.initos.com", - "depends": ["base"], + "depends": [ + 'base', + ], "summary": "Sets customer's code from a sequence", - "description": """ - This module adds the possibility to define a sequence for - the partner code. This code is then set as default when you - create a new commercial partner, using the defined sequence. - - The reference field is treated as a commercial field, i.e. it - is managed from the commercial partner and then propagated to - the partner's contacts. The field is visible on the contacts, - but it can only be modified from the commercial partner. - - No codes are assigned for contacts such as shipping and - invoice addresses. - This module is a migration of the original base_partner_sequence - addon to OpenERP version 7.0. - """, "data": [ - 'partner_sequence.xml', - 'partner_view.xml', + 'data/partner_sequence.xml', + 'views/partner_view.xml', ], - "demo": [], - "active": False, - 'installable': False + "installable": True, + "license": "AGPL-3", } -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/base_partner_sequence/data/partner_sequence.xml b/base_partner_sequence/data/partner_sequence.xml new file mode 100644 index 000000000..77e3f7674 --- /dev/null +++ b/base_partner_sequence/data/partner_sequence.xml @@ -0,0 +1,9 @@ + + + + Partner code + res.partner + P/ + 5 + + diff --git a/base_partner_sequence/i18n/base_partner_sequence.pot b/base_partner_sequence/i18n/base_partner_sequence.pot deleted file mode 100644 index 769df21c8..000000000 --- a/base_partner_sequence/i18n/base_partner_sequence.pot +++ /dev/null @@ -1,21 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0-20131013-231025\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-13 13:47+0000\n" -"PO-Revision-Date: 2013-11-13 13:47+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: base_partner_sequence -#: model:ir.model,name:base_partner_sequence.model_res_partner -msgid "Partner" -msgstr "" - diff --git a/base_partner_sequence/i18n/fi.po b/base_partner_sequence/i18n/fi.po new file mode 100644 index 000000000..b52155278 --- /dev/null +++ b/base_partner_sequence/i18n/fi.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_partner_sequence +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: partner-contact (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-19 01:46+0000\n" +"PO-Revision-Date: 2015-05-21 21:57+0000\n" +"Last-Translator: <>\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_partner_sequence +#: model:ir.model,name:base_partner_sequence.model_res_partner +msgid "Partner" +msgstr "Kumppani" + +#. module: base_partner_sequence +#: view:res.partner:base_partner_sequence.view_partner_form +msgid "" +"{\n" +" 'readonly': [('is_company', '=', False),\n" +" ('parent_id', '!=', False)]}" +msgstr "" diff --git a/base_partner_sequence/i18n/it.po b/base_partner_sequence/i18n/it.po new file mode 100644 index 000000000..ff5845e1c --- /dev/null +++ b/base_partner_sequence/i18n/it.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_partner_sequence +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: partner-contact (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-27 23:26+0000\n" +"PO-Revision-Date: 2016-03-11 15:30+0000\n" +"Last-Translator: Maxime Chambreuil \n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-partner-contact-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: base_partner_sequence +#: model:ir.model,name:base_partner_sequence.model_res_partner +msgid "Partner" +msgstr "Partner" + +#. module: base_partner_sequence +#: view:res.partner:base_partner_sequence.view_partner_form +msgid "" +"{\n" +" 'readonly': [('is_company', '=', False),\n" +" ('parent_id', '!=', False)]}" +msgstr "" diff --git a/base_partner_sequence/models/__init__.py b/base_partner_sequence/models/__init__.py new file mode 100644 index 000000000..9e8bfde26 --- /dev/null +++ b/base_partner_sequence/models/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# Copyright 2004-2009 Tiny SPRL (). +# Copyright 2013 initOS GmbH & Co. KG (). +# Copyright 2016 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import partner diff --git a/base_partner_sequence/partner.py b/base_partner_sequence/models/partner.py similarity index 55% rename from base_partner_sequence/partner.py rename to base_partner_sequence/models/partner.py index 9f66b41d5..abb5c99e9 100644 --- a/base_partner_sequence/partner.py +++ b/base_partner_sequence/models/partner.py @@ -1,10 +1,11 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # Copyright (C) 2013 initOS GmbH & Co. KG (). # Author Thomas Rehn +# Copyright (C) 2016 Camptocamp SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -21,32 +22,39 @@ # ############################################################################## -from openerp.osv import orm +from odoo import api, models, exceptions, _ -class ResPartner(orm.Model): +class ResPartner(models.Model): """Assigns 'ref' from a sequence on creation and copying""" _inherit = 'res.partner' - def create(self, cr, uid, vals, context=None): - context = context or {} - if not vals.get('ref') and self._needsRef(cr, uid, vals=vals, - context=context): - vals['ref'] = self.pool.get('ir.sequence')\ - .next_by_code(cr, uid, 'res.partner') - return super(ResPartner, self).create(cr, uid, vals, context) + @api.model + def create(self, vals): + if not vals.get('ref') and self._needsRef(vals=vals): + vals['ref'] = self.env['ir.sequence'].next_by_code('res.partner') + return super(ResPartner, self).create(vals) - def copy(self, cr, uid, id, default=None, context=None): + @api.multi + def copy(self, default=None): default = default or {} - if self._needsRef(cr, uid, id=id, context=context): - default['ref'] = self.pool.get('ir.sequence')\ - .next_by_code(cr, uid, 'res.partner', - context=context) - return super(ResPartner, self).copy(cr, uid, id, default, - context=context) + if self._needsRef(): + default['ref'] = self.env['ir.sequence'].\ + next_by_code('res.partner') + return super(ResPartner, self).copy(default) - def _needsRef(self, cr, uid, id=None, vals=None, context=None): + @api.multi + def write(self, vals): + for partner in self: + if not vals.get('ref') and partner._needsRef(vals): + vals['ref'] = self.env['ir.sequence'].\ + next_by_code('res.partner') + super(ResPartner, partner).write(vals) + return True + + @api.multi + def _needsRef(self, vals=None): """ Checks whether a sequence value should be assigned to a partner's 'ref' @@ -57,20 +65,20 @@ class ResPartner(orm.Model): :return: true iff a sequence value should be assigned to the\ partner's 'ref' """ - if not vals and not id: - raise Exception('Either field values or an id must be provided.') + if not vals and not self: # pragma: no cover + raise exceptions.UserError(_( + 'Either field values or an id must be provided.')) # only assign a 'ref' to commercial partners - if id: - vals = self.read(cr, uid, id, ['parent_id', 'is_company'], - context=context) + if self: + vals = {} + vals['is_company'] = self.is_company + vals['parent_id'] = self.parent_id return vals.get('is_company') or not vals.get('parent_id') - def _commercial_fields(self, cr, uid, context=None): + @api.model + def _commercial_fields(self): """ Make the partner reference a field that is propagated to the partner's contacts """ - return super(ResPartner, self)._commercial_fields( - cr, uid, context=context) + ['ref'] - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + return super(ResPartner, self)._commercial_fields() + ['ref'] diff --git a/base_partner_sequence/partner_sequence.xml b/base_partner_sequence/partner_sequence.xml deleted file mode 100644 index 76f3d8bb7..000000000 --- a/base_partner_sequence/partner_sequence.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - # - # Sequences for res.partner - # - - - Partner code - res.partner - - - Partner code - res.partner - P/ - 5 - - - - diff --git a/base_partner_sequence/partner_view.xml b/base_partner_sequence/partner_view.xml deleted file mode 100644 index 00dcb16bb..000000000 --- a/base_partner_sequence/partner_view.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Make partner reference readonly when non-commercial - res.partner - - - - { - 'readonly': [('is_company', '=', False), - ('parent_id', '!=', False)]} - - - - - - - diff --git a/base_partner_sequence/tests/__init__.py b/base_partner_sequence/tests/__init__.py new file mode 100644 index 000000000..675c51b6e --- /dev/null +++ b/base_partner_sequence/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# Copyright 2004-2009 Tiny SPRL (). +# Copyright 2013 initOS GmbH & Co. KG (). +# Copyright 2016 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_base_partner_sequence diff --git a/base_partner_sequence/tests/test_base_partner_sequence.py b/base_partner_sequence/tests/test_base_partner_sequence.py new file mode 100644 index 000000000..32c68f2b1 --- /dev/null +++ b/base_partner_sequence/tests/test_base_partner_sequence.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV (). +# Copyright 2016 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import openerp.tests.common as common + + +class TestBasePartnerSequence(common.TransactionCase): + + def setUp(self): + super(TestBasePartnerSequence, self).setUp() + + self.res_partner = self.env['res.partner'] + self.partner = self.res_partner.create({ + 'name': "test1", + 'email': "test@test.com"}) + + def test_ref_sequence_on_partner(self): + # Test sequence on creating partner and copying it + self.assertTrue(self.partner.ref, "A partner has always a ref.") + + copy = self.partner.copy() + self.assertTrue(copy.ref, "A partner with ref created by copy " + "has a ref by default.") + + def test_ref_sequence_on_contact(self): + # Test if sequence doesn't increase on creating a contact child + contact = self.res_partner.create({ + 'name': "contact1", + 'email': "contact@contact.com", + 'parent_id': self.partner.id}) + self.assertEqual( + self.partner.ref, contact.ref, "All it's ok as sequence doesn't " + "increase.") diff --git a/base_partner_sequence/views/partner_view.xml b/base_partner_sequence/views/partner_view.xml new file mode 100644 index 000000000..f4207a625 --- /dev/null +++ b/base_partner_sequence/views/partner_view.xml @@ -0,0 +1,16 @@ + + + + + Make partner reference readonly when non-commercial + res.partner + + + + {'readonly': [('is_company', '=', False), ('parent_id', '!=', False)]} + + + + + +