Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions partner_firstname/models/firstname_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ def _get_inverse_name(self, name, is_company=False):
"""
# Company name goes to the lastname
if is_company or not name:
parts = [name or False, False]
parts = [name or "", ""]
# Guess name splitting
else:
order = self._get_names_order()
Expand Down Expand Up @@ -164,9 +164,9 @@ def _check_name(self):
for record in self:
if any(
[
record.is_company and not record.name,
record.firstname_required and not record.firstname,
record.lastname_required and not record.lastname,
record.is_company and type(record.name) is not str,
record.firstname_required and type(record.firstname) is not str,
record.lastname_required and type(record.lastname) is not str,
]
):
raise exceptions.EmptyNamesError(record, self.env)
7 changes: 7 additions & 0 deletions partner_firstname/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,10 @@ def _install_partner_firstname(self):
# Disabling SQL constraint givint a more explicit error using a Python
# contstraint
_sql_constraints = [("check_name", "CHECK( 1=1 )", "Contacts require a name.")]

@api.model
def name_create(self, name):
if not name:
record = self.create(self._get_inverse_name(name))
return record.id, record.display_name
return super().name_create(name)
5 changes: 5 additions & 0 deletions partner_firstname/tests/test_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ def test_no_name(self):
"""Name is calculated."""
del self.values["name"]

def test_only_name(self):
"""Name is inversed."""
del self.values["firstname"]
del self.values["lastname"]

def test_wrong_name_value(self):
"""Wrong name value is ignored, name is calculated."""
self.values["name"] = "BÄD"
Expand Down
4 changes: 1 addition & 3 deletions partner_firstname/tests/test_empty.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

from odoo.tests import TransactionCase

from .. import exceptions as ex
from .base import MailInstalled


Expand All @@ -22,8 +21,7 @@ def tearDown(self):
try:
data = {"name": self.name}
model = self.env[self.model].with_context(**self.context)
with self.assertRaises(ex.EmptyNamesError):
model.create(data)
model.create(data)
finally:
super().tearDown()

Expand Down
2 changes: 1 addition & 1 deletion partner_firstname/tests/test_name.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def test_copy(self):
def test_company_inverse(self):
"""Test the inverse method in a company record."""
name = "Thïs is a Companŷ"
self.expect(name, False, name)
self.expect(name, "", name)
self.original.name = name


Expand Down
8 changes: 8 additions & 0 deletions partner_firstname/tests/test_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,11 @@ def test_get_inverse_name(self):
result = self.env["res.partner"]._get_inverse_name(name)
self.assertEqual(result["lastname"], lastname)
self.assertEqual(result["firstname"], firstname)

def test_name_create_empty(self):
# See addons/mail/tests/test_res_partner.py test_name_create_corner_cases
for name in ("", " ", False, None):
with self.subTest(name=name):
res_id = self.env["res.partner"].name_create("")[0]
record = self.env["res.partner"].browse(res_id)
self.assertEqual(record.name, "")
16 changes: 6 additions & 10 deletions partner_firstname/tests/test_partner_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@

from odoo.tests import Form, TransactionCase

from ..exceptions import EmptyNamesError


class PartnerCompanyCase(TransactionCase):
is_company = True
Expand All @@ -21,7 +19,7 @@ def test_create_from_form(self):
partner_form.name = name

self.assertEqual(partner_form.name, name)
self.assertEqual(partner_form.firstname, False)
self.assertEqual(partner_form.firstname, "")
self.assertEqual(partner_form.lastname, name)

def test_empty_name(self):
Expand All @@ -39,20 +37,18 @@ def test_empty_name(self):
# call save to trigger the inverse
partner_form.save()
self.assertEqual(partner_form.name, name)
self.assertEqual(partner_form.firstname, False)
self.assertEqual(partner_form.firstname, "")
self.assertEqual(partner_form.lastname, name)

# User unsets name
partner_form.name = ""
# call save to trigger the inverse and therefore raise an exception
with self.assertRaises(EmptyNamesError), self.env.cr.savepoint():
partner_form.save()
partner_form.save()

name += " bis"
partner_form.name = name
partner_form.save()
self.assertEqual(partner_form.name, name)
self.assertEqual(partner_form.firstname, False)
self.assertEqual(partner_form.firstname, "")

# assert below will fail until merge of
# https://github.com/odoo/odoo/pull/45355
Expand All @@ -71,7 +67,7 @@ def test_create_from_form_only_firstname(self):
# Changes firstname, which triggers compute
partner_form.firstname = firstname

self.assertEqual(partner_form.lastname, False)
self.assertEqual(partner_form.lastname, "")
self.assertEqual(partner_form.firstname, firstname)
self.assertEqual(partner_form.name, firstname)

Expand All @@ -84,7 +80,7 @@ def test_create_from_form_only_lastname(self):
# Changes lastname, which triggers compute
partner_form.lastname = lastname

self.assertEqual(partner_form.firstname, False)
self.assertEqual(partner_form.firstname, "")
self.assertEqual(partner_form.lastname, lastname)
self.assertEqual(partner_form.name, lastname)

Expand Down
4 changes: 2 additions & 2 deletions partner_firstname/tests/test_user_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_create_from_form_only_firstname(self):
# Changes firstname, which triggers onchanges
user_form.firstname = firstname

self.assertEqual(user_form.lastname, False)
self.assertEqual(user_form.lastname, "")
self.assertEqual(user_form.firstname, firstname)
self.assertEqual(user_form.name, firstname)

Expand All @@ -27,7 +27,7 @@ def test_create_from_form_only_lastname(self):
# Changes lastname, which triggers onchanges
user_form.lastname = lastname

self.assertEqual(user_form.firstname, False)
self.assertEqual(user_form.firstname, "")
self.assertEqual(user_form.lastname, lastname)
self.assertEqual(user_form.name, lastname)

Expand Down
Loading