From 03bab9c32b2efaf2223c0ac2a08692f679f5c046 Mon Sep 17 00:00:00 2001 From: cubells Date: Mon, 7 Nov 2016 13:16:46 +0100 Subject: [PATCH] [MIG] partner_contact_job_position * Changed icon * Change author and web * Check recursion --- partner_contact_job_position/README.rst | 11 +-- partner_contact_job_position/__init__.py | 7 +- partner_contact_job_position/__openerp__.py | 14 ++-- .../models/__init__.py | 7 +- .../models/res_partner.py | 16 ++-- .../static/description/icon.png | Bin 22620 -> 11128 bytes .../tests/__init__.py | 5 ++ .../tests/test_recursion.py | 30 ++++++++ .../views/res_partner_job_position_view.xml | 68 +++++++++-------- .../views/res_partner_view.xml | 69 +++++++++--------- 10 files changed, 125 insertions(+), 102 deletions(-) create mode 100644 partner_contact_job_position/tests/__init__.py create mode 100644 partner_contact_job_position/tests/test_recursion.py diff --git a/partner_contact_job_position/README.rst b/partner_contact_job_position/README.rst index 00f2706d0..23030a8c5 100644 --- a/partner_contact_job_position/README.rst +++ b/partner_contact_job_position/README.rst @@ -28,7 +28,7 @@ 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/8.0 + :target: https://runbot.odoo-community.org/runbot/134/9.0 Bug Tracker =========== @@ -36,11 +36,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed `feedback -`_. +help us smashing it by providing a detailed and welcomed feedback. Credits ======= @@ -48,7 +44,7 @@ Credits Images ------ -* `Antiun Ingeniería S.L. `_: Icon. +* Odoo Community Association: `Icon `_. Contributors ------------ @@ -57,6 +53,7 @@ Contributors * Antonio Espinosa * Rafael Blasco * Jairo Llopis +* Vicent Cubells Maintainer ---------- diff --git a/partner_contact_job_position/__init__.py b/partner_contact_job_position/__init__.py index 9af8488e4..c99afcca9 100644 --- a/partner_contact_job_position/__init__.py +++ b/partner_contact_job_position/__init__.py @@ -1,9 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa -# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# © 2014-2016 Tecnativa S.L. - Jairo Llopis +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_contact_job_position/__openerp__.py b/partner_contact_job_position/__openerp__.py index 3e4521aad..545896c65 100644 --- a/partner_contact_job_position/__openerp__.py +++ b/partner_contact_job_position/__openerp__.py @@ -1,19 +1,15 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa -# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# © 2014-2016 Tecnativa S.L. - Jairo Llopis +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Partner job position", "summary": "Categorize job positions for contacts", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", 'category': 'Customer Relationship Management', - "website": "http://www.antiun.com", - 'author': 'Serv. Tecnolog. Avanzados - Pedro M. Baeza, ' - 'Antiun Ingeniería S.L., ' + "website": "http://www.tecnativa.com", + 'author': 'Tecnativa, ' "Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, diff --git a/partner_contact_job_position/models/__init__.py b/partner_contact_job_position/models/__init__.py index 213b25fdc..971ccbd2a 100644 --- a/partner_contact_job_position/models/__init__.py +++ b/partner_contact_job_position/models/__init__.py @@ -1,9 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa -# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# © 2014-2016 Tecnativa S.L. - Jairo Llopis +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import res_partner diff --git a/partner_contact_job_position/models/res_partner.py b/partner_contact_job_position/models/res_partner.py index 19522ec01..e19ac2ed7 100644 --- a/partner_contact_job_position/models/res_partner.py +++ b/partner_contact_job_position/models/res_partner.py @@ -1,12 +1,10 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Antonio Espinosa -# © 2015 Antiun Ingeniería S.L. - Jairo Llopis +# © 2014-2016 Tecnativa S.L. - Jairo Llopis +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields +from openerp import models, fields, api, _ +from openerp.exceptions import ValidationError class ResPartner(models.Model): @@ -36,3 +34,9 @@ class ResPartnerJobPosition(models.Model): oldname="children") parent_left = fields.Integer(index=True) parent_right = fields.Integer(index=True) + + @api.constrains('parent_id') + def _check_parent_id(self): + if not self._check_recursion(): + raise ValidationError( + _('Error! You cannot create recursive job positions.')) diff --git a/partner_contact_job_position/static/description/icon.png b/partner_contact_job_position/static/description/icon.png index add81b17a4847ff2663923593ecc364587d3dd9f..7ad56b4636147f5c60e0f5aa80847ab415129a0c 100644 GIT binary patch literal 11128 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 YFmrO?npTvPx6AOJ~3 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%0A{Ckv_A`d0n`sc6nr@&!27fYc51Y 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 P00000NkvXXu0mjfiBcmQ diff --git a/partner_contact_job_position/tests/__init__.py b/partner_contact_job_position/tests/__init__.py new file mode 100644 index 000000000..7630da7d4 --- /dev/null +++ b/partner_contact_job_position/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0). + +from . import test_recursion diff --git a/partner_contact_job_position/tests/test_recursion.py b/partner_contact_job_position/tests/test_recursion.py new file mode 100644 index 000000000..2cebedc2a --- /dev/null +++ b/partner_contact_job_position/tests/test_recursion.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# © 2016 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl-3.0). +from openerp.tests import common +from openerp.exceptions import ValidationError + + +class TestRecursion(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestRecursion, cls).setUpClass() + cls.job_obj = cls.env['res.partner.job_position'] + + # Instances + cls.grand_parent = cls.job_obj.create(vals=dict(name='Grand parent')) + cls.parent = cls.job_obj.create(vals=dict( + name='Parent', + parent_id=cls.grand_parent.id + )) + + def test_recursion(self): + """ Testing recursion """ + self.child = self.job_obj.create(vals=dict( + name='Grand parent', + parent_id=self.parent.id + )) + # Creating a parent's child using grand-parent + with self.assertRaises(ValidationError): + self.grand_parent.write(vals={'parent_id': self.child.id}) diff --git a/partner_contact_job_position/views/res_partner_job_position_view.xml b/partner_contact_job_position/views/res_partner_job_position_view.xml index e70b45a91..1c2144826 100644 --- a/partner_contact_job_position/views/res_partner_job_position_view.xml +++ b/partner_contact_job_position/views/res_partner_job_position_view.xml @@ -1,42 +1,40 @@ - - + - - Job Positions - res.partner.job_position - form - tree - + + Job Positions + res.partner.job_position + form + tree + - - Job position tree - res.partner.job_position - - - - - - - - - - Job position form - res.partner.job_position - -
- + + Job position tree + res.partner.job_position + + - - -
-
-
+ + + + + + Job position form + res.partner.job_position + +
+ + + + + +
+
+
- + -
-
+ diff --git a/partner_contact_job_position/views/res_partner_view.xml b/partner_contact_job_position/views/res_partner_view.xml index f1a2a0e45..18dc6e3fd 100644 --- a/partner_contact_job_position/views/res_partner_view.xml +++ b/partner_contact_job_position/views/res_partner_view.xml @@ -1,41 +1,40 @@ - - + - - Partner form with job position - res.partner - - - - + + Partner form with job position + res.partner + + + + + + + + - - - - - + - - Partner search with job position - res.partner - - - - + + Partner search with job position + res.partner + + + + + + + + - - - - - + - - +