From 991e5bc39af1a9f1453ed939151c13c2a6f2491f Mon Sep 17 00:00:00 2001 From: eloyoussef Date: Fri, 23 Mar 2018 17:31:04 +0100 Subject: [PATCH] Ajout du fonctionnement pour contact --- golem_precreation_member/__manifest__.py | 1 + golem_precreation_member/models/__init__.py | 2 +- .../models/golem_member.py | 13 +- .../models/res_partner.py | 53 ++++++ golem_precreation_member/tests/__init__.py | 18 -- .../tests/test_golem_member.py | 180 ------------------ .../views/golem_member_views.xml | 1 - .../views/partner_views.xml | 36 ++++ ...golem_precreation_member_request_wizard.py | 18 +- ...recreation_member_request_wizard_views.xml | 8 +- .../golem_precreation_member_result_wizard.py | 2 +- ...precreation_member_result_wizard_views.xml | 40 ++-- 12 files changed, 138 insertions(+), 234 deletions(-) create mode 100644 golem_precreation_member/models/res_partner.py delete mode 100644 golem_precreation_member/tests/__init__.py delete mode 100644 golem_precreation_member/tests/test_golem_member.py create mode 100644 golem_precreation_member/views/partner_views.xml diff --git a/golem_precreation_member/__manifest__.py b/golem_precreation_member/__manifest__.py index 140181c..19944c7 100644 --- a/golem_precreation_member/__manifest__.py +++ b/golem_precreation_member/__manifest__.py @@ -27,6 +27,7 @@ 'installable': True, 'depends': ['golem_member', 'golem_family'], 'data': ['views/golem_member_views.xml', + 'views/partner_views.xml', 'wizard/golem_precreation_member_request_wizard_views.xml', 'wizard/golem_precreation_member_result_wizard_views.xml'] } diff --git a/golem_precreation_member/models/__init__.py b/golem_precreation_member/models/__init__.py index d74b40a..008167b 100644 --- a/golem_precreation_member/models/__init__.py +++ b/golem_precreation_member/models/__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 golem_member +from . import golem_member, res_partner diff --git a/golem_precreation_member/models/golem_member.py b/golem_precreation_member/models/golem_member.py index 20347b1..872320e 100644 --- a/golem_precreation_member/models/golem_member.py +++ b/golem_precreation_member/models/golem_member.py @@ -31,11 +31,14 @@ class GolemMember(models.Model): def precreation_search(self): """ Precreation member search """ self.ensure_one() - return {'name' : _('Please enter member searched'), - 'type' : 'ir.actions.act_window', - 'res_model' : 'golem.precreation.member.request.wizard', - 'view_mode': 'form', - 'target': 'new'} + return { + 'name' : _('Please enter member searched'), + 'type' : 'ir.actions.act_window', + 'res_model' : 'golem.precreation.member.request.wizard', + 'context' : {'default_is_member' : True}, + 'view_mode': 'form', + 'target': 'new' + } @api.multi def open_line(self): """ open member form """ diff --git a/golem_precreation_member/models/res_partner.py b/golem_precreation_member/models/res_partner.py new file mode 100644 index 0000000..22f4cb9 --- /dev/null +++ b/golem_precreation_member/models/res_partner.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +# Copyright 2018 Youssef El Ouahby +# Copyright 2018 Fabien Bourgeois +# +# 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 . + +""" GOLEM Contact """ + + +from odoo import models, api, _ + + +class GolemMember(models.Model): + """ Res Partner extention """ + _inherit = 'res.partner' + + @api.multi + def precreation_search(self): + """ Precreation contact search """ + self.ensure_one() + return { + 'name' : _('Please enter contact searched'), + 'type' : 'ir.actions.act_window', + 'res_model' : 'golem.precreation.member.request.wizard', + 'view_mode': 'form', + 'target': 'new' + } + @api.multi + def open_line(self): + """ open contact form """ + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'name': 'Member', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': self._name, + 'res_id': self.id, + 'flags': {'initial_mode': 'edit'}, + 'target': 'current', + } diff --git a/golem_precreation_member/tests/__init__.py b/golem_precreation_member/tests/__init__.py deleted file mode 100644 index 0f44c19..0000000 --- a/golem_precreation_member/tests/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2016 Fabien Bourgeois -# -# 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_golem_member diff --git a/golem_precreation_member/tests/test_golem_member.py b/golem_precreation_member/tests/test_golem_member.py deleted file mode 100644 index d58cb81..0000000 --- a/golem_precreation_member/tests/test_golem_member.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2017 Fabien Bourgeois -# -# 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 . - -""" GOLEM member testing """ - -from odoo import exceptions -from odoo.tests.common import TransactionCase -# from psycopg2 import IntegrityError - - -class GolemMemberTestCase(TransactionCase): - """ GOLEM member testing """ - - def setUp(self, *args, **kwargs): - """ Bootstrap season and members """ - super(GolemMemberTestCase, self).setUp(*args, **kwargs) - self.member_numberconfig_model = self.env['golem.member.numberconfig'] - season_mdl = self.env['golem.season'].sudo() - self.season_current = season_mdl.create({'name': u'Current'}) - self.season_current.do_default_season() - self.season_next = season_mdl.create({'name': u'Next'}) - self.member_model = self.env['golem.member'].sudo() - mcrt = self.member_model.create - self.member1 = mcrt({'lastname': u'LAST', 'firstname': u'First'}) - self.member2 = mcrt({'lastname': u'LAST', 'firstname': u'Young', - 'birthdate_date': '2016-01-01'}) - - def test_member_creation_noname(self): - """ Test creation of member without needed parameters """ - with self.assertRaises(exceptions.ValidationError) as exc_cm: - self.member_model.create({}) - self.assertIn('Error(s) with partner', exc_cm.exception.args[0]) - self.assertEqual('No name is set.', exc_cm.exception.args[1]) - - def test_current_season(self): - """ Test if default season if fixed according to setUp and if users - are correctly seen """ - self.assertEqual(self.member_model._default_season(), - self.season_current) - self.assertTrue(self.member1.is_current) - self.assertTrue(self.member2.is_current) - self.season_next.do_default_season() - self.assertFalse(self.member1.is_current) - self.assertFalse(self.member2.is_current) - - def test_member_numbers_manual(self): - """ Tests manual member number generation """ - conf = self.member_numberconfig_model.create({'is_automatic': '0'}) - conf.apply_recompute() - self.assertFalse(self.member1.number) - self.member1.number_manual = u'M01' - self.assertEqual(self.member1.number_manual, self.member1.number) - # **Can not test IntegrityError without Odoo ERROR...** - # with self.assertRaises(IntegrityError) as cm: - # self.member2.number_manual = u'M01' - # self.assertIn('duplicate key value violates unique constraint', - # cm.exception.args[0]) - - def test_member_numbers_auto_season(self): - """ Tests per season automatic member number generation + prefix """ - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '1', - 'prefix': u'M'}) - conf.apply_recompute() - self.assertEqual(self.member1.number, u'M1') - self.assertEqual(self.member2.number, u'M2') - - self.member2.season_ids += self.season_next - self.assertEqual(self.member2.number, u'M2') - self.season_next.do_default_season() - self.assertTrue(self.member2.is_current) - self.assertEqual(self.member2.number, u'M1') - self.assertFalse(self.member1.is_current) - self.assertFalse(self.member1.number) - - def test_mnumbers_auto_season_from(self): - """ Tests per season automatic member number + number_from """ - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '1', - 'prefix': False, - 'number_from': 100}) - conf.apply_recompute() - self.assertEqual(self.member1.number, u'100') - self.assertEqual(self.member2.number, u'101') - - self.member2.season_ids += self.season_next - self.assertEqual(self.member2.number, u'101') - self.season_next.do_default_season() - self.assertTrue(self.member2.is_current) - self.assertEqual(self.member2.number, u'100') - self.assertFalse(self.member1.is_current) - self.assertFalse(self.member1.number) - - def test_member_numbers_auto_global(self): - """ Tests global automatic member number generation """ - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '0'}) - conf.apply_recompute() - self.assertEqual(self.member1.number, u'1') - self.assertEqual(self.member2.number, u'2') - new_m = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Buddy', - 'season_ids': [self.season_next]}) - self.assertEqual(new_m.number, u'3') - - def test_mnumbers_auto_global_from(self): - """ Tests global automatic member number generation + number_from """ - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '0', - 'number_from': 50}) - conf.apply_recompute() - self.assertEqual(self.member1.number, u'50') - self.assertEqual(self.member2.number, u'51') - new_m = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Buddy', - 'season_ids': [self.season_next]}) - self.assertEqual(new_m.number, u'52') - - def test_mnumbers_manual_to_auto(self): - """ Tests generation change withtout whole recompute """ - conf = self.member_numberconfig_model.create({'is_automatic': '0'}) - conf.apply_recompute() - self.assertFalse(self.member1.number) - self.member1.number_manual = u'M01' - self.assertEqual(self.member1.number_manual, self.member1.number) - - # Without number_from - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '0', - 'prefix': False}) - conf.apply_nocompute() - self.assertEqual(self.member1.number, u'M01') - new_m = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Dewie', - 'season_ids': [self.season_current]}) - new_m2 = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Dowa', - 'season_ids': [self.season_current]}) - self.assertEqual(new_m.number, u'1') - self.assertEqual(new_m2.number, u'2') - - # With number_from - conf = self.member_numberconfig_model.create({'is_automatic': '1', - 'is_per_season': '0', - 'prefix': False, - 'number_from': 50}) - conf.apply_nocompute() - self.assertEqual(self.member1.number, u'M01') - new_m = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Buddy', - 'season_ids': [self.season_current]}) - new_m2 = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Bobby', - 'season_ids': [self.season_current]}) - self.assertEqual(new_m.number, u'50') - self.assertEqual(new_m2.number, u'51') - # After season changing - self.season_next.do_default_season() - self.assertEqual(self.member1.number, u'M01') - self.assertEqual(new_m.number, u'50') - self.member1.season_ids += self.season_next - self.assertEqual(self.member1.number, u'M01') - new_m3 = self.member_model.create({'lastname': 'NEW', - 'firstname': 'Barny', - 'season_ids': [self.season_current]}) - self.assertEqual(new_m3.number, u'52') diff --git a/golem_precreation_member/views/golem_member_views.xml b/golem_precreation_member/views/golem_member_views.xml index 92c560e..ce3b6e3 100644 --- a/golem_precreation_member/views/golem_member_views.xml +++ b/golem_precreation_member/views/golem_member_views.xml @@ -32,6 +32,5 @@ along with this program. If not, see . - diff --git a/golem_precreation_member/views/partner_views.xml b/golem_precreation_member/views/partner_views.xml new file mode 100644 index 0000000..cdf1032 --- /dev/null +++ b/golem_precreation_member/views/partner_views.xml @@ -0,0 +1,36 @@ + + + + + + + + Res Partner Precreation extention Form + res.partner + + + +
+
+
+
+
+
+
diff --git a/golem_precreation_member/wizard/golem_precreation_member_request_wizard.py b/golem_precreation_member/wizard/golem_precreation_member_request_wizard.py index dc5a31a..8fd1509 100644 --- a/golem_precreation_member/wizard/golem_precreation_member_request_wizard.py +++ b/golem_precreation_member/wizard/golem_precreation_member_request_wizard.py @@ -24,23 +24,33 @@ class GolemPrecreationMemberRequestWizard(models.TransientModel): _name = "golem.precreation.member.request.wizard" name = fields.Char() + is_member = fields.Boolean() @api.multi def search_members(self): """ Search members """ self.ensure_one() + model = self._context.get('model') domain = ['|', ('name', 'ilike', self.name), ('email', 'ilike', self.name)] - members = self.env['golem.member'].search(domain) - + members = self.env[model].search(domain) + ids = [] if members: ids = members.mapped('id') + title = "" + context = {} + if self.is_member: + title = 'Member search result "{}"'.format(self.name) + context = {'default_member_ids': ids} + else: + title = 'Contact search result "{}"'.format(self.name) + context = {'default_contact_ids': ids} - return {'name' : ('Member search result "{}"'.format(self.name)), + return {'name' : (title), 'type' : 'ir.actions.act_window', 'res_model' : 'golem.precreation.member.result.wizard', - 'context': {'default_member_ids': ids}, + 'context': context, 'view_mode': 'form', 'flags': {'initial_mode': 'view'}, 'target': 'new'} diff --git a/golem_precreation_member/wizard/golem_precreation_member_request_wizard_views.xml b/golem_precreation_member/wizard/golem_precreation_member_request_wizard_views.xml index 3ded94e..0cadcd7 100644 --- a/golem_precreation_member/wizard/golem_precreation_member_request_wizard_views.xml +++ b/golem_precreation_member/wizard/golem_precreation_member_request_wizard_views.xml @@ -25,9 +25,15 @@ along with this program. If not, see .
+
-
diff --git a/golem_precreation_member/wizard/golem_precreation_member_result_wizard.py b/golem_precreation_member/wizard/golem_precreation_member_result_wizard.py index 5365377..91af60f 100644 --- a/golem_precreation_member/wizard/golem_precreation_member_result_wizard.py +++ b/golem_precreation_member/wizard/golem_precreation_member_result_wizard.py @@ -24,4 +24,4 @@ class GolemPrecreationMemberResultWizard(models.TransientModel): _name = "golem.precreation.member.result.wizard" member_ids = fields.Many2many('golem.member') - name_searched = fields.Char(default="test") + contact_ids = fields.Many2many('res.partner') diff --git a/golem_precreation_member/wizard/golem_precreation_member_result_wizard_views.xml b/golem_precreation_member/wizard/golem_precreation_member_result_wizard_views.xml index dc110db..c1e7795 100644 --- a/golem_precreation_member/wizard/golem_precreation_member_result_wizard_views.xml +++ b/golem_precreation_member/wizard/golem_precreation_member_result_wizard_views.xml @@ -18,44 +18,38 @@ along with this program. If not, see . --> - - Golem Precreation Member result Wizard Form golem.precreation.member.result.wizard
- -