[MIG] base_partner_one2many_phone from v10 to v14
This commit is contained in:
@@ -1,3 +1,2 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
|
||||||
from . import partner_phone
|
from . import partner_phone
|
||||||
from .post_install import migrate_to_partner_phone
|
from .post_install import migrate_to_partner_phone
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# Copyright 2014-2020 Abbaye du Barroux (http://www.barroux.org)
|
||||||
# © 2014-2016 Abbaye du Barroux (http://www.barroux.org)
|
# Copyright 2014-2020 Akretion (http://www.akretion.com>)
|
||||||
# © 2016 Akretion (http://www.akretion.com>)
|
|
||||||
# @author: Frère Bernard <informatique@barroux.org>
|
# @author: Frère Bernard <informatique@barroux.org>
|
||||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Base Partner One2many Phone',
|
'name': 'Base Partner One2many Phone',
|
||||||
'version': '10.0.2.0.0',
|
'version': '14.0.1.0.0',
|
||||||
'category': 'Phone',
|
'category': 'Phone',
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
'summary': 'One2many link between partners and phone numbers/emails',
|
'summary': 'One2many link between partners and phone numbers/emails',
|
||||||
@@ -21,7 +20,8 @@ It has been developped by brother Bernard from Barroux Abbey and Alexis de Lattr
|
|||||||
""",
|
""",
|
||||||
'author': 'Akretion',
|
'author': 'Akretion',
|
||||||
'website': 'https://akretion.com/',
|
'website': 'https://akretion.com/',
|
||||||
'depends': ['base_phone', 'sales_team', 'base_usability'],
|
'depends': ['contacts', 'base_usability', 'phone_validation'],
|
||||||
|
'excludes': ['sms'], # because sms introduces big changes in partner form view
|
||||||
'data': [
|
'data': [
|
||||||
'partner_phone_view.xml',
|
'partner_phone_view.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright 2020 Akretion France (http://www.akretion.com/)
|
|
||||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo import api, SUPERUSER_ID
|
|
||||||
|
|
||||||
oldtype2label = {
|
|
||||||
'1_home': 'Ancien type : Maison',
|
|
||||||
# '2_mobile': 'Ancien type : Portable',
|
|
||||||
'3_office': 'Ancien type : Bureau',
|
|
||||||
'4_home_fax': 'Ancien type : Fax maison',
|
|
||||||
'5_office_fax': 'Ancien type : Fax bureau',
|
|
||||||
'6_phone_fax_home': u'Ancien type : Tél/fax maison',
|
|
||||||
'7_other': 'Ancien type : Autre',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def migrate(cr, version):
|
|
||||||
if not version:
|
|
||||||
return
|
|
||||||
|
|
||||||
with api.Environment.manage():
|
|
||||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
||||||
rppo = env['res.partner.phone']
|
|
||||||
|
|
||||||
wdict = {} # key = partnerID, values = {id: {'type': '1_home', 'phone': '+33'}}
|
|
||||||
for rec in rppo.search_read([('type', '!=', False)], ['type', 'phone', 'partner_id', 'note']):
|
|
||||||
if rec['partner_id'][0] not in wdict:
|
|
||||||
wdict[rec['partner_id'][0]] = {}
|
|
||||||
wdict[rec['partner_id'][0]][rec['id']] = rec
|
|
||||||
|
|
||||||
# first pass for primary phone
|
|
||||||
for partner_id, xdict in wdict.items():
|
|
||||||
mig_phone_entries(cr, xdict, '3_phone_primary', '4_phone_secondary', ['1_home', '6_phone_fax_home', '3_office', '7_other'])
|
|
||||||
mig_phone_entries(cr, xdict, '5_mobile_primary', '6_mobile_secondary', ['2_mobile'])
|
|
||||||
mig_phone_entries(cr, xdict, '7_fax_primary', '8_fax_secondary', ['4_home_fax', '5_office_fax'])
|
|
||||||
cr.execute('select id, email from res_partner where email is not null order by id')
|
|
||||||
for partner in cr.dictfetchall():
|
|
||||||
print('partner_id=', partner['id'])
|
|
||||||
old_email = partner['email'].strip()
|
|
||||||
if old_email:
|
|
||||||
email_split = old_email.split(',')
|
|
||||||
clean_email_split = [x.strip() for x in email_split if x.strip()]
|
|
||||||
# primary:
|
|
||||||
email_primary = clean_email_split.pop(0)
|
|
||||||
rppo.create({
|
|
||||||
'type': '1_email_primary',
|
|
||||||
'partner_id': partner['id'],
|
|
||||||
'email': email_primary,
|
|
||||||
})
|
|
||||||
cr.execute('UPDATE res_partner set email=%s where id=%s', (email_primary, partner['id']))
|
|
||||||
for email_sec in clean_email_split:
|
|
||||||
email_sec = email_sec.strip()
|
|
||||||
if email_sec:
|
|
||||||
rppo.create({
|
|
||||||
'type': '2_email_secondary',
|
|
||||||
'partner_id': partner['id'],
|
|
||||||
'email': email_sec.strip(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
def mig_phone_entries(cr, xdict, new_type_primary, new_type_secondary, old_type_list):
|
|
||||||
zdict = {}
|
|
||||||
for phone_id, values in xdict.items():
|
|
||||||
if values['type'] in old_type_list:
|
|
||||||
zdict[phone_id] = values
|
|
||||||
if zdict:
|
|
||||||
values_sorted = sorted(zdict.values(), key=lambda x: x['type'])
|
|
||||||
primary_phone_val = values_sorted[0]
|
|
||||||
cr.execute("""UPDATE res_partner_phone SET type=%s WHERE id=%s""", (new_type_primary, primary_phone_val['id']))
|
|
||||||
if not primary_phone_val.get('note') and oldtype2label.get(primary_phone_val['type']):
|
|
||||||
cr.execute("""UPDATE res_partner_phone SET note=%s WHERE id=%s""", (oldtype2label[primary_phone_val['type']], primary_phone_val['id']))
|
|
||||||
|
|
||||||
zdict.pop(primary_phone_val['id'])
|
|
||||||
for secondary_phone_val in zdict.values():
|
|
||||||
cr.execute("""UPDATE res_partner_phone SET type=%s WHERE id=%s""", (new_type_secondary, secondary_phone_val['id']))
|
|
||||||
if not secondary_phone_val.get('note') and oldtype2label.get(secondary_phone_val['type']):
|
|
||||||
cr.execute("""UPDATE res_partner_phone SET note=%s WHERE id=%s""", (oldtype2label[secondary_phone_val['type']], secondary_phone_val['id']))
|
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# Copyright 2014-2020 Abbaye du Barroux (http://www.barroux.org)
|
||||||
# © 2014-2016 Abbaye du Barroux (http://www.barroux.org)
|
# Copyright 2016-2020 Akretion (http://www.akretion.com>)
|
||||||
# © 2016 Akretion (http://www.akretion.com>)
|
|
||||||
# @author: Frère Bernard <informatique@barroux.org>
|
# @author: Frère Bernard <informatique@barroux.org>
|
||||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, fields, api, _
|
from odoo import api, fields, models, _
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
from odoo.addons.base_phone.fields import Phone, Fax
|
|
||||||
|
|
||||||
EMAIL_TYPES = ('1_email_primary', '2_email_secondary')
|
EMAIL_TYPES = ('1_email_primary', '2_email_secondary')
|
||||||
PHONE_TYPES = ('3_phone_primary', '4_phone_secondary', '5_mobile_primary', '6_mobile_secondary', '7_fax_primary', '8_fax_secondary')
|
PHONE_TYPES = ('3_phone_primary', '4_phone_secondary', '5_mobile_primary', '6_mobile_secondary', '7_fax_primary', '8_fax_secondary')
|
||||||
@@ -17,6 +15,8 @@ class ResPartnerPhone(models.Model):
|
|||||||
_name = 'res.partner.phone'
|
_name = 'res.partner.phone'
|
||||||
_order = 'partner_id, type'
|
_order = 'partner_id, type'
|
||||||
_phone_name_sequence = 8
|
_phone_name_sequence = 8
|
||||||
|
_inherit = ['phone.validation.mixin']
|
||||||
|
_description = 'Multiple emails and phones for partners'
|
||||||
|
|
||||||
partner_id = fields.Many2one(
|
partner_id = fields.Many2one(
|
||||||
'res.partner', string='Related Partner', index=True, ondelete='cascade')
|
'res.partner', string='Related Partner', index=True, ondelete='cascade')
|
||||||
@@ -31,7 +31,7 @@ class ResPartnerPhone(models.Model):
|
|||||||
('8_fax_secondary', 'Secondary Fax'),
|
('8_fax_secondary', 'Secondary Fax'),
|
||||||
],
|
],
|
||||||
string='Type', required=True, index=True)
|
string='Type', required=True, index=True)
|
||||||
phone = Phone('Phone', required=False, partner_field='partner_id')
|
phone = fields.Char(string='Phone')
|
||||||
email = fields.Char(string='E-Mail')
|
email = fields.Char(string='E-Mail')
|
||||||
note = fields.Char('Note')
|
note = fields.Char('Note')
|
||||||
|
|
||||||
@@ -43,6 +43,11 @@ class ResPartnerPhone(models.Model):
|
|||||||
elif self.type in PHONE_TYPES:
|
elif self.type in PHONE_TYPES:
|
||||||
self.email = False
|
self.email = False
|
||||||
|
|
||||||
|
@api.onchange('phone', 'partner_id')
|
||||||
|
def _onchange_phone_validation(self):
|
||||||
|
if self.phone:
|
||||||
|
self.phone = self.phone_format(self.phone)
|
||||||
|
|
||||||
@api.constrains('type', 'phone', 'email')
|
@api.constrains('type', 'phone', 'email')
|
||||||
def _check_partner_phone(self):
|
def _check_partner_phone(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
@@ -74,7 +79,6 @@ class ResPartnerPhone(models.Model):
|
|||||||
res.append((pphone.id, name))
|
res.append((pphone.id, name))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.model_cr
|
|
||||||
def init(self):
|
def init(self):
|
||||||
self._cr.execute('''
|
self._cr.execute('''
|
||||||
CREATE UNIQUE INDEX IF NOT EXISTS single_email_primary
|
CREATE UNIQUE INDEX IF NOT EXISTS single_email_primary
|
||||||
@@ -111,14 +115,11 @@ class ResPartner(models.Model):
|
|||||||
# for the future :)
|
# for the future :)
|
||||||
|
|
||||||
phone_ids = fields.One2many(
|
phone_ids = fields.One2many(
|
||||||
'res.partner.phone', 'partner_id', string='Phones')
|
'res.partner.phone', 'partner_id', string='Phones/Emails')
|
||||||
phone = Phone(
|
phone = fields.Char(
|
||||||
compute='_compute_partner_phone',
|
compute='_compute_partner_phone',
|
||||||
store=True, readonly=True, compute_sudo=True)
|
store=True, readonly=True, compute_sudo=True)
|
||||||
mobile = Phone(
|
mobile = fields.Char(
|
||||||
compute='_compute_partner_phone',
|
|
||||||
store=True, readonly=True, compute_sudo=True)
|
|
||||||
fax = Fax(
|
|
||||||
compute='_compute_partner_phone',
|
compute='_compute_partner_phone',
|
||||||
store=True, readonly=True, compute_sudo=True)
|
store=True, readonly=True, compute_sudo=True)
|
||||||
email = fields.Char(
|
email = fields.Char(
|
||||||
@@ -128,20 +129,17 @@ class ResPartner(models.Model):
|
|||||||
@api.depends('phone_ids.phone', 'phone_ids.type', 'phone_ids.email')
|
@api.depends('phone_ids.phone', 'phone_ids.type', 'phone_ids.email')
|
||||||
def _compute_partner_phone(self):
|
def _compute_partner_phone(self):
|
||||||
for partner in self:
|
for partner in self:
|
||||||
phone = mobile = fax = email = False
|
phone = mobile = email = False
|
||||||
for pphone in partner.phone_ids:
|
for pphone in partner.phone_ids:
|
||||||
if pphone.type == '1_email_primary' and pphone.email:
|
if pphone.type == '1_email_primary' and pphone.email:
|
||||||
email = pphone.email
|
email = pphone.email
|
||||||
elif pphone.phone:
|
elif pphone.phone:
|
||||||
if pphone.type == '5_mobile_primary':
|
if pphone.type == '5_mobile_primary':
|
||||||
mobile = pphone.phone
|
mobile = pphone.phone
|
||||||
elif pphone.type == '7_fax_primary':
|
|
||||||
fax = pphone.phone
|
|
||||||
elif pphone.type == '3_phone_primary':
|
elif pphone.type == '3_phone_primary':
|
||||||
phone = pphone.phone
|
phone = pphone.phone
|
||||||
partner.phone = phone
|
partner.phone = phone
|
||||||
partner.mobile = mobile
|
partner.mobile = mobile
|
||||||
partner.fax = fax
|
|
||||||
partner.email = email
|
partner.email = email
|
||||||
|
|
||||||
def _update_create_vals(
|
def _update_create_vals(
|
||||||
@@ -157,8 +155,8 @@ class ResPartner(models.Model):
|
|||||||
self._update_create_vals(vals, '1_email_primary', 'email', 'email')
|
self._update_create_vals(vals, '1_email_primary', 'email', 'email')
|
||||||
self._update_create_vals(vals, '3_phone_primary', 'phone', 'phone')
|
self._update_create_vals(vals, '3_phone_primary', 'phone', 'phone')
|
||||||
self._update_create_vals(vals, '5_mobile_primary', 'mobile', 'phone')
|
self._update_create_vals(vals, '5_mobile_primary', 'mobile', 'phone')
|
||||||
self._update_create_vals(vals, '7_fax_primary', 'fax', 'phone')
|
# self._update_create_vals(vals, '7_fax_primary', 'fax', 'phone')
|
||||||
return super(ResPartner, self).create(vals)
|
return super().create(vals)
|
||||||
|
|
||||||
def _update_write_vals(
|
def _update_write_vals(
|
||||||
self, vals, type, partner_field, partner_phone_field):
|
self, vals, type, partner_field, partner_phone_field):
|
||||||
@@ -192,4 +190,4 @@ class ResPartner(models.Model):
|
|||||||
super(ResPartner, rec).write(vals)
|
super(ResPartner, rec).write(vals)
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return super(ResPartner, self).write(vals)
|
return super().write(vals)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
© 2014-2016 Abbaye du Barroux (http://www.barroux.org)
|
Copyright 2014-2020 Abbaye du Barroux (http://www.barroux.org)
|
||||||
© 2016 Akretion (http://www.akretion.com>)
|
Copyright 2016-2020 Akretion (http://www.akretion.com>)
|
||||||
@author: Frère Bernard <informatique@barroux.org>
|
@author: Frère Bernard <informatique@barroux.org>
|
||||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<tree string="Phones and E-mail" editable="bottom">
|
<tree string="Phones and E-mail" editable="bottom">
|
||||||
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
|
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
<field name="phone" widget="phone" attrs="{'required': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'readonly': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
<field name="phone" widget="phone" options="{'enable_sms': false}" attrs="{'required': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'readonly': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
||||||
<field name="email" widget="email" attrs="{'readonly': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'required': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
<field name="email" widget="email" attrs="{'readonly': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'required': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
||||||
<field name="note"/>
|
<field name="note"/>
|
||||||
</tree>
|
</tree>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<group name="main">
|
<group name="main">
|
||||||
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
|
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
<field name="phone" widget="phone" attrs="{'required': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'invisible': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
<field name="phone" widget="phone" options="{'enable_sms': false}" attrs="{'required': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'invisible': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
||||||
<field name="email" widget="email" attrs="{'invisible': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'required': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
<field name="email" widget="email" attrs="{'invisible': [('type', 'not in', ('1_email_primary', '2_email_secondary'))], 'required': [('type', 'in', ('1_email_primary', '2_email_secondary'))]}"/>
|
||||||
<field name="note"/>
|
<field name="note"/>
|
||||||
</group>
|
</group>
|
||||||
@@ -62,7 +62,11 @@
|
|||||||
</record>
|
</record>
|
||||||
|
|
||||||
<menuitem id="res_partner_phone_menu" action="res_partner_phone_action"
|
<menuitem id="res_partner_phone_menu" action="res_partner_phone_action"
|
||||||
parent="sales_team.menu_sales" sequence="10"/>
|
parent="contacts.menu_contacts" sequence="10"/>
|
||||||
|
|
||||||
|
<record id="contacts.res_partner_menu_config" model="ir.ui.menu">
|
||||||
|
<field name="sequence">20</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<!-- PARTNER views -->
|
<!-- PARTNER views -->
|
||||||
<record id="view_partner_form" model="ir.ui.view">
|
<record id="view_partner_form" model="ir.ui.view">
|
||||||
@@ -79,9 +83,6 @@
|
|||||||
<field name="mobile" position="attributes">
|
<field name="mobile" position="attributes">
|
||||||
<attribute name="invisible">1</attribute>
|
<attribute name="invisible">1</attribute>
|
||||||
</field>
|
</field>
|
||||||
<field name="fax" position="attributes">
|
|
||||||
<attribute name="invisible">1</attribute>
|
|
||||||
</field>
|
|
||||||
<field name="email" position="attributes">
|
<field name="email" position="attributes">
|
||||||
<attribute name="invisible">1</attribute>
|
<attribute name="invisible">1</attribute>
|
||||||
</field>
|
</field>
|
||||||
@@ -127,6 +128,26 @@
|
|||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="res_partner_view_form_private" model="ir.ui.view">
|
||||||
|
<field name="name">add.phone_ids.on.res.partner.private.form</field>
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.res_partner_view_form_private"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="phone" position="after">
|
||||||
|
<field name="phone_ids" nolabel="1" colspan="2"/>
|
||||||
|
</field>
|
||||||
|
<field name="phone" position="attributes">
|
||||||
|
<attribute name="invisible">1</attribute>
|
||||||
|
</field>
|
||||||
|
<field name="mobile" position="attributes">
|
||||||
|
<attribute name="invisible">1</attribute>
|
||||||
|
</field>
|
||||||
|
<field name="email" position="attributes">
|
||||||
|
<attribute name="invisible">1</attribute>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="view_res_partner_filter" model="ir.ui.view">
|
<record id="view_res_partner_filter" model="ir.ui.view">
|
||||||
<field name="name">phone.one2many.res.partner.search</field>
|
<field name="name">phone.one2many.res.partner.search</field>
|
||||||
<field name="model">res.partner</field>
|
<field name="model">res.partner</field>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# Copyright 2017-2020 Akretion France (http://www.akretion.com/)
|
||||||
# © 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
|
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import api, SUPERUSER_ID
|
from odoo import api, SUPERUSER_ID
|
||||||
@@ -41,13 +41,8 @@ def migrate_to_partner_phone(cr, registry):
|
|||||||
to_create = []
|
to_create = []
|
||||||
to_create += create_partner_phone(cr, 'phone', '3_phone_primary')
|
to_create += create_partner_phone(cr, 'phone', '3_phone_primary')
|
||||||
to_create += create_partner_phone(cr, 'mobile', '5_mobile_primary')
|
to_create += create_partner_phone(cr, 'mobile', '5_mobile_primary')
|
||||||
to_create += create_partner_phone(cr, 'fax', '7_fax_primary')
|
|
||||||
to_create += create_partner_email(cr)
|
to_create += create_partner_email(cr)
|
||||||
# I need to create all at the end for invalidation purposes
|
# I need to create all at the end for invalidation purposes
|
||||||
for vals in to_create:
|
rppo.create(to_create)
|
||||||
rppo.create(vals)
|
|
||||||
logger.info(
|
|
||||||
'partner_phone type %s phone %s email %s created for partner ID %d',
|
|
||||||
vals['type'], vals.get('phone'), vals.get('mail'), vals['partner_id'])
|
|
||||||
logger.info('end data migration for one2many_phone')
|
logger.info('end data migration for one2many_phone')
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_partner_phone_full,Full access on res.partner.phone to Contact Manager grp,model_res_partner_phone,base.group_partner_manager,1,1,1,1
|
access_partner_phone_full,Full access on res.partner.phone to Contact Manager grp,model_res_partner_phone,base.group_partner_manager,1,1,1,1
|
||||||
access_partner_phone_read,Read access on res.partner.phone to Employees grp,model_res_partner_phone,base.group_user,1,0,0,0
|
access_partner_phone_read,Read access on res.partner.phone to Employees grp,model_res_partner_phone,base.group_user,1,0,0,0
|
||||||
access_callerid_partner_phone_read,Read access on res.partner.phone to callerID group,model_res_partner_phone,base_phone.group_callerid,1,0,0,0
|
|
||||||
|
|||||||
|
@@ -16,24 +16,20 @@ class TestPartnerPhone(TransactionCase):
|
|||||||
pphone_email = rppo.search(
|
pphone_email = rppo.search(
|
||||||
[('type', '=', '1_email_primary'), ('partner_id', '=', partner.id)])
|
[('type', '=', '1_email_primary'), ('partner_id', '=', partner.id)])
|
||||||
if result['email']:
|
if result['email']:
|
||||||
self.assertEquals(partner.email, result['email'])
|
self.assertEqual(partner.email, result['email'])
|
||||||
self.assertEquals(len(pphone_email), 1)
|
self.assertEqual(len(pphone_email), 1)
|
||||||
self.assertEquals(pphone_email.email, result['email'])
|
self.assertEqual(pphone_email.email, result['email'])
|
||||||
else:
|
else:
|
||||||
self.assertFalse(partner.email)
|
self.assertFalse(partner.email)
|
||||||
self.assertFalse(pphone_email)
|
self.assertFalse(pphone_email)
|
||||||
if result['phone']:
|
if result['phone']:
|
||||||
self.assertEquals(partner.phone.replace(u'\xa0', ''), result['phone'])
|
self.assertEqual(partner.phone, result['phone'])
|
||||||
else:
|
else:
|
||||||
self.assertFalse(partner.phone)
|
self.assertFalse(partner.phone)
|
||||||
if result['mobile']:
|
if result['mobile']:
|
||||||
self.assertEquals(partner.mobile.replace(u'\xa0', ''), result['mobile'])
|
self.assertEqual(partner.mobile, result['mobile'])
|
||||||
else:
|
else:
|
||||||
self.assertFalse(partner.mobile)
|
self.assertFalse(partner.mobile)
|
||||||
if result['fax']:
|
|
||||||
self.assertEquals(partner.fax.replace(u'\xa0', ''), result['fax'])
|
|
||||||
else:
|
|
||||||
self.assertFalse(partner.fax)
|
|
||||||
field2type = {
|
field2type = {
|
||||||
'phone': '3_phone_primary',
|
'phone': '3_phone_primary',
|
||||||
'mobile': '5_mobile_primary',
|
'mobile': '5_mobile_primary',
|
||||||
@@ -45,8 +41,8 @@ class TestPartnerPhone(TransactionCase):
|
|||||||
pphone = rppo.search(
|
pphone = rppo.search(
|
||||||
[('type', '=', type), ('partner_id', '=', partner.id)])
|
[('type', '=', type), ('partner_id', '=', partner.id)])
|
||||||
if value:
|
if value:
|
||||||
self.assertEquals(len(pphone), 1)
|
self.assertEqual(len(pphone), 1)
|
||||||
self.assertEquals(pphone.phone.replace(u'\xa0', ''), value)
|
self.assertEqual(pphone.phone, value)
|
||||||
else:
|
else:
|
||||||
self.assertFalse(pphone)
|
self.assertFalse(pphone)
|
||||||
|
|
||||||
@@ -55,40 +51,36 @@ class TestPartnerPhone(TransactionCase):
|
|||||||
p = rpo.create({
|
p = rpo.create({
|
||||||
'name': 'Test Me',
|
'name': 'Test Me',
|
||||||
'email': 'testme@example.com',
|
'email': 'testme@example.com',
|
||||||
'phone': '0198089246',
|
'phone': '+33198089246',
|
||||||
'mobile': '0198089247',
|
'mobile': '+33198089247',
|
||||||
'fax': '0198089248',
|
|
||||||
})
|
})
|
||||||
result = {
|
result = {
|
||||||
'email': 'testme@example.com',
|
'email': 'testme@example.com',
|
||||||
'phone': '+33198089246',
|
'phone': '+33198089246',
|
||||||
'mobile': '+33198089247',
|
'mobile': '+33198089247',
|
||||||
'fax': '+33198089248',
|
|
||||||
}
|
}
|
||||||
self._check_result(p, result)
|
self._check_result(p, result)
|
||||||
p2 = rpo.create({
|
p2 = rpo.create({
|
||||||
'name': 'Test me now',
|
'name': 'Test me now',
|
||||||
'email': 'testmenow@example.com',
|
'email': 'testmenow@example.com',
|
||||||
'phone': '0972727272',
|
'phone': '+33972727272',
|
||||||
})
|
})
|
||||||
result = {
|
result = {
|
||||||
'email': 'testmenow@example.com',
|
'email': 'testmenow@example.com',
|
||||||
'phone': '+33972727272',
|
'phone': '+33972727272',
|
||||||
'mobile': False,
|
'mobile': False,
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p2, result)
|
self._check_result(p2, result)
|
||||||
p3 = rpo.create({
|
p3 = rpo.create({
|
||||||
'name': 'Test me now',
|
'name': 'Test me now',
|
||||||
'phone_ids': [
|
'phone_ids': [
|
||||||
(0, 0, {'type': '3_phone_primary', 'phone': '0972727272'}),
|
(0, 0, {'type': '3_phone_primary', 'phone': '+33972727272'}),
|
||||||
(0, 0, {'type': '1_email_primary', 'email': 'tutu@example.fr'})],
|
(0, 0, {'type': '1_email_primary', 'email': 'tutu@example.fr'})],
|
||||||
})
|
})
|
||||||
result = {
|
result = {
|
||||||
'email': 'tutu@example.fr',
|
'email': 'tutu@example.fr',
|
||||||
'phone': '+33972727272',
|
'phone': '+33972727272',
|
||||||
'mobile': False,
|
'mobile': False,
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p3, result)
|
self._check_result(p3, result)
|
||||||
|
|
||||||
@@ -101,30 +93,27 @@ class TestPartnerPhone(TransactionCase):
|
|||||||
'email': False,
|
'email': False,
|
||||||
'phone': False,
|
'phone': False,
|
||||||
'mobile': False,
|
'mobile': False,
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p1, result_none)
|
self._check_result(p1, result_none)
|
||||||
p1.write({
|
p1.write({
|
||||||
'mobile': '0198089247',
|
'mobile': '+33198089247',
|
||||||
'email': 'testmenow@example.com',
|
'email': 'testmenow@example.com',
|
||||||
})
|
})
|
||||||
result = {
|
result = {
|
||||||
'email': 'testmenow@example.com',
|
'email': 'testmenow@example.com',
|
||||||
'phone': False,
|
'phone': False,
|
||||||
'mobile': '+33198089247',
|
'mobile': '+33198089247',
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p1, result)
|
self._check_result(p1, result)
|
||||||
p1.write({
|
p1.write({
|
||||||
'email': 'testmenow2@example.com',
|
'email': 'testmenow2@example.com',
|
||||||
'phone': False,
|
'phone': False,
|
||||||
'mobile': '04.72.72.72.72',
|
'mobile': '+33472727272',
|
||||||
})
|
})
|
||||||
result = {
|
result = {
|
||||||
'email': 'testmenow2@example.com',
|
'email': 'testmenow2@example.com',
|
||||||
'phone': False,
|
'phone': False,
|
||||||
'mobile': '+33472727272',
|
'mobile': '+33472727272',
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p1, result)
|
self._check_result(p1, result)
|
||||||
p1.write({
|
p1.write({
|
||||||
@@ -135,12 +124,11 @@ class TestPartnerPhone(TransactionCase):
|
|||||||
self._check_result(p1, result_none)
|
self._check_result(p1, result_none)
|
||||||
p2 = self.env['res.partner'].create({'name': 'Toto', 'email': 'toto@example.com'})
|
p2 = self.env['res.partner'].create({'name': 'Toto', 'email': 'toto@example.com'})
|
||||||
p_multi = p1 + p2
|
p_multi = p1 + p2
|
||||||
p_multi.write({'email': 'all@example.com', 'phone': '05.60.60.60.70'})
|
p_multi.write({'email': 'all@example.com', 'phone': '+33560606070'})
|
||||||
result = {
|
result = {
|
||||||
'email': 'all@example.com',
|
'email': 'all@example.com',
|
||||||
'phone': '+33560606070',
|
'phone': '+33560606070',
|
||||||
'mobile': False,
|
'mobile': False,
|
||||||
'fax': False,
|
|
||||||
}
|
}
|
||||||
self._check_result(p1, result)
|
self._check_result(p1, result)
|
||||||
self._check_result(p2, result)
|
self._check_result(p2, result)
|
||||||
|
|||||||
Reference in New Issue
Block a user