Browse Source

[FIX] partner_identification. Fixes after review.

pull/711/head
Ronald Portier 6 years ago
parent
commit
716d9f3507
  1. 2
      partner_coc/__openerp__.py
  2. 2
      partner_coc/i18n/nl_NL.po
  3. 2
      partner_coc/i18n/partner_coc.pot
  4. 4
      partner_coc/models/res_partner.py
  5. 7
      partner_identification/__openerp__.py
  6. 90
      partner_identification/models/res_partner.py
  7. 4
      partner_identification/models/res_partner_id_number.py
  8. 2
      partner_identification/views/res_partner_id_category_view.xml
  9. 2
      partner_identification/views/res_partner_id_number_view.xml

2
partner_coc/__openerp__.py

@ -6,6 +6,8 @@
"partner",
'version': '7.0.1.0.0',
'category': 'Web',
'description':
"""Adds a field 'Chamber Of Commerce Registration Number' to partner.""",
'author': 'Onestein,Odoo Community Association (OCA)',
'website': 'https://github.com/oca/partner-contact',
'license': 'AGPL-3',

2
partner_coc/i18n/nl_NL.po

@ -27,7 +27,7 @@ msgstr "Kamer van Koophandel registratienummer"
#. module: partner_coc
#: field:res.partner,coc_registration_number:0
msgid "Chamber of Commerce"
msgid "CoC Registration Number"
msgstr "KvK-nummer"
#. module: partner_coc

2
partner_coc/i18n/partner_coc.pot

@ -20,7 +20,7 @@ msgstr ""
#. module: partner_coc
#: field:res.partner,coc_registration_number:0
msgid "Chamber of Commerce"
msgid "CoC Registration Number"
msgstr ""
#. module: partner_coc

4
partner_coc/models/res_partner.py

@ -18,7 +18,7 @@ class ResPartner(orm.Model):
type='char',
fnct_search=lambda self, *args, **kwargs:
self._search_identification(*args, **kwargs),
method=True, store=True, readonly=False,
string='Chamber of Commerce',
method=True, readonly=False,
string='CoC Registration Number',
),
}

7
partner_identification/__openerp__.py

@ -12,6 +12,13 @@
{
'name': 'Partner Identification Numbers',
'category': 'Customer Relationship Management',
'description': """Manage partner identifications.
This includes searching partners on identification, and also a
framework for adding identification fields for specific types of
identification (passpost, drivers license, chamber of commerce id...),
with common methods to maintain those fields.
""",
'version': '7.0.1.1.1',
'data': [
'views/res_partner_id_category_view.xml',

90
partner_identification/models/res_partner.py

@ -11,6 +11,7 @@
# pylint: disable=protected-access,unused-argument,no-self-use
from openerp.osv import orm, fields
from openerp.tools.translate import _
from openerp.osv.expression import is_leaf, AND
class ResPartner(orm.Model):
@ -25,26 +26,26 @@ class ResPartner(orm.Model):
Example:
.. code-block:: python
_columns = {
'social_security': fields.function(
lambda self, *args, **kwargs:
self._compute_identification(*args, **kwargs),
arg='SSN',
fnct_inv=lambda self, *args, **kwargs:
self._inverse_identification(*args, **kwargs),
fnct_inv_arg='SSN',
type='char',
fnct_search=lambda self, *args, **kwargs:
self._search_identification(*args, **kwargs),
method=True, store=True, readonly=False,
string='Social Security Number',
),
}
The field attributes arg and fnct_inv_arg must be set to a valid
category code, to be provided by the module data of the module
adding the field.
"""
_columns = {
'social_security': fields.function(
lambda self, *args, **kwargs:
self._compute_identification(*args, **kwargs),
arg='SSN',
fnct_inv=lambda self, *args, **kwargs:
self._inverse_identification(*args, **kwargs),
fnct_inv_arg='SSN',
type='char',
fnct_search=lambda self, *args, **kwargs:
self._search_identification(*args, **kwargs),
method=True, readonly=False,
string='Social Security Number',
),
}
The field attributes arg and fnct_inv_arg must be set to a valid
category code, to be provided by the module data of the module
adding the field.
"""
_inherit = 'res.partner'
_columns = {
@ -102,20 +103,11 @@ class ResPartner(orm.Model):
if not field_name or not field_value:
return
# Check, and if needed autocreate, category:
category_model = self.pool['res.partner.id_category']
category_ids = category_model.search(
cr, uid, [('code', '=', category_code)], context=context)
if not category_ids:
category_id = category_model.create(
cr, uid, {
'code': category_code,
'name': category_code},
context=context)
else:
category_id = category_ids[0]
category_id = self._get_create_category(
cr, uid, category_code, context=context)
id_model = self.pool['res.partner.id_number']
for record in self.browse(cr, uid, [ids], context=context):
# Search al records with the right category.
for record in self.browse(cr, uid, ids, context=context):
# Search all records with the right category.
id_number_ids = id_model.search(
cr, uid, [
('partner_id', '=', record.id),
@ -139,11 +131,7 @@ class ResPartner(orm.Model):
return
# There was an identification record singleton found.
id_model.write(
cr, uid, id_number_ids, {
'partner_id': record.id,
'category_id': category_id,
'name': field_value},
context=context)
cr, uid, id_number_ids, {'name': field_value}, context=context)
def _search_identification(
self, cr, uid, dummy_obj, field_name, args, context=None):
@ -157,11 +145,25 @@ class ResPartner(orm.Model):
Returns:
list: Domain to search with.
"""
result = []
category_code = self._columns[field_name]._arg
category_id = self._get_create_category(
cr, uid, category_code, context=context)
result = [('id_numbers.category_id.id', '=', category_id)]
for arg in args:
if isinstance(arg, tuple) and arg[0] == field_name:
result.append(
('id_numbers.name',
arg[1],
arg[2]))
if is_leaf(arg) and arg[0] == field_name:
result = AND([result, [('id_numbers.name', arg[1], arg[2])]])
return result
def _get_create_category(self, cr, uid, category_code, context=None):
"""Get category for code, create if not exists."""
category_model = self.pool['res.partner.id_category']
category_ids = category_model.search(
cr, uid, [('code', '=', category_code)], context=context)
if category_ids:
return category_ids[0]
category = category_model.create(
cr, uid, {
'code': category_code,
'name': category_code},
context=context)
return category.id

4
partner_identification/models/res_partner_id_number.py

@ -51,11 +51,13 @@ class ResPartnerIdNumber(orm.Model):
help="Expiration date. For example, date when person needs"
" to renew his driver license, 21/10/2019"),
'comment': fields.text("Notes"),
# TODO: rename status field to standard state.
'status': fields.selection(
[('draft', 'New'),
('open', 'Running'),
('pending', 'To Renew'),
('close', 'Expired')]),
('close', 'Expired')],
"Status"),
'active': fields.boolean(string="Active"),
}
_defaults = {

2
partner_identification/views/res_partner_id_category_view.xml

@ -6,7 +6,6 @@
<record id="view_partner_id_category_form" model="ir.ui.view">
<field name="name">res.partner.id_category.form</field>
<field name="model">res.partner.id_category</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partner Identification Categories">
<group>
@ -20,7 +19,6 @@
<record id="view_partner_id_category_tree" model="ir.ui.view">
<field name="name">res.partner.id_category.tree</field>
<field name="model">res.partner.id_category</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Partner Identification Categories">
<field name="name"/>

2
partner_identification/views/res_partner_id_number_view.xml

@ -5,7 +5,6 @@
<record id="view_partner_id_numbers_form" model="ir.ui.view">
<field name="name">res.partner.id_number.form</field>
<field name="model">res.partner.id_number</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partner ID Numbers">
<group>
@ -27,7 +26,6 @@
<record id="view_partner_id_numbers_tree" model="ir.ui.view">
<field name="name">res.partner.id_number.tree</field>
<field name="model">res.partner.id_number</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Partner ID Numbers">
<field name="category_id" />

Loading…
Cancel
Save