From 8c2b1de080ce11af857ef26b996d8cf9586c911a Mon Sep 17 00:00:00 2001 From: "robin.keunen" Date: Mon, 25 May 2020 17:01:00 +0200 Subject: [PATCH 1/3] [FIX] partner_age: remove self.ensure_one --- partner_age/models/partner.py | 39 ++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/partner_age/models/partner.py b/partner_age/models/partner.py index 9a91a63..babe892 100644 --- a/partner_age/models/partner.py +++ b/partner_age/models/partner.py @@ -1,12 +1,20 @@ +# Copyright 2020 Coop IT Easy SCRL fs +# Robin Keunen +# Houssine Bakkali +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + from datetime import datetime -from openerp import api, fields, models -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as OE_DFORMAT +from odoo import api, fields, models class ResPartner(models.Model): _inherit = "res.partner" + age = fields.Integer( + string="Age", compute="_compute_age", search="_search_age" + ) + def _search_age(self, operator, value): if operator not in ("=", "!=", "<", "<=", ">", ">=", "in", "not in"): return [] @@ -27,18 +35,15 @@ class ResPartner(models.Model): @api.multi @api.depends("birthdate_date") def _compute_age(self): - self.ensure_one() - if self.birthdate_date: - dBday = datetime.strptime( - str(self.birthdate_date), OE_DFORMAT - ).date() - dToday = datetime.now().date() - self.age = ( - dToday.year - - dBday.year - - ((dToday.month, dToday.day) < (dBday.month, dBday.day)) - ) - - age = fields.Integer( - string="Age", compute="_compute_age", search="_search_age" - ) + for partner in self: + if partner.birthdate_date: + birthday = partner.birthdate_date + today = datetime.now().date() + partner.age = ( + today.year + - birthday.year + - ( + (today.month, today.day) + < (birthday.month, birthday.day) + ) + ) From 9fde56a9814df2a4bb741934623f5997dcf90b14 Mon Sep 17 00:00:00 2001 From: "robin.keunen" Date: Mon, 25 May 2020 17:01:17 +0200 Subject: [PATCH 2/3] [REF] partner_age: remove emc dependency --- easy_my_coop/__manifest__.py | 4 +++- partner_age/__manifest__.py | 6 +++--- partner_age/view/partner_view.xml | 18 +++++------------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/easy_my_coop/__manifest__.py b/easy_my_coop/__manifest__.py index 8fde8f5..2a91490 100644 --- a/easy_my_coop/__manifest__.py +++ b/easy_my_coop/__manifest__.py @@ -1,6 +1,7 @@ # Copyright 2013-2018 Open Architects Consulting SPRL. # Copyright 2018 Coop IT Easy SCRLfs () -# - Houssine BAKKALI - +# Houssine BAKKALI - +# Robin Keunen # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { @@ -14,6 +15,7 @@ "account", "base_iban", "product", + "partner_age", "partner_firstname", "partner_contact_birthdate", "partner_contact_address", diff --git a/partner_age/__manifest__.py b/partner_age/__manifest__.py index 71e2f76..ab06b4b 100644 --- a/partner_age/__manifest__.py +++ b/partner_age/__manifest__.py @@ -4,11 +4,11 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).# { "name": "Partner Age", - "version": "12.0.1.0.0", - "depends": ["easy_my_coop", "partner_contact_birthdate"], + "version": "12.0.2.0.0", + "depends": ["partner_contact_birthdate"], "author": "Coop IT Easy SCRLfs", "category": "Cooperative management", - "website": "www.coopiteasy.be", + "website": "https://www.coopiteasy.be", "license": "AGPL-3", "summary": "This module computes the age of the partner.", "data": ["view/partner_view.xml"], diff --git a/partner_age/view/partner_view.xml b/partner_age/view/partner_view.xml index 7a1689a..6a704fc 100644 --- a/partner_age/view/partner_view.xml +++ b/partner_age/view/partner_view.xml @@ -1,10 +1,14 @@ + res.partner.form.age res.partner + ref="partner_contact_birthdate.view_personal_information_birthdate_date"/> - - - res.partner.tree.easy_my_coop - res.partner - - - - - - - From 200a80375f1213ec1e1899cf684fa6f85fb2dcc7 Mon Sep 17 00:00:00 2001 From: "robin.keunen" Date: Mon, 25 May 2020 17:51:44 +0200 Subject: [PATCH 3/3] [IMP] partner_age: justify pylint: disable=sql-injection --- partner_age/models/partner.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/partner_age/models/partner.py b/partner_age/models/partner.py index babe892..9b8197f 100644 --- a/partner_age/models/partner.py +++ b/partner_age/models/partner.py @@ -19,14 +19,14 @@ class ResPartner(models.Model): if operator not in ("=", "!=", "<", "<=", ">", ">=", "in", "not in"): return [] # pylint: disable=sql-injection - # fixme while you're here, please fix the query to pass - # pylint sql-injection - query = """SELECT id - FROM "%s" - WHERE extract(year from age(CURRENT_DATE, - birthdate_date)) %s %%s""" % ( - self._table, - operator, + # the value of operator is checked, no risk of injection + query = """ + SELECT id + FROM res_partner + WHERE extract(year from age(CURRENT_DATE, birthdate_date)) + {operator} %s + """.format( + operator=operator ) self.env.cr.execute(query, (value,)) ids = [t[0] for t in self.env.cr.fetchall()]