From 353a920ee0ee816f81d03aef18e8977e14b07872 Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 23 Oct 2018 13:20:53 +0100 Subject: [PATCH 1/9] Adding not_disclosed to gender's options --- golem_member/models/golem_member.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/golem_member/models/golem_member.py b/golem_member/models/golem_member.py index 970b4ff..e7d69d3 100644 --- a/golem_member/models/golem_member.py +++ b/golem_member/models/golem_member.py @@ -99,8 +99,11 @@ class ResPartner(models.Model): area_from_street = fields.Boolean(store=False, default=False) country_id = fields.Many2one(default=_get_default_nationality_id) - # Gender overwriting : no need for 'other' choice - gender = fields.Selection([('male', _('Male')), ('female', _('Female'))]) + # Gender overwriting + gender = fields.Selection([('male', _('Male')), + ('female', _('Female')), + ('not_disclosed', _('Not Disclosed'))], + default='not_disclosed') member_id = fields.One2many('golem.member', 'partner_id', 'Service user', readonly=True) From 41c733922174fe63cc9f5992542b2c3ef08caa02 Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 23 Oct 2018 16:25:39 +0100 Subject: [PATCH 2/9] Edit __manifest__ --- golem_activity/__manifest__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/golem_activity/__manifest__.py b/golem_activity/__manifest__.py index 1054b16..18b54af 100644 --- a/golem_activity/__manifest__.py +++ b/golem_activity/__manifest__.py @@ -29,5 +29,6 @@ 'data': ['security/ir.model.access.csv', 'data/golem_activity_data.xml', 'views/golem_activity_views.xml', - 'report/golem_activity_report_templates.xml'] + 'report/golem_activity_report_templates.xml', + 'views/res_partner_views.xml'] } From 9deb04a19640c259b5f38b343e4c7688cfe45f17 Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 23 Oct 2018 16:27:35 +0100 Subject: [PATCH 3/9] Add is_animator filter to search view --- golem_activity/views/res_partner_views.xml | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 golem_activity/views/res_partner_views.xml diff --git a/golem_activity/views/res_partner_views.xml b/golem_activity/views/res_partner_views.xml new file mode 100644 index 0000000..67eb706 --- /dev/null +++ b/golem_activity/views/res_partner_views.xml @@ -0,0 +1,37 @@ + + + + + + + + + Partner GOLEM Activity improvement + res.partner + + + + + + + + + + + From b9639ebef629f9f518dfe461eb329340b84e1355 Mon Sep 17 00:00:00 2001 From: youssef Date: Tue, 23 Oct 2018 16:28:03 +0100 Subject: [PATCH 4/9] Enable is_animator Boolean in contact --- golem_activity/models/golem_activity.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/golem_activity/models/golem_activity.py b/golem_activity/models/golem_activity.py index 387a608..355e8b3 100644 --- a/golem_activity/models/golem_activity.py +++ b/golem_activity/models/golem_activity.py @@ -136,6 +136,13 @@ class GolemActivity(models.Model): date_start = fields.Date('Start date', copy=False) date_stop = fields.Date('End date', copy=False) + @api.constrains('animator_id') + def save_animator_id(self): + """ Enabling is_animator flag """ + for activity in self: + activity.animator_id.is_animator = True + + @api.onchange('date_start') def _onchange_date_start(self): """ Sets end date to start date if no start date """ @@ -221,3 +228,9 @@ class ProductCategory(models.Model): property_account_income_categ_id = fields.Many2one(required=True) property_account_expense_categ_id = fields.Many2one(required=True) + +class ResPartner(models.Model): + """ GOLEM Member partner adaptations """ + _inherit = 'res.partner' + + is_animator = fields.Boolean() From a8807a97982451197a5586f72e3cfe5330307a7c Mon Sep 17 00:00:00 2001 From: youssef Date: Fri, 26 Oct 2018 08:56:58 +0100 Subject: [PATCH 5/9] Add filter and group_by activity for animator --- golem_activity/models/golem_activity.py | 8 ++++---- golem_activity/views/res_partner_views.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/golem_activity/models/golem_activity.py b/golem_activity/models/golem_activity.py index 355e8b3..e00fcd3 100644 --- a/golem_activity/models/golem_activity.py +++ b/golem_activity/models/golem_activity.py @@ -137,10 +137,10 @@ class GolemActivity(models.Model): date_stop = fields.Date('End date', copy=False) @api.constrains('animator_id') - def save_animator_id(self): - """ Enabling is_animator flag """ + def save_activity_id(self): + """ Saving Activity in animator_id """ for activity in self: - activity.animator_id.is_animator = True + activity.animator_id.activity_id = activity @api.onchange('date_start') @@ -233,4 +233,4 @@ class ResPartner(models.Model): """ GOLEM Member partner adaptations """ _inherit = 'res.partner' - is_animator = fields.Boolean() + activity_id = fields.Many2one('golem.activity', ondelete='set null') diff --git a/golem_activity/views/res_partner_views.xml b/golem_activity/views/res_partner_views.xml index 67eb706..b5579af 100644 --- a/golem_activity/views/res_partner_views.xml +++ b/golem_activity/views/res_partner_views.xml @@ -26,12 +26,12 @@ along with this program. If not, see . - - + + - From 34a697d5dc6c245abb0c6a57fe26776826bbec02 Mon Sep 17 00:00:00 2001 From: youssef Date: Fri, 26 Oct 2018 09:01:44 +0100 Subject: [PATCH 6/9] Add age and area_id filter for contacts --- golem_member/models/golem_member.py | 11 +++++++++++ golem_member/views/res_partner_views.xml | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/golem_member/models/golem_member.py b/golem_member/models/golem_member.py index e7d69d3..449d3a9 100644 --- a/golem_member/models/golem_member.py +++ b/golem_member/models/golem_member.py @@ -19,6 +19,8 @@ """ GOLEM Members """ import logging +from datetime import date, timedelta +from dateutil.relativedelta import relativedelta from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError _LOGGER = logging.getLogger(__name__) @@ -85,6 +87,15 @@ class ResPartner(models.Model): """ GOLEM Member partner adaptations """ _inherit = 'res.partner' + age = fields.Integer(compute='_compute_age', store=True) + + @api.depends('birthdate_date') + def _compute_age(self): + for contact in self: + if contact.birthdate_date: + age = relativedelta(date.today(), fields.Date.from_string(contact.birthdate_date)) + contact.age = age.years + @api.model def _get_default_nationality_id(self): return self.env.ref('base.main_company').country_id diff --git a/golem_member/views/res_partner_views.xml b/golem_member/views/res_partner_views.xml index 91a7b30..bf0f89e 100644 --- a/golem_member/views/res_partner_views.xml +++ b/golem_member/views/res_partner_views.xml @@ -48,6 +48,7 @@ along with this program. If not, see . position="after"> + @@ -90,6 +91,8 @@ along with this program. If not, see . + + . + From 5ca2a14e6486173d000317b4b203a4df33180bf4 Mon Sep 17 00:00:00 2001 From: youssef Date: Fri, 26 Oct 2018 12:06:31 +0100 Subject: [PATCH 7/9] small refactorings --- golem_activity/views/res_partner_views.xml | 1 + golem_member/views/res_partner_views.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/golem_activity/views/res_partner_views.xml b/golem_activity/views/res_partner_views.xml index b5579af..68d3b11 100644 --- a/golem_activity/views/res_partner_views.xml +++ b/golem_activity/views/res_partner_views.xml @@ -2,6 +2,7 @@ - - - - - - Partner GOLEM Activity improvement - res.partner - - - - - - - - - - From 92370db7349fa9734bfb257d25c20b677f180ff8 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Thu, 1 Nov 2018 16:20:38 +0100 Subject: [PATCH 9/9] [REF][FIX]GOLEM Member : filters and age * Age : do not use compute, as it evole from time to time ; * Fix area_id group by ; * Better places for new filters and searches. --- golem_member/__manifest__.py | 3 +- golem_member/i18n/fr.po | 62 ++++++++++++++++++------ golem_member/i18n/golem_member.pot | 60 ++++++++++++++++++----- golem_member/models/golem_member.py | 16 +++++- golem_member/views/res_partner_views.xml | 20 ++++++-- 5 files changed, 127 insertions(+), 34 deletions(-) diff --git a/golem_member/__manifest__.py b/golem_member/__manifest__.py index e63d0f3..e7e366e 100644 --- a/golem_member/__manifest__.py +++ b/golem_member/__manifest__.py @@ -2,6 +2,7 @@ # Copyright 2016-2018 Fabien Bourgeois # Copyright 2018 Michel Dessenne +# Copyright 2018 Youssef El Ouahby # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -20,7 +21,7 @@ 'name': 'GOLEM non-profit members', 'summary': 'Extends Odoo contacts for MJC', 'description': 'Extends Odoo contacts for MJC', - 'version': '10.0.2.4.0', + 'version': '10.0.2.5.0', 'category': 'GOLEM', 'author': 'Fabien Bourgeois, Michel Dessenne', 'license': 'AGPL-3', diff --git a/golem_member/i18n/fr.po b/golem_member/i18n/fr.po index 776e3e9..5f907f2 100644 --- a/golem_member/i18n/fr.po +++ b/golem_member/i18n/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-26 15:43+0000\n" -"PO-Revision-Date: 2018-10-26 17:47+0200\n" +"POT-Creation-Date: 2018-11-01 15:15+0000\n" +"PO-Revision-Date: 2018-11-01 16:21+0100\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -55,6 +55,18 @@ msgstr "Adresse" msgid "Address Type" msgstr "Type d'adresse" +#. module: golem_member +#: model:ir.model.fields,field_description:golem_member.field_golem_member_age +#: model:ir.model.fields,field_description:golem_member.field_res_partner_age +#: model:ir.model.fields,field_description:golem_member.field_res_users_age +msgid "Age" +msgstr "Age" + +#. module: golem_member +#: model:ir.model.fields,field_description:golem_member.field_golem_member_animator_activity_ids +msgid "Animated activities" +msgstr "Animated activities" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.golem_member_numberconfig_form msgid "Apply and recompute all member numbers" @@ -135,6 +147,11 @@ msgstr "Rebond" msgid "Buy Membership" msgstr "Payer une adhésion" +#. module: golem_member +#: model:ir.ui.view,arch_db:golem_member.l10n_fr_department_filter_inherit_golem_member +msgid "By Area" +msgstr "Par territoire" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.golem_member_search msgid "By age" @@ -339,7 +356,7 @@ msgstr "Conditions de Paiement Client" #. module: golem_member #: model:ir.model.fields,field_description:golem_member.field_golem_member_date msgid "Date" -msgstr "Date" +msgstr "Date " #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.golem_member_card_template @@ -426,7 +443,7 @@ msgid "Fax" msgstr "Fax" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:103 +#: code:addons/golem_member/models/golem_member.py:127 #, python-format msgid "Female" msgstr "Féminin" @@ -498,7 +515,7 @@ msgid "GOLEM Members Tags" msgstr "Catégories d'adhérents" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:433 +#: code:addons/golem_member/models/golem_member.py:459 #, python-format msgid "GOLEM Members merge has not been implemented yet. Please only merge partners, not members, or delete GOLEM Members manually before merging." msgstr "La fusion d'adhérents n'a pas encore été implémentée. Merci de ne fusionner que des contacts non adhérents, ou bien de supprimer les adhérents manuellement en premier lieu." @@ -597,6 +614,11 @@ msgstr "Facture" msgid "Invoices" msgstr "Factures" +#. module: golem_member +#: model:ir.ui.view,arch_db:golem_member.res_partner_search_inherit_golem_member +msgid "Is Animator" +msgstr "Intervenant" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.res_partner_search_inherit_golem_member msgid "Is Free Member" @@ -732,7 +754,7 @@ msgid "Latest Invoices & Payments Matching Date" msgstr "Date de dernière correspondance des factures et paiements" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:103 +#: code:addons/golem_member/models/golem_member.py:126 #, python-format msgid "Male" msgstr "Masculin" @@ -838,14 +860,20 @@ msgid "Nationality" msgstr "Nationalité" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:373 -#: code:addons/golem_member/models/golem_member.py:376 +#: code:addons/golem_member/models/golem_member.py:399 +#: code:addons/golem_member/models/golem_member.py:402 #: selection:golem.member.numberconfig,is_automatic:0 #: selection:golem.member.numberconfig,is_per_season:0 #, python-format msgid "No" msgstr "Non" +#. module: golem_member +#: code:addons/golem_member/models/golem_member.py:128 +#, python-format +msgid "Not Disclosed" +msgstr "Non communiqué" + #. module: golem_member #: model:ir.model.fields,field_description:golem_member.field_golem_member_comment msgid "Notes" @@ -1202,7 +1230,7 @@ msgid "The name of official registry where this company was declared." msgstr "Nom de la ville du tribunal de commerce dans laquelle la société est enregistrée." #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:69 +#: code:addons/golem_member/models/golem_member.py:71 #, python-format msgid "The parent area is a sub area of the current area, please change it." msgstr "Le territoire parent est un sous-territoire du territoire courant, merci de modifier vos saisies." @@ -1243,14 +1271,14 @@ msgid "This field holds the image used as avatar for this contact, limited to 10 msgstr "Ce champ contient l'image utilisée comme photo d'identité pour ce contact, limitée à 1024x1024px." #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:168 +#: code:addons/golem_member/models/golem_member.py:194 #: sql_constraint:golem.member:0 #, python-format msgid "This member number has already been used." msgstr "Ce numéro d'adhérent a été déjà utilisé." #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:47 +#: code:addons/golem_member/models/golem_member.py:49 #: sql_constraint:golem.partner.area:0 #, python-format msgid "This patner area has already been used." @@ -1317,7 +1345,13 @@ msgid "Total amount you have to pay to this vendor." msgstr "Montant total à payer au fournisseur." #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:235 +#: code:addons/golem_member/models/golem_member.py:103 +#, python-format +msgid "Unsupported operator for age search" +msgstr "Opérateur de recherche non supporté pour l'âge" + +#. module: golem_member +#: code:addons/golem_member/models/golem_member.py:261 #, python-format msgid "Unsupported operator for defautl season search" msgstr "Opérateur de recherche non supporté pour le filtre de saison par défaut" @@ -1353,8 +1387,8 @@ msgid "Website of Partner or Company" msgstr "Site Web pour les Partenaires ou les Sociétés" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:373 -#: code:addons/golem_member/models/golem_member.py:376 +#: code:addons/golem_member/models/golem_member.py:399 +#: code:addons/golem_member/models/golem_member.py:402 #: selection:golem.member.numberconfig,is_automatic:0 #: selection:golem.member.numberconfig,is_per_season:0 #, python-format diff --git a/golem_member/i18n/golem_member.pot b/golem_member/i18n/golem_member.pot index c4e6e10..c68ec94 100644 --- a/golem_member/i18n/golem_member.pot +++ b/golem_member/i18n/golem_member.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-26 15:43+0000\n" -"PO-Revision-Date: 2018-10-26 15:43+0000\n" +"POT-Creation-Date: 2018-11-01 15:15+0000\n" +"PO-Revision-Date: 2018-11-01 15:15+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -55,6 +55,18 @@ msgstr "" msgid "Address Type" msgstr "" +#. module: golem_member +#: model:ir.model.fields,field_description:golem_member.field_golem_member_age +#: model:ir.model.fields,field_description:golem_member.field_res_partner_age +#: model:ir.model.fields,field_description:golem_member.field_res_users_age +msgid "Age" +msgstr "" + +#. module: golem_member +#: model:ir.model.fields,field_description:golem_member.field_golem_member_animator_activity_ids +msgid "Animated activities" +msgstr "" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.golem_member_numberconfig_form msgid "Apply and recompute all member numbers" @@ -135,6 +147,11 @@ msgstr "" msgid "Buy Membership" msgstr "" +#. module: golem_member +#: model:ir.ui.view,arch_db:golem_member.l10n_fr_department_filter_inherit_golem_member +msgid "By Area" +msgstr "" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.golem_member_search msgid "By age" @@ -426,7 +443,7 @@ msgid "Fax" msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:103 +#: code:addons/golem_member/models/golem_member.py:127 #, python-format msgid "Female" msgstr "" @@ -498,7 +515,7 @@ msgid "GOLEM Members Tags" msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:433 +#: code:addons/golem_member/models/golem_member.py:459 #, python-format msgid "GOLEM Members merge has not been implemented yet. Please only merge partners, not members, or delete GOLEM Members manually before merging." msgstr "" @@ -597,6 +614,11 @@ msgstr "" msgid "Invoices" msgstr "" +#. module: golem_member +#: model:ir.ui.view,arch_db:golem_member.res_partner_search_inherit_golem_member +msgid "Is Animator" +msgstr "" + #. module: golem_member #: model:ir.ui.view,arch_db:golem_member.res_partner_search_inherit_golem_member msgid "Is Free Member" @@ -726,7 +748,7 @@ msgid "Latest Invoices & Payments Matching Date" msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:103 +#: code:addons/golem_member/models/golem_member.py:126 #, python-format msgid "Male" msgstr "" @@ -832,14 +854,20 @@ msgid "Nationality" msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:373 -#: code:addons/golem_member/models/golem_member.py:376 +#: code:addons/golem_member/models/golem_member.py:399 +#: code:addons/golem_member/models/golem_member.py:402 #: selection:golem.member.numberconfig,is_automatic:0 #: selection:golem.member.numberconfig,is_per_season:0 #, python-format msgid "No" msgstr "" +#. module: golem_member +#: code:addons/golem_member/models/golem_member.py:128 +#, python-format +msgid "Not Disclosed" +msgstr "" + #. module: golem_member #: model:ir.model.fields,field_description:golem_member.field_golem_member_comment msgid "Notes" @@ -1194,7 +1222,7 @@ msgid "The name of official registry where this company was declared." msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:69 +#: code:addons/golem_member/models/golem_member.py:71 #, python-format msgid "The parent area is a sub area of the current area, please change it." msgstr "" @@ -1235,14 +1263,14 @@ msgid "This field holds the image used as avatar for this contact, limited to 10 msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:168 +#: code:addons/golem_member/models/golem_member.py:194 #: sql_constraint:golem.member:0 #, python-format msgid "This member number has already been used." msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:47 +#: code:addons/golem_member/models/golem_member.py:49 #: sql_constraint:golem.partner.area:0 #, python-format msgid "This patner area has already been used." @@ -1309,7 +1337,13 @@ msgid "Total amount you have to pay to this vendor." msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:235 +#: code:addons/golem_member/models/golem_member.py:103 +#, python-format +msgid "Unsupported operator for age search" +msgstr "" + +#. module: golem_member +#: code:addons/golem_member/models/golem_member.py:261 #, python-format msgid "Unsupported operator for defautl season search" msgstr "" @@ -1345,8 +1379,8 @@ msgid "Website of Partner or Company" msgstr "" #. module: golem_member -#: code:addons/golem_member/models/golem_member.py:373 -#: code:addons/golem_member/models/golem_member.py:376 +#: code:addons/golem_member/models/golem_member.py:399 +#: code:addons/golem_member/models/golem_member.py:402 #: selection:golem.member.numberconfig,is_automatic:0 #: selection:golem.member.numberconfig,is_per_season:0 #, python-format diff --git a/golem_member/models/golem_member.py b/golem_member/models/golem_member.py index e9e9fd3..b706530 100644 --- a/golem_member/models/golem_member.py +++ b/golem_member/models/golem_member.py @@ -87,15 +87,27 @@ class ResPartner(models.Model): """ GOLEM Member partner adaptations """ _inherit = 'res.partner' - age = fields.Integer(compute='_compute_age', store=True) + age = fields.Integer(compute='_compute_age', search='_search_age') @api.depends('birthdate_date') def _compute_age(self): for contact in self: if contact.birthdate_date: - age = relativedelta(date.today(), fields.Date.from_string(contact.birthdate_date)) + age = relativedelta(date.today(), + fields.Date.from_string(contact.birthdate_date)) contact.age = age.years + def _search_age(self, operator, value): + """ Age search function """ + if operator != '=': + err = _('Unsupported operator for age search') + raise NotImplementedError(err) + today = date.today() + min_birthdate_date = today - timedelta(days=365.25 * value) + max_birthdate_date = today - timedelta(days=365.25 * (value + 1)) + return ['&', ('birthdate_date', '>', max_birthdate_date), + ('birthdate_date', '<=', min_birthdate_date)] + @api.model def _get_default_nationality_id(self): return self.env.ref('base.main_company').country_id diff --git a/golem_member/views/res_partner_views.xml b/golem_member/views/res_partner_views.xml index a5cbc2e..128724b 100644 --- a/golem_member/views/res_partner_views.xml +++ b/golem_member/views/res_partner_views.xml @@ -91,8 +91,8 @@ along with this program. If not, see . - - + + . - + + + Partner search adaptations + res.partner + + + + + + + +