[IMP] pre-commit: first run on whole repo

This commit is contained in:
Kevin Khao
2021-11-26 18:54:38 +03:00
parent a04b8980e1
commit 167aefee13
289 changed files with 6020 additions and 4170 deletions

View File

@@ -5,12 +5,12 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Base Partner One2many Phone',
'version': '14.0.1.0.0',
'category': 'Phone',
'license': 'AGPL-3',
'summary': 'One2many link between partners and phone numbers/emails',
'description': """
"name": "Base Partner One2many Phone",
"version": "14.0.1.0.0",
"category": "Phone",
"license": "AGPL-3",
"summary": "One2many link between partners and phone numbers/emails",
"description": """
Base Partner One2many Phone
===========================
@@ -18,14 +18,14 @@ With this module, one partner can have several phone numbers and several emails.
It has been developped by brother Bernard from Barroux Abbey and Alexis de Lattre from Akretion.
""",
'author': 'Akretion',
'website': 'https://akretion.com/',
'depends': ['contacts', 'base_usability', 'phone_validation'],
'excludes': ['sms'], # because sms introduces big changes in partner form view
'data': [
'partner_phone_view.xml',
'security/ir.model.access.csv',
],
'installable': True,
'post_init_hook': 'migrate_to_partner_phone',
"author": "Akretion",
"website": "https://github.com/OCA/odoo-usability",
"depends": ["contacts", "base_usability", "phone_validation"],
"excludes": ["sms"], # because sms introduces big changes in partner form view
"data": [
"partner_phone_view.xml",
"security/ir.model.access.csv",
],
"installable": True,
"post_init_hook": "migrate_to_partner_phone",
}

View File

@@ -4,38 +4,50 @@
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, _
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
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')
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",
)
class ResPartnerPhone(models.Model):
_name = 'res.partner.phone'
_order = 'partner_id, type'
_name = "res.partner.phone"
_order = "partner_id, type"
_phone_name_sequence = 8
_inherit = ['phone.validation.mixin']
_description = 'Multiple emails and phones for partners'
_inherit = ["phone.validation.mixin"]
_description = "Multiple emails and phones for partners"
partner_id = fields.Many2one(
'res.partner', string='Related Partner', index=True, ondelete='cascade')
type = fields.Selection([
('1_email_primary', 'Primary E-mail'),
('2_email_secondary', 'Secondary E-mail'),
('3_phone_primary', 'Primary Phone'),
('4_phone_secondary', 'Secondary Phone'),
('5_mobile_primary', 'Primary Mobile'),
('6_mobile_secondary', 'Secondary Mobile'),
('7_fax_primary', 'Primary Fax'),
('8_fax_secondary', 'Secondary Fax'),
"res.partner", string="Related Partner", index=True, ondelete="cascade"
)
type = fields.Selection(
[
("1_email_primary", "Primary E-mail"),
("2_email_secondary", "Secondary E-mail"),
("3_phone_primary", "Primary Phone"),
("4_phone_secondary", "Secondary Phone"),
("5_mobile_primary", "Primary Mobile"),
("6_mobile_secondary", "Secondary Mobile"),
("7_fax_primary", "Primary Fax"),
("8_fax_secondary", "Secondary Fax"),
],
string='Type', required=True, index=True)
phone = fields.Char(string='Phone')
email = fields.Char(string='E-Mail')
note = fields.Char('Note')
string="Type",
required=True,
index=True,
)
phone = fields.Char(string="Phone")
email = fields.Char(string="E-Mail")
note = fields.Char("Note")
@api.onchange('type')
@api.onchange("type")
def type_change(self):
if self.type:
if self.type in EMAIL_TYPES:
@@ -43,67 +55,89 @@ class ResPartnerPhone(models.Model):
elif self.type in PHONE_TYPES:
self.email = False
@api.onchange('phone', 'partner_id')
@api.onchange("phone", "partner_id")
def _onchange_phone_validation(self):
if self.phone:
self.phone = self.phone_format(self.phone, country=self.partner_id.country_id)
self.phone = self.phone_format(
self.phone, country=self.partner_id.country_id
)
@api.constrains('type', 'phone', 'email')
@api.constrains("type", "phone", "email")
def _check_partner_phone(self):
for rec in self:
if rec.type in EMAIL_TYPES:
if not rec.email:
raise ValidationError(_(
"E-mail field must have a value when type is Primary E-mail or Secondary E-mail."))
raise ValidationError(
_(
"E-mail field must have a value when type is Primary E-mail or Secondary E-mail."
)
)
if rec.phone:
raise ValidationError(_(
"Phone field must be empty when type is Primary E-mail or Secondary E-mail."))
raise ValidationError(
_(
"Phone field must be empty when type is Primary E-mail or Secondary E-mail."
)
)
elif rec.type in PHONE_TYPES:
if not rec.phone:
raise ValidationError(_(
"Phone field must have a value when type is Primary/Secondary Phone, Primary/Secondary Mobile or Primary/Secondary Fax."))
raise ValidationError(
_(
"Phone field must have a value when type is Primary/Secondary Phone, Primary/Secondary Mobile or Primary/Secondary Fax."
)
)
if rec.email:
raise ValidationError(_(
"E-mail field must be empty when type is Primary/Secondary Phone, Primary/Secondary Mobile or Primary/Secondary Fax."))
raise ValidationError(
_(
"E-mail field must be empty when type is Primary/Secondary Phone, Primary/Secondary Mobile or Primary/Secondary Fax."
)
)
def name_get(self):
res = []
for pphone in self:
if pphone.partner_id:
if self._context.get('callerid'):
if self._context.get("callerid"):
name = pphone.partner_id.display_name
else:
name = u'%s (%s)' % (pphone.phone, pphone.partner_id.name)
name = u"%s (%s)" % (pphone.phone, pphone.partner_id.name)
else:
name = pphone.phone
res.append((pphone.id, name))
return res
def init(self):
self._cr.execute('''
self._cr.execute(
"""
CREATE UNIQUE INDEX IF NOT EXISTS single_email_primary
ON res_partner_phone (partner_id, type)
WHERE (type='1_email_primary')
''')
self._cr.execute('''
"""
)
self._cr.execute(
"""
CREATE UNIQUE INDEX IF NOT EXISTS single_phone_primary
ON res_partner_phone (partner_id, type)
WHERE (type='3_phone_primary')
''')
self._cr.execute('''
"""
)
self._cr.execute(
"""
CREATE UNIQUE INDEX IF NOT EXISTS single_mobile_primary
ON res_partner_phone (partner_id, type)
WHERE (type='5_mobile_primary')
''')
self._cr.execute('''
"""
)
self._cr.execute(
"""
CREATE UNIQUE INDEX IF NOT EXISTS single_fax_primary
ON res_partner_phone (partner_id, type)
WHERE (type='7_fax_primary')
''')
"""
)
class ResPartner(models.Model):
_inherit = 'res.partner'
_inherit = "res.partner"
# in v10, we are supposed to have in DB E.164 format
# with the current implementation, we have:
@@ -115,78 +149,85 @@ class ResPartner(models.Model):
# for the future :)
phone_ids = fields.One2many(
'res.partner.phone', 'partner_id', string='Phones/Emails')
"res.partner.phone", "partner_id", string="Phones/Emails"
)
phone = fields.Char(
compute='_compute_partner_phone',
store=True, readonly=True, compute_sudo=True)
compute="_compute_partner_phone", store=True, readonly=True, compute_sudo=True
)
mobile = fields.Char(
compute='_compute_partner_phone',
store=True, readonly=True, compute_sudo=True)
compute="_compute_partner_phone", store=True, readonly=True, compute_sudo=True
)
email = fields.Char(
compute='_compute_partner_phone',
store=True, readonly=True, compute_sudo=True)
compute="_compute_partner_phone", store=True, readonly=True, compute_sudo=True
)
@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):
for partner in self:
phone = mobile = email = False
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
elif pphone.phone:
if pphone.type == '5_mobile_primary':
if pphone.type == "5_mobile_primary":
mobile = pphone.phone
elif pphone.type == '3_phone_primary':
elif pphone.type == "3_phone_primary":
phone = pphone.phone
partner.phone = phone
partner.mobile = mobile
partner.email = email
def _update_create_vals(
self, vals, type, partner_field, partner_phone_field):
def _update_create_vals(self, vals, type, partner_field, partner_phone_field):
if vals.get(partner_field):
vals['phone_ids'].append(
(0, 0, {'type': type, partner_phone_field: vals[partner_field]}))
vals["phone_ids"].append(
(0, 0, {"type": type, partner_phone_field: vals[partner_field]})
)
@api.model
def create(self, vals):
if 'phone_ids' not in vals:
vals['phone_ids'] = []
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, '5_mobile_primary', 'mobile', 'phone')
if "phone_ids" not in vals:
vals["phone_ids"] = []
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, "5_mobile_primary", "mobile", "phone")
# self._update_create_vals(vals, '7_fax_primary', 'fax', 'phone')
return super().create(vals)
def _update_write_vals(
self, vals, type, partner_field, partner_phone_field):
def _update_write_vals(self, vals, type, partner_field, partner_phone_field):
self.ensure_one()
rppo = self.env['res.partner.phone']
rppo = self.env["res.partner.phone"]
if partner_field in vals:
pphone = rppo.search([
('partner_id', '=', self.id),
('type', '=', type)], limit=1)
pphone = rppo.search(
[("partner_id", "=", self.id), ("type", "=", type)], limit=1
)
if vals[partner_field]:
if pphone:
vals['phone_ids'].append((1, pphone.id, {
partner_phone_field: vals[partner_field]}))
vals["phone_ids"].append(
(1, pphone.id, {partner_phone_field: vals[partner_field]})
)
else:
vals['phone_ids'].append((0, 0, {
'type': type,
partner_phone_field: vals[partner_field],
}))
vals["phone_ids"].append(
(
0,
0,
{
"type": type,
partner_phone_field: vals[partner_field],
},
)
)
else:
if pphone:
vals['phone_ids'].append((2, pphone.id))
vals["phone_ids"].append((2, pphone.id))
def write(self, vals):
if 'phone_ids' not in vals:
if "phone_ids" not in vals:
for rec in self:
vals['phone_ids'] = []
rec._update_write_vals(vals, '1_email_primary', 'email', 'email')
rec._update_write_vals(vals, '3_phone_primary', 'phone', 'phone')
rec._update_write_vals(vals, '5_mobile_primary', 'mobile', 'phone')
rec._update_write_vals(vals, '7_fax_primary', 'fax', 'phone')
vals["phone_ids"] = []
rec._update_write_vals(vals, "1_email_primary", "email", "email")
rec._update_write_vals(vals, "3_phone_primary", "phone", "phone")
rec._update_write_vals(vals, "5_mobile_primary", "mobile", "phone")
rec._update_write_vals(vals, "7_fax_primary", "fax", "phone")
super(ResPartner, rec).write(vals)
return True
else:

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2014-2020 Abbaye du Barroux (http://www.barroux.org)
Copyright 2016-2020 Akretion (http://www.akretion.com>)
@@ -6,20 +6,31 @@
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<!-- Partner phones -->
<record id="res_partner_phone_tree" model="ir.ui.view">
<field name="name">res.partner.phone.tree</field>
<field name="model">res.partner.phone</field>
<field name="arch" type="xml">
<field name="arch" type="xml">
<tree editable="bottom">
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
<field name="type"/>
<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="note"/>
<field
name="partner_id"
invisible="not context.get('partner_phone_main_view')"
/>
<field name="type" />
<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="note" />
</tree>
</field>
</record>
@@ -27,14 +38,26 @@
<record id="res_partner_phone_form" model="ir.ui.view">
<field name="name">res.partner.phone.form</field>
<field name="model">res.partner.phone</field>
<field name="arch" type="xml">
<field name="arch" type="xml">
<form>
<group name="main">
<field name="partner_id" invisible="not context.get('partner_phone_main_view')"/>
<field name="type"/>
<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="note"/>
<field
name="partner_id"
invisible="not context.get('partner_phone_main_view')"
/>
<field name="type" />
<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="note" />
</group>
</form>
</field>
@@ -43,12 +66,16 @@
<record id="res_partner_phone_search" model="ir.ui.view">
<field name="name">res.partner.phone.search</field>
<field name="model">res.partner.phone</field>
<field name="arch" type="xml">
<field name="arch" type="xml">
<search>
<field name="phone" />
<field name="email" />
<group name="groupby">
<filter name="type_groupby" string="Type" context="{'group_by': 'type'}"/>
<filter
name="type_groupby"
string="Type"
context="{'group_by': 'type'}"
/>
</group>
</search>
</field>
@@ -61,8 +88,12 @@
<field name="context">{'partner_phone_main_view': True}</field>
</record>
<menuitem id="res_partner_phone_menu" action="res_partner_phone_action"
parent="contacts.menu_contacts" sequence="10"/>
<menuitem
id="res_partner_phone_menu"
action="res_partner_phone_action"
parent="contacts.menu_contacts"
sequence="10"
/>
<record id="contacts.res_partner_menu_config" model="ir.ui.menu">
<field name="sequence">20</field>
@@ -72,12 +103,12 @@
<record id="view_partner_form" model="ir.ui.view">
<field name="name">add.phone_ids.on.partner.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="mail.res_partner_view_form_inherit_mail"/>
<field name="inherit_id" ref="mail.res_partner_view_form_inherit_mail" />
<!-- This module depends on contacts which depends on mail
and the mail module replaces the email field -->
<field name="arch" type="xml">
<field name="arch" type="xml">
<field name="phone" position="after">
<field name="phone_ids" nolabel="1" colspan="2"/>
<field name="phone_ids" nolabel="1" colspan="2" />
</field>
<field name="phone" position="attributes">
<attribute name="invisible">1</attribute>
@@ -101,13 +132,22 @@
<field name="phone_ids" nolabel="1" colspan="2" widget="many2many_tags"/>
</xpath>
-->
<xpath expr="//field[@name='child_ids']/form//field[@name='phone']" position="attributes">
<xpath
expr="//field[@name='child_ids']/form//field[@name='phone']"
position="attributes"
>
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']/form//field[@name='mobile']" position="attributes">
<xpath
expr="//field[@name='child_ids']/form//field[@name='mobile']"
position="attributes"
>
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='child_ids']/form//field[@name='email']" position="attributes">
<xpath
expr="//field[@name='child_ids']/form//field[@name='email']"
position="attributes"
>
<attribute name="readonly">1</attribute>
</xpath>
</field>
@@ -116,10 +156,10 @@
<record id="view_partner_simple_form" model="ir.ui.view">
<field name="name">add.phone_ids.on.res.partner.simplified.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_simple_form"/>
<field name="inherit_id" ref="base.view_partner_simple_form" />
<field name="arch" type="xml">
<field name="phone" position="after">
<field name="phone_ids" nolabel="1" colspan="2"/>
<field name="phone_ids" nolabel="1" colspan="2" />
</field>
<field name="phone" position="attributes">
<attribute name="invisible">1</attribute>
@@ -136,10 +176,10 @@
<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="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 name="phone_ids" nolabel="1" colspan="2" />
</field>
<field name="phone" position="attributes">
<attribute name="invisible">1</attribute>
@@ -156,10 +196,12 @@
<record id="view_res_partner_filter" model="ir.ui.view">
<field name="name">phone.one2many.res.partner.search</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base_usability.view_res_partner_filter"/>
<field name="inherit_id" ref="base_usability.view_res_partner_filter" />
<field name="arch" type="xml">
<field name="name" position="attributes">
<attribute name="filter_domain">['|', '|', ('display_name', 'ilike', self), ('ref', '=ilike', self + '%'), ('phone_ids.email', 'ilike', self)]</attribute>
<attribute
name="filter_domain"
>['|', '|', ('display_name', 'ilike', self), ('ref', '=ilike', self + '%'), ('phone_ids.email', 'ilike', self)]</attribute>
</field>
</field>
</record>

View File

@@ -2,48 +2,61 @@
# @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
import logging
from odoo import SUPERUSER_ID, api
logger = logging.getLogger(__name__)
def create_partner_phone(cr, phone_field, phone_type):
cr.execute(
'SELECT id, ' + phone_field + ' FROM res_partner WHERE ' +
phone_field + ' IS NOT null AND ' + phone_field + "!= ''")
"SELECT id, "
+ phone_field
+ " FROM res_partner WHERE "
+ phone_field
+ " IS NOT null AND "
+ phone_field
+ "!= ''"
)
to_create = []
for partner in cr.fetchall():
to_create.append({
'partner_id': partner[0],
'type': phone_type,
'phone': partner[1],
})
to_create.append(
{
"partner_id": partner[0],
"type": phone_type,
"phone": partner[1],
}
)
return to_create
def create_partner_email(cr):
cr.execute(
"SELECT id, email FROM res_partner WHERE email IS NOT null AND email != ''")
"SELECT id, email FROM res_partner WHERE email IS NOT null AND email != ''"
)
to_create = []
for partner in cr.fetchall():
to_create.append({
'partner_id': partner[0],
'type': '1_email_primary',
'email': partner[1],
})
to_create.append(
{
"partner_id": partner[0],
"type": "1_email_primary",
"email": partner[1],
}
)
return to_create
def migrate_to_partner_phone(cr, registry):
logger.info('start data migration for one2many_phone')
logger.info("start data migration for one2many_phone")
with api.Environment.manage():
env = api.Environment(cr, SUPERUSER_ID, {})
rppo = env['res.partner.phone']
rppo = env["res.partner.phone"]
to_create = []
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, "phone", "3_phone_primary")
to_create += create_partner_phone(cr, "mobile", "5_mobile_primary")
to_create += create_partner_email(cr)
# I need to create all at the end for invalidation purposes
rppo.create(to_create)
logger.info('end data migration for one2many_phone')
logger.info("end data migration for one2many_phone")
return

View File

@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2019 Barroux Abbey
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@@ -7,39 +6,40 @@ from odoo.tests.common import TransactionCase
class TestPartnerPhone(TransactionCase):
def setUp(self):
super(TestPartnerPhone, self).setUp()
def _check_result(self, partner, result):
rppo = self.env['res.partner.phone']
rppo = self.env["res.partner.phone"]
pphone_email = rppo.search(
[('type', '=', '1_email_primary'), ('partner_id', '=', partner.id)])
if result['email']:
self.assertEqual(partner.email, result['email'])
[("type", "=", "1_email_primary"), ("partner_id", "=", partner.id)]
)
if result["email"]:
self.assertEqual(partner.email, result["email"])
self.assertEqual(len(pphone_email), 1)
self.assertEqual(pphone_email.email, result['email'])
self.assertEqual(pphone_email.email, result["email"])
else:
self.assertFalse(partner.email)
self.assertFalse(pphone_email)
if result['phone']:
self.assertEqual(partner.phone, result['phone'])
if result["phone"]:
self.assertEqual(partner.phone, result["phone"])
else:
self.assertFalse(partner.phone)
if result['mobile']:
self.assertEqual(partner.mobile, result['mobile'])
if result["mobile"]:
self.assertEqual(partner.mobile, result["mobile"])
else:
self.assertFalse(partner.mobile)
field2type = {
'phone': '3_phone_primary',
'mobile': '5_mobile_primary',
'fax': '7_fax_primary',
}
"phone": "3_phone_primary",
"mobile": "5_mobile_primary",
"fax": "7_fax_primary",
}
for field, value in result.items():
if field in field2type:
type = field2type[field]
pphone = rppo.search(
[('type', '=', type), ('partner_id', '=', partner.id)])
[("type", "=", type), ("partner_id", "=", partner.id)]
)
if value:
self.assertEqual(len(pphone), 1)
self.assertEqual(pphone.phone, value)
@@ -47,88 +47,105 @@ class TestPartnerPhone(TransactionCase):
self.assertFalse(pphone)
def test_create_partner(self):
rpo = self.env['res.partner']
p = rpo.create({
'name': 'Test Me',
'email': 'testme@example.com',
'phone': '+33198089246',
'mobile': '+33198089247',
})
result = {
'email': 'testme@example.com',
'phone': '+33198089246',
'mobile': '+33198089247',
rpo = self.env["res.partner"]
p = rpo.create(
{
"name": "Test Me",
"email": "testme@example.com",
"phone": "+33198089246",
"mobile": "+33198089247",
}
)
result = {
"email": "testme@example.com",
"phone": "+33198089246",
"mobile": "+33198089247",
}
self._check_result(p, result)
p2 = rpo.create({
'name': 'Test me now',
'email': 'testmenow@example.com',
'phone': '+33972727272',
})
result = {
'email': 'testmenow@example.com',
'phone': '+33972727272',
'mobile': False,
p2 = rpo.create(
{
"name": "Test me now",
"email": "testmenow@example.com",
"phone": "+33972727272",
}
)
result = {
"email": "testmenow@example.com",
"phone": "+33972727272",
"mobile": False,
}
self._check_result(p2, result)
p3 = rpo.create({
'name': 'Test me now',
'phone_ids': [
(0, 0, {'type': '3_phone_primary', 'phone': '+33972727272'}),
(0, 0, {'type': '1_email_primary', 'email': 'tutu@example.fr'})],
})
result = {
'email': 'tutu@example.fr',
'phone': '+33972727272',
'mobile': False,
p3 = rpo.create(
{
"name": "Test me now",
"phone_ids": [
(0, 0, {"type": "3_phone_primary", "phone": "+33972727272"}),
(0, 0, {"type": "1_email_primary", "email": "tutu@example.fr"}),
],
}
)
result = {
"email": "tutu@example.fr",
"phone": "+33972727272",
"mobile": False,
}
self._check_result(p3, result)
def test_write_partner(self):
p1 = self.env['res.partner'].create({
'name': 'test me now',
'country_id': self.env.ref('base.fr').id,
})
p1 = self.env["res.partner"].create(
{
"name": "test me now",
"country_id": self.env.ref("base.fr").id,
}
)
result_none = {
'email': False,
'phone': False,
'mobile': False,
}
"email": False,
"phone": False,
"mobile": False,
}
self._check_result(p1, result_none)
p1.write({
'mobile': '+33198089247',
'email': 'testmenow@example.com',
})
result = {
'email': 'testmenow@example.com',
'phone': False,
'mobile': '+33198089247',
p1.write(
{
"mobile": "+33198089247",
"email": "testmenow@example.com",
}
self._check_result(p1, result)
p1.write({
'email': 'testmenow2@example.com',
'phone': False,
'mobile': '+33472727272',
})
)
result = {
'email': 'testmenow2@example.com',
'phone': False,
'mobile': '+33472727272',
}
"email": "testmenow@example.com",
"phone": False,
"mobile": "+33198089247",
}
self._check_result(p1, result)
p1.write({
'phone': False,
'mobile': False,
'email': False,
})
p1.write(
{
"email": "testmenow2@example.com",
"phone": False,
"mobile": "+33472727272",
}
)
result = {
"email": "testmenow2@example.com",
"phone": False,
"mobile": "+33472727272",
}
self._check_result(p1, result)
p1.write(
{
"phone": False,
"mobile": False,
"email": False,
}
)
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.write({'email': 'all@example.com', 'phone': '+33560606070'})
p_multi.write({"email": "all@example.com", "phone": "+33560606070"})
result = {
'email': 'all@example.com',
'phone': '+33560606070',
'mobile': False,
}
"email": "all@example.com",
"phone": "+33560606070",
"mobile": False,
}
self._check_result(p1, result)
self._check_result(p2, result)