From c8d9dbe5f08b3deae3d0f3aab66903d7609a64f7 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 7 Sep 2015 13:56:10 +0200 Subject: [PATCH 1/7] Fix bug #154. --- partner_firstname/__openerp__.py | 4 +-- partner_firstname/models.py | 3 +- partner_firstname/tests/__init__.py | 2 +- partner_firstname/tests/test_delete.py | 39 ++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 partner_firstname/tests/test_delete.py diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index 264b3066e..601aad89c 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -21,8 +21,8 @@ { 'name': 'Partner first name and last name', 'summary': "Split first name and last name for non company partners", - 'version': '8.0.2.0.0', - 'author': "Camptocamp, Odoo Community Association (OCA)", + 'version': '8.0.2.1.0', + 'author': "Camptocamp,Odoo Community Association (OCA)", "license": "AGPL-3", 'maintainer': 'Camptocamp, Acsone', 'category': 'Extra Tools', diff --git a/partner_firstname/models.py b/partner_firstname/models.py index 48342b20d..fa1f1af75 100644 --- a/partner_firstname/models.py +++ b/partner_firstname/models.py @@ -79,7 +79,8 @@ class ResPartner(models.Model): @api.depends("firstname", "lastname") def _compute_name(self): """Write the 'name' field according to splitted data.""" - self.name = self._get_computed_name(self.lastname, self.firstname) + if self.exists(): + self.name = self._get_computed_name(self.lastname, self.firstname) @api.one def _inverse_name_after_cleaning_whitespace(self): diff --git a/partner_firstname/tests/__init__.py b/partner_firstname/tests/__init__.py index 239670f65..ddba87365 100644 --- a/partner_firstname/tests/__init__.py +++ b/partner_firstname/tests/__init__.py @@ -28,4 +28,4 @@ # ############################################################################## -from . import test_defaults, test_empty, test_name, test_onchange +from . import test_defaults, test_delete, test_empty, test_name, test_onchange diff --git a/partner_firstname/tests/test_delete.py b/partner_firstname/tests/test_delete.py new file mode 100644 index 000000000..e31a3f44f --- /dev/null +++ b/partner_firstname/tests/test_delete.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests.common import TransactionCase +from .base import MailInstalled +from .. import exceptions as ex + + +class CompanyCase(TransactionCase): + model = "res.partner" + context = {"default_is_company": True} + + def test_computing_after_unlink(self): + """Test what happens if recomputed after unlinking. + + This test might seem useless, but really this happens when module + ``partner_relations`` is installed. + + See https://github.com/OCA/partner-contact/issues/154. + """ + data = {"name": u"Söme name"} + record = self.env[self.model].with_context(**self.context).create(data) + record.unlink() + record.recompute() + + +class PersonCase(CompanyCase): + context = {"default_is_company": False} + + +class UserCase(CompanyCase, MailInstalled): + model = "res.users" + context = {"default_login": "user@example.com"} + + def test_computing_after_unlink(self): + # Cannot create users if ``mail`` is installed + if not self.mail_installed(): + super(UserCase, self).test_computing_after_unlink() From f2ba28e9808fbf61f1a14f29360feb1cbe71492f Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Tue, 8 Sep 2015 13:22:14 +0200 Subject: [PATCH 2/7] Fix and test partner_contact_birthdate too. Fix flake8 error too. --- partner_contact_birthdate/models.py | 3 ++- partner_contact_birthdate/tests/__init__.py | 2 +- .../tests/test_delete.py | 27 +++++++++++++++++++ partner_firstname/__openerp__.py | 7 ++--- partner_firstname/tests/test_delete.py | 1 - 5 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 partner_contact_birthdate/tests/test_delete.py diff --git a/partner_contact_birthdate/models.py b/partner_contact_birthdate/models.py index 2686fed6d..f69205d06 100644 --- a/partner_contact_birthdate/models.py +++ b/partner_contact_birthdate/models.py @@ -40,7 +40,8 @@ class Partner(models.Model): @api.depends("birthdate_date") def _birthdate_compute(self): """Store a string of the new date in the old field.""" - self.birthdate = self.birthdate_date + if self.exists(): + self.birthdate = self.birthdate_date @api.one def _birthdate_inverse(self): diff --git a/partner_contact_birthdate/tests/__init__.py b/partner_contact_birthdate/tests/__init__.py index 73d8cb813..b3374a537 100644 --- a/partner_contact_birthdate/tests/__init__.py +++ b/partner_contact_birthdate/tests/__init__.py @@ -16,4 +16,4 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from . import test_birthdate +from . import test_birthdate, test_delete diff --git a/partner_contact_birthdate/tests/test_delete.py b/partner_contact_birthdate/tests/test_delete.py new file mode 100644 index 000000000..d3d4666d8 --- /dev/null +++ b/partner_contact_birthdate/tests/test_delete.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# © 2015 Grupo ESOC +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests.common import TransactionCase + + +class CompanyCase(TransactionCase): + model = "res.partner" + context = {"default_is_company": True} + + def test_computing_after_unlink(self): + """Test what happens if recomputed after unlinking. + + This test might seem useless, but really this happens when module + ``partner_relations`` is installed. + + See https://github.com/OCA/partner-contact/issues/154. + """ + data = {"name": u"Söme name", "birthdate": "2015-09-28"} + record = self.env[self.model].with_context(**self.context).create(data) + record.unlink() + record.recompute() + + +class PersonCase(CompanyCase): + context = {"default_is_company": False} diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index 601aad89c..c4df5c3db 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -21,12 +21,13 @@ { 'name': 'Partner first name and last name', 'summary': "Split first name and last name for non company partners", - 'version': '8.0.2.1.0', - 'author': "Camptocamp,Odoo Community Association (OCA)", + 'version': '8.0.2.1.1', + 'author': "Camptocamp, Grupo ESOC, Odoo Community Association (OCA)", "license": "AGPL-3", 'maintainer': 'Camptocamp, Acsone', 'category': 'Extra Tools', - 'website': 'http://www.camptocamp.com, http://www.acsone.eu', + 'website': + 'http://www.camptocamp.com, http://www.acsone.eu, http://grupoesoc.es', 'depends': ['base'], 'data': [ 'views/res_partner.xml', diff --git a/partner_firstname/tests/test_delete.py b/partner_firstname/tests/test_delete.py index e31a3f44f..0729502f1 100644 --- a/partner_firstname/tests/test_delete.py +++ b/partner_firstname/tests/test_delete.py @@ -4,7 +4,6 @@ from openerp.tests.common import TransactionCase from .base import MailInstalled -from .. import exceptions as ex class CompanyCase(TransactionCase): From 0b13c132870618e89b098332bb8d68f74b78f161 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Wed, 9 Sep 2015 10:24:18 +0200 Subject: [PATCH 3/7] After all, this was just a workaround. Remove it. The real fix was in #171. I leave the tests. --- partner_contact_birthdate/models.py | 3 +-- partner_firstname/__openerp__.py | 2 +- partner_firstname/models.py | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/partner_contact_birthdate/models.py b/partner_contact_birthdate/models.py index f69205d06..2686fed6d 100644 --- a/partner_contact_birthdate/models.py +++ b/partner_contact_birthdate/models.py @@ -40,8 +40,7 @@ class Partner(models.Model): @api.depends("birthdate_date") def _birthdate_compute(self): """Store a string of the new date in the old field.""" - if self.exists(): - self.birthdate = self.birthdate_date + self.birthdate = self.birthdate_date @api.one def _birthdate_inverse(self): diff --git a/partner_firstname/__openerp__.py b/partner_firstname/__openerp__.py index c4df5c3db..9fb02c998 100644 --- a/partner_firstname/__openerp__.py +++ b/partner_firstname/__openerp__.py @@ -21,7 +21,7 @@ { 'name': 'Partner first name and last name', 'summary': "Split first name and last name for non company partners", - 'version': '8.0.2.1.1', + 'version': '8.0.2.1.0', 'author': "Camptocamp, Grupo ESOC, Odoo Community Association (OCA)", "license": "AGPL-3", 'maintainer': 'Camptocamp, Acsone', diff --git a/partner_firstname/models.py b/partner_firstname/models.py index fa1f1af75..48342b20d 100644 --- a/partner_firstname/models.py +++ b/partner_firstname/models.py @@ -79,8 +79,7 @@ class ResPartner(models.Model): @api.depends("firstname", "lastname") def _compute_name(self): """Write the 'name' field according to splitted data.""" - if self.exists(): - self.name = self._get_computed_name(self.lastname, self.firstname) + self.name = self._get_computed_name(self.lastname, self.firstname) @api.one def _inverse_name_after_cleaning_whitespace(self): From 995ab2cc1ad477d6e865dfc24cd07d2c7d7cda9a Mon Sep 17 00:00:00 2001 From: eLBati Date: Wed, 11 Nov 2015 22:28:45 +0100 Subject: [PATCH 4/7] FIX when partner_contact_birthdate and partner_relations are installaed together, get AccessError: ('AccessError', 'No value found for res.partner(43,).birthdate_date') See https://github.com/OCA/partner-contact/issues/154 --- partner_relations/model/res_partner.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/partner_relations/model/res_partner.py b/partner_relations/model/res_partner.py index 1e9706edf..f921baafb 100644 --- a/partner_relations/model/res_partner.py +++ b/partner_relations/model/res_partner.py @@ -298,12 +298,11 @@ class ResPartner(models.Model): cr, uid, args + date_args + active_args, offset=offset, limit=limit, order=order, context=context, count=count) - def read( - self, cr, uid, ids, fields=None, context=None, - load='_classic_read'): - return super(ResPartner, self).read( - cr, uid, ids, fields=fields, - context=self._update_context(context, ids), load=load) + @api.multi + def read(self, fields=None, load='_classic_read'): + self.env.context = self._update_context( + self.env.context, [r.id for r in self]) + return super(ResPartner, self).read(fields=fields, load=load) def write(self, cr, uid, ids, vals, context=None): return super(ResPartner, self).write( From 1c42befe870df1b67247a8be489a9c5a158a1800 Mon Sep 17 00:00:00 2001 From: eLBati Date: Thu, 12 Nov 2015 09:03:40 +0100 Subject: [PATCH 5/7] FIX metadata --- partner_relations/__openerp__.py | 11 +---------- .../model/res_partner_relation_type_selection.py | 2 +- partner_relations/tests/test_partner_relations.py | 1 + 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/partner_relations/__openerp__.py b/partner_relations/__openerp__.py index 3dbaf0858..5e502e6f4 100644 --- a/partner_relations/__openerp__.py +++ b/partner_relations/__openerp__.py @@ -24,6 +24,7 @@ "author": "Therp BV,Camptocamp,Odoo Community Association (OCA)", "complexity": "normal", "category": "Customer Relationship Management", + "license": "AGPL-3", "depends": [ 'base', ], @@ -32,7 +33,6 @@ ], "test": [ "test/test_allow.yml", - # "test/test_disallow.yml", ], "data": [ "view/res_partner_relation_all.xml", @@ -42,15 +42,6 @@ 'view/menu.xml', 'security/ir.model.access.csv', ], - "js": [ - ], - "css": [ - ], - "qweb": [ - ], "auto_install": False, "installable": True, - "external_dependencies": { - 'python': [], - }, } diff --git a/partner_relations/model/res_partner_relation_type_selection.py b/partner_relations/model/res_partner_relation_type_selection.py index e8f8f0a48..5a689c0bc 100644 --- a/partner_relations/model/res_partner_relation_type_selection.py +++ b/partner_relations/model/res_partner_relation_type_selection.py @@ -1,4 +1,4 @@ -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- ''' Created on 23 may 2014 diff --git a/partner_relations/tests/test_partner_relations.py b/partner_relations/tests/test_partner_relations.py index 37414c84f..6d471fc02 100644 --- a/partner_relations/tests/test_partner_relations.py +++ b/partner_relations/tests/test_partner_relations.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Author: Charbel Jacquin # Copyright 2015 Camptocamp SA # From 356115bf09b86b46bd9f4e034e4fd979e8c47a86 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Nov 2015 12:28:47 +0100 Subject: [PATCH 6/7] [RFR] use v8 api for context adjustments --- partner_relations/model/res_partner.py | 31 +++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/partner_relations/model/res_partner.py b/partner_relations/model/res_partner.py index f921baafb..dc1e5364a 100644 --- a/partner_relations/model/res_partner.py +++ b/partner_relations/model/res_partner.py @@ -78,7 +78,8 @@ class ResPartner(models.Model): if context is None: context = {} relation_obj = self.pool.get('res.partner.relation') - context2 = self._update_context(context, ids) + context2 = self.with_partner_relations_context( + cr, uid, ids, context=context).env.context for value in field_value: if value[0] == 0: relation_obj.create(cr, uid, value[2], context=context2) @@ -300,20 +301,18 @@ class ResPartner(models.Model): @api.multi def read(self, fields=None, load='_classic_read'): - self.env.context = self._update_context( - self.env.context, [r.id for r in self]) - return super(ResPartner, self).read(fields=fields, load=load) + return super(ResPartner, self.with_partner_relations_context())\ + .read(fields=fields, load=load) - def write(self, cr, uid, ids, vals, context=None): - return super(ResPartner, self).write( - cr, uid, ids, vals, context=self._update_context(context, ids)) + @api.multi + def write(self, vals): + return super(ResPartner, self.with_partner_relations_context())\ + .write(vals) - def _update_context(self, context, ids): - if context is None: - context = {} - ids = ids if isinstance(ids, list) else [ids] if ids else [] - result = context.copy() - result.setdefault('active_id', ids[0] if ids else None) - result.setdefault('active_ids', ids) - result.setdefault('active_model', self._name) - return result + @api.multi + def with_partner_relations_context(self): + context = dict(self.env.context) + context.setdefault('active_id', self.ids[0] if self.ids else None) + context.setdefault('active_ids', self.ids) + context.setdefault('active_model', self._name) + return self.with_context(context) From 5ecaa71cac83d7f15018e1338b66673fad5fb956 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Nov 2015 12:55:06 +0100 Subject: [PATCH 7/7] [FIX] set active_ids only to existing records --- partner_relations/model/res_partner.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/partner_relations/model/res_partner.py b/partner_relations/model/res_partner.py index dc1e5364a..0eb8634c4 100644 --- a/partner_relations/model/res_partner.py +++ b/partner_relations/model/res_partner.py @@ -312,7 +312,10 @@ class ResPartner(models.Model): @api.multi def with_partner_relations_context(self): context = dict(self.env.context) - context.setdefault('active_id', self.ids[0] if self.ids else None) - context.setdefault('active_ids', self.ids) - context.setdefault('active_model', self._name) + if context.get('active_model', self._name) == self._name: + existing = self.exists() + context.setdefault( + 'active_id', existing.ids[0] if existing.ids else None) + context.setdefault('active_ids', existing.ids) + context.setdefault('active_model', self._name) return self.with_context(context)