Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][MIG] partner_equal_ref_barcode: Migration to 16.0 #2535

Closed
Closed
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
47 changes: 47 additions & 0 deletions partner_equal_ref_barcode/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

==============================
Purchase Equal Ref and Barcode
==============================

* New functionality to maintain the same value on reference and
barcode fields for partners.
* New constraint to preserve the unique value for barcode field.


Configuration
===============
To configure this module, you need to:

1. Go to Settings > Companies.
2. Select a company.
3. Choose an option on section Partners.

Usage
===============
Go to any partner in Contacts > Contacts
Try to create two partners with the same barcode.

* If you selected the option 'All partners' you can't create two partners with the same barcode.
* If you selected the option 'Only companies' you can't create two companies with the same barcode.
* If you selected the option 'None' you can create two partners with the same barcode.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues
<https://github.com/avanzosc/odoo-addons/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.

Credits
=======

Contributors
------------
* Ana Juaristi <[email protected]>
* Adrian Revilla <[email protected]>

Do not contact contributors directly about support or help with technical issues.
1 change: 1 addition & 0 deletions partner_equal_ref_barcode/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
18 changes: 18 additions & 0 deletions partner_equal_ref_barcode/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2020 Adrian Revilla <[email protected]> - Avanzosc S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Partner Equal Ref and Barcode",
"version": "16.0.1.0.0",
"depends": [
"base",
],
"author": "AvanzOSC",
"license": "AGPL-3",
"website": "https://github.com/avanzosc/odoo-addons",
"data": [
"views/partner_equal_ref_barcode_view.xml",
],
"installable": True,
"auto_install": False,
}
60 changes: 60 additions & 0 deletions partner_equal_ref_barcode/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * partner_equal_ref_barcode
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-21 07:58+0000\n"
"PO-Revision-Date: 2020-05-21 07:58+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: partner_equal_ref_barcode
#: selection:res.company,partner_barcode_unique:0
msgid "All partners"
msgstr "Todos los partners"

#. module: partner_equal_ref_barcode
#: model:ir.model,name:partner_equal_ref_barcode.model_res_company
msgid "Companies"
msgstr "Compañías"

#. module: partner_equal_ref_barcode
#: model:ir.model,name:partner_equal_ref_barcode.model_res_partner
msgid "Contact"
msgstr "Contacto"

#. module: partner_equal_ref_barcode
#: selection:res.company,partner_barcode_unique:0
msgid "None"
msgstr "Ninguno"

#. module: partner_equal_ref_barcode
#: selection:res.company,partner_barcode_unique:0
msgid "Only companies"
msgstr "Solo compañías"

#. module: partner_equal_ref_barcode
#: model_terms:ir.ui.view,arch_db:partner_equal_ref_barcode.view_company_form
msgid "Partners"
msgstr "Socios"

#. module: partner_equal_ref_barcode
#: code:addons/partner_equal_ref_barcode/models/res_partner.py:42
#, python-format
msgid "This barcode is equal to partner '%s'"
msgstr "Este código de barras es igual al del parter '%s'"

#. module: partner_equal_ref_barcode
#: model:ir.model.fields,field_description:partner_equal_ref_barcode.field_res_company__partner_barcode_unique
#: model:ir.model.fields,field_description:partner_equal_ref_barcode.field_res_partner__partner_barcode_unique
#: model:ir.model.fields,field_description:partner_equal_ref_barcode.field_res_users__partner_barcode_unique
msgid "Unique partner barcode for"
msgstr "Código de barras único para el partner"

2 changes: 2 additions & 0 deletions partner_equal_ref_barcode/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import res_company
from . import res_partner
18 changes: 18 additions & 0 deletions partner_equal_ref_barcode/models/res_company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2020 Adrian Revilla <[email protected]> - Avanzosc S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResCompany(models.Model):
_inherit = "res.company"

partner_barcode_unique = fields.Selection(
selection=[
("none", "None"),
("companies", "Only companies"),
("all", "All partners"),
],
string="Unique partner barcode for",
default="none",
)
43 changes: 43 additions & 0 deletions partner_equal_ref_barcode/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Copyright (c) 2020 Adrian Revilla <[email protected]> - Avanzosc S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import _, api, fields, models
from odoo.exceptions import ValidationError


class ResPartner(models.Model):
_inherit = "res.partner"

partner_barcode_unique = fields.Selection(
related="company_id.partner_barcode_unique",
store=True,
)

@api.onchange("ref")
def onchange_ref(self):
self.barcode = self.ref

@api.onchange("barcode")
def onchange_barcode(self):
self.ref = self.barcode

@api.constrains("barcode", "is_company", "company_id", "partner_barcode_unique")
def _check_barcode(self):
for partner in self:
mode = partner.partner_barcode_unique
if partner.barcode and (
mode == "all" or (mode == "companies" and partner.is_company)
):
domain = [
("id", "!=", partner.id),
("barcode", "=", partner.barcode),
]
if mode == "companies":
domain.append(("is_company", "=", True))
other = self.search(domain)

if other and self.env.context.get("active_test", True):
raise ValidationError(
_("This barcode is equal to partner '%s'")
% other[0].display_name
)
1 change: 1 addition & 0 deletions partner_equal_ref_barcode/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_partner_barcode
89 changes: 89 additions & 0 deletions partner_equal_ref_barcode/tests/test_partner_barcode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Copyright (c) 2020 Adrian Revilla <[email protected]> - Avanzosc S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo.exceptions import ValidationError
from odoo.tests import common


class TestPartnerBarcode(common.SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.ref("base.main_company")
cls.partner_obj = cls.env["res.partner"]
cls.p1 = cls.partner_obj.create(
{
"name": "p1",
}
)
cls.p2 = cls.partner_obj.create(
{
"name": "p2",
}
)

def test_check_barcode_company(self):
# Test can create/modify partners with same barcode
self.company.partner_barcode_unique = "none"
self.p1.barcode = "equal_barcode"
self.p2.barcode = "equal_barcode"
self.assertEqual(self.p1.barcode, self.p2.barcode)
# Here there shouldn't be any problem
self.partner_obj.create(
{
"name": "other",
"barcode": "equal_barcode",
}
)
self.p2.barcode = False
with self.assertRaises(ValidationError):
self.company.partner_barcode_unique = "all"

def test_check_barcode(self):
self.p1.barcode = "equal_barcode"
# Test can't create/modify partner with same barcode
self.company.partner_barcode_unique = "all"
with self.assertRaises(ValidationError):
self.p2.barcode = "equal_barcode"
with self.assertRaises(ValidationError):
self.partner_obj.create(
{
"name": "other",
"barcode": "equal_barcode",
}
)
# Test can't create/modify companies with same barcode
self.company.partner_barcode_unique = "companies"
self.p2.barcode = "equal_barcode"
self.assertEqual(self.p1.barcode, self.p2.barcode)
self.p2.barcode = False
self.p1.is_company = True
self.p2.is_company = True
with self.assertRaises(ValidationError):
self.p2.barcode = "equal_barcode"
with self.assertRaises(ValidationError):
self.partner_obj.create(
{
"is_company": True,
"name": "other",
"barcode": "equal_barcode",
}
)
# Here there shouldn't be any problem
self.partner_obj.create(
{
"is_company": False,
"name": "other",
"barcode": "equal_barcode",
}
)

def test_onchange_ref_barcode(self):
self.p1.barcode = "barcode_ref"
self.assertNotEqual(self.p1.barcode, self.p1.ref)
self.p1.onchange_barcode()
self.assertEqual(self.p1.barcode, self.p1.ref)
self.p2.ref = "ref_barcode"
self.assertNotEqual(self.p2.ref, self.p2.barcode)
self.p2.onchange_ref()
self.assertEqual(self.p2.ref, self.p2.barcode)
15 changes: 15 additions & 0 deletions partner_equal_ref_barcode/views/partner_equal_ref_barcode_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_company_form" model="ir.ui.view">
<field name="name">Add partner_barcode_unique field</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form" />
<field name="arch" type="xml">
<group name="social_media" position="before">
<group name="partner" string="Partners">
<field name="partner_barcode_unique" />
</group>
</group>
</field>
</record>
</odoo>
6 changes: 6 additions & 0 deletions setup/partner_equal_ref_barcode/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading