diff --git a/base_partner_one2many_phone/__manifest__.py b/base_partner_one2many_phone/__manifest__.py index 5fa6155..1b1b458 100644 --- a/base_partner_one2many_phone/__manifest__.py +++ b/base_partner_one2many_phone/__manifest__.py @@ -7,7 +7,7 @@ { 'name': 'Base Partner One2many Phone', - 'version': '0.1', + 'version': '10.0.1.0.0', 'category': 'Phone', 'license': 'AGPL-3', 'summary': 'One2many link between partners and phone numbers', diff --git a/base_partner_one2many_phone/partner_phone.py b/base_partner_one2many_phone/partner_phone.py index 18eb253..80478ca 100644 --- a/base_partner_one2many_phone/partner_phone.py +++ b/base_partner_one2many_phone/partner_phone.py @@ -7,6 +7,7 @@ from odoo import models, fields, api from odoo.addons.base_phone.fields import Phone, Fax +import phonenumbers class ResPartnerPhone(models.Model): @@ -30,21 +31,41 @@ class ResPartnerPhone(models.Model): class ResPartner(models.Model): _inherit = 'res.partner' - @api.one + @api.model + def convert_from_international_to_e164(self, phone_num): + res = False + try: + res_parse = phonenumbers.parse(phone_num) + res = phonenumbers.format_number( + res_parse, phonenumbers.PhoneNumberFormat.E164) + except: + pass + return res + # without this convert, we would have in DB: + # E.164 format in res_partner_phone table + # phonenumbers.PhoneNumberFormat.INTERNATIONAL in res_partner + # TODO bug: but even with this, it doesn't work, the format + # is stored in international format in res_partner + # => I'll try to find the reason later + + @api.multi @api.depends('phone_ids.phone', 'phone_ids.type') def _compute_partner_phone(self): - phone = mobile = fax = False - for partner_phone in self.phone_ids: - not_phone_type = ('2_mobile', '4_home_fax', '5_office_fax') - if partner_phone.type not in not_phone_type: - phone = partner_phone.phone - if partner_phone.type == '2_mobile': - mobile = partner_phone.phone - if partner_phone.type in ('5_office_fax', '4_home_fax'): - fax = partner_phone.phone - self.phone = phone - self.mobile = mobile - self.fax = fax + for partner in self: + phone = mobile = fax = False + for partner_phone in partner.phone_ids: + num_e164 = self.convert_from_international_to_e164( + partner_phone.phone) + if num_e164: + if partner_phone.type == '2_mobile': + mobile = num_e164 + elif partner_phone.type in ('5_office_fax', '4_home_fax'): + fax = num_e164 + else: + phone = num_e164 + partner.phone = phone + partner.mobile = mobile + partner.fax = fax phone_ids = fields.One2many( 'res.partner.phone', 'partner_id', string='Phones')