diff --git a/partner_coc/__openerp__.py b/partner_coc/__openerp__.py index fda0f8da9..fb7e7e1cf 100644 --- a/partner_coc/__openerp__.py +++ b/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', diff --git a/partner_coc/i18n/nl_NL.po b/partner_coc/i18n/nl_NL.po index 23e9ed9bb..41dc8e290 100644 --- a/partner_coc/i18n/nl_NL.po +++ b/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 diff --git a/partner_coc/i18n/partner_coc.pot b/partner_coc/i18n/partner_coc.pot index 9c1b87898..01d9765e5 100644 --- a/partner_coc/i18n/partner_coc.pot +++ b/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 diff --git a/partner_coc/models/res_partner.py b/partner_coc/models/res_partner.py index a9889639c..9f2686b5b 100644 --- a/partner_coc/models/res_partner.py +++ b/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', ), } diff --git a/partner_identification/__openerp__.py b/partner_identification/__openerp__.py index 33426e63c..f57563da0 100644 --- a/partner_identification/__openerp__.py +++ b/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', diff --git a/partner_identification/models/res_partner.py b/partner_identification/models/res_partner.py index 52a902a4b..5e65eb4b3 100644 --- a/partner_identification/models/res_partner.py +++ b/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 diff --git a/partner_identification/models/res_partner_id_number.py b/partner_identification/models/res_partner_id_number.py index 244790391..1932b579e 100644 --- a/partner_identification/models/res_partner_id_number.py +++ b/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 = { diff --git a/partner_identification/views/res_partner_id_category_view.xml b/partner_identification/views/res_partner_id_category_view.xml index dca4e6dfd..69fd16d3b 100644 --- a/partner_identification/views/res_partner_id_category_view.xml +++ b/partner_identification/views/res_partner_id_category_view.xml @@ -6,7 +6,6 @@ res.partner.id_category.form res.partner.id_category - form
@@ -20,7 +19,6 @@ res.partner.id_category.tree res.partner.id_category - tree diff --git a/partner_identification/views/res_partner_id_number_view.xml b/partner_identification/views/res_partner_id_number_view.xml index 00f325ff8..b2803280c 100644 --- a/partner_identification/views/res_partner_id_number_view.xml +++ b/partner_identification/views/res_partner_id_number_view.xml @@ -5,7 +5,6 @@ res.partner.id_number.form res.partner.id_number - form @@ -27,7 +26,6 @@ res.partner.id_number.tree res.partner.id_number - tree