From fcce90caeaa834331f81a6ef658ec77fbbfa4719 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 28 Jul 2014 10:04:08 +0200 Subject: [PATCH 1/3] [ADD] partner_relations_in_tab --- partner_relations_in_tab/__init__.py | 21 ++ partner_relations_in_tab/__openerp__.py | 52 +++++ partner_relations_in_tab/model/__init__.py | 22 ++ partner_relations_in_tab/model/res_partner.py | 189 ++++++++++++++++++ .../model/res_partner_relation_type.py | 90 +++++++++ .../static/src/img/icon.png | Bin 0 -> 18407 bytes .../view/res_partner_relation_type.xml | 20 ++ 7 files changed, 394 insertions(+) create mode 100644 partner_relations_in_tab/__init__.py create mode 100644 partner_relations_in_tab/__openerp__.py create mode 100644 partner_relations_in_tab/model/__init__.py create mode 100644 partner_relations_in_tab/model/res_partner.py create mode 100644 partner_relations_in_tab/model/res_partner_relation_type.py create mode 100644 partner_relations_in_tab/static/src/img/icon.png create mode 100644 partner_relations_in_tab/view/res_partner_relation_type.xml diff --git a/partner_relations_in_tab/__init__.py b/partner_relations_in_tab/__init__.py new file mode 100644 index 000000000..fcf92314d --- /dev/null +++ b/partner_relations_in_tab/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import model diff --git a/partner_relations_in_tab/__openerp__.py b/partner_relations_in_tab/__openerp__.py new file mode 100644 index 000000000..44c2baa30 --- /dev/null +++ b/partner_relations_in_tab/__openerp__.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + "name": "Show partner relations in own tab", + "version": "1.0", + "author": "Therp BV", + "license": "AGPL-3", + "complexity": "normal", + "description": """ +This module adds the possibility to show certain partner relations in its own +tab instead of the list of all relations. This can be useful if certain +relation types are regularly used and should be overseeable at a glace. + """, + "category": "Customer Relationship Management", + "depends": [ + 'partner_relations', + 'web_compute_domain_x2many', + ], + "data": [ + "view/res_partner_relation_type.xml", + ], + "js": [ + ], + "css": [ + ], + "qweb": [ + ], + "auto_install": False, + "installable": True, + "application": False, + "external_dependencies": { + 'python': [], + }, +} diff --git a/partner_relations_in_tab/model/__init__.py b/partner_relations_in_tab/model/__init__.py new file mode 100644 index 000000000..45db75c31 --- /dev/null +++ b/partner_relations_in_tab/model/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import res_partner_relation_type +from . import res_partner diff --git a/partner_relations_in_tab/model/res_partner.py b/partner_relations_in_tab/model/res_partner.py new file mode 100644 index 000000000..636a5e259 --- /dev/null +++ b/partner_relations_in_tab/model/res_partner.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from lxml import etree +from openerp.osv.orm import Model, transfer_modifiers_to_node +from openerp.osv import expression +from openerp.tools.translate import _ + + +class ResPartner(Model): + _inherit = 'res.partner' + + def _get_relation_ids( + self, cr, uid, ids, dummy_name, dummy_arg, context=None): + if context is None: + context = {} + + #TODO: do a permission test on returned ids + cr.execute( + '''select r.id, left_partner_id, right_partner_id + from res_partner_relation r + join res_partner_relation_type t + on r.type_id = t.id + where ((left_partner_id in %s and own_tab_left=False) + or (right_partner_id in %s and own_tab_right=False))''' + + ' order by ' + self.pool['res.partner.relation']._order, + (tuple(ids), tuple(ids)) + ) + result = dict([(i, []) for i in ids]) + for row in cr.fetchall(): + if row[1] in result: + result[row[1]].append(row[0]) + if row[2] in result: + result[row[2]].append(row[0]) + return result + + def _create_relation_type_tab( + self, cr, uid, rel_type, inverse, field_names, context=None): + '''Create an xml node containing the relation's tab to be added to the + view. Add the field(s) created on the form to field_names.''' + name = rel_type.name if not inverse else rel_type.name_inverse + contact_type = rel_type['contact_type_' + + ('left' if not inverse else 'right')] + partner_category = rel_type['partner_category_' + + ('left' if not inverse + else 'right')] + tab = etree.Element('page') + tab.set('string', name) + + invisible = [('id', '=', False)] + if contact_type: + invisible = expression.OR([ + invisible, + [('is_company', '=', contact_type != 'c')]]) + if partner_category: + invisible = expression.OR([ + invisible, + [('category_id', '!=', partner_category.id)]]) + attrs = { + 'invisible': invisible, + } + tab.set('attrs', repr(attrs)) + transfer_modifiers_to_node(attrs, tab) + + field_name = 'relation_ids_own_tab_%s_%s' % ( + rel_type.id, + 'left' if not inverse else 'right') + field_names.append(field_name) + this_partner_name = '%s_partner_id' % ( + 'left' if not inverse else 'right') + other_partner_name = '%s_partner_id' % ( + 'left' if inverse else 'right') + + field = etree.Element( + 'field', + name=field_name, + context=('{"default_type_id": %s, "default_%s": id, ' + '"active_test": False}') % ( + rel_type.id, + this_partner_name)) + tab.append(field) + tree = etree.Element('tree', editable='bottom') + field.append(tree) + + onchange_type_values = self.pool['res.partner.relation']\ + .on_change_type_selection_id(cr, uid, None, + rel_type.id * 10 + + (1 if inverse else 0), + context=context) + tree.append(etree.Element( + 'field', + string=_('Partner'), + domain=repr( + onchange_type_values['domain']['partner_id_display']), + widget='many2one_clickable', + name=other_partner_name)) + tree.append(etree.Element( + 'field', + name='date_start')) + tree.append(etree.Element( + 'field', + name='date_end')) + tree.append(etree.Element( + 'field', + name='active')) + tree.append(etree.Element('field', name='type_id', + invisible='True')) + tree.append(etree.Element('field', name=this_partner_name, + invisible='True')) + return tab + + def _add_relation_type_tab( + self, cr, uid, rel_type, inverse, field_names, relation_tab, + context=None): + '''add the xml node to the view''' + tab = self._create_relation_type_tab( + cr, uid, rel_type, inverse, field_names, context=context) + relation_tab.addnext(tab) + + def fields_view_get(self, cr, uid, view_id=None, view_type='form', + context=None, toolbar=False, submenu=False): + if context is None: + context = {} + result = super(ResPartner, self).fields_view_get( + cr, uid, view_id=view_id, view_type=view_type, context=context, + toolbar=toolbar, submenu=submenu) + if view_type == 'form' and not context.get('check_view_ids'): + res_partner_relation_type = self.pool['res.partner.relation.type'] + own_tab_types = res_partner_relation_type.browse( + cr, uid, + res_partner_relation_type.search( + cr, uid, + [ + '|', + ('own_tab_left', '=', True), + ('own_tab_right', '=', True) + ], + context=context), + context=context) + view = etree.fromstring(result['arch']) + + relation_tab = view.xpath( + '//field[@name="relation_ids"]/ancestor::page') + if not relation_tab: + return result + relation_tab = relation_tab[0] + + field_names = [] + + if not view.xpath('//field[@name="id"]'): + view.append(etree.Element('field', name='id', + invisible='True')) + field_names.append('id') + + for rel_type in own_tab_types: + if rel_type.own_tab_left: + self._add_relation_type_tab( + cr, uid, rel_type, False, field_names, relation_tab, + context=context) + if rel_type.own_tab_right: + self._add_relation_type_tab( + cr, uid, rel_type, True, field_names, relation_tab, + context=context) + + result['arch'], fields = self\ + ._BaseModel__view_look_dom_arch( + cr, uid, view, result['view_id'], context=context) + + for field_name in field_names: + result['fields'][field_name] = fields[field_name] + + return result diff --git a/partner_relations_in_tab/model/res_partner_relation_type.py b/partner_relations_in_tab/model/res_partner_relation_type.py new file mode 100644 index 000000000..6a04d33f8 --- /dev/null +++ b/partner_relations_in_tab/model/res_partner_relation_type.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp.osv.orm import Model +from openerp.osv import fields +from openerp import SUPERUSER_ID + + +class ResPartnerRelationType(Model): + _inherit = 'res.partner.relation.type' + + _columns = { + 'own_tab_left': fields.boolean('Show in own tab'), + 'own_tab_right': fields.boolean('Show in own tab'), + } + + _defaults = { + 'own_tab_left': False, + 'own_tab_right': False, + } + + def _update_res_partner_fields(self, cr): + field_name_prefix = 'relation_ids_own_tab_' + field_name_format = field_name_prefix + '%s_%s' + res_partner = self.pool['res.partner'] + for field_name in res_partner._columns.copy(): + if field_name.startswith(field_name_prefix): + del res_partner._columns[field_name] + + def add_field(relation, inverse): + field = fields.one2many( + 'res.partner.relation', + '%s_partner_id' % ('left' if not inverse else 'right'), + string=relation['name' if not inverse else 'name_inverse'], + domain=[('type_id', '=', relation.id), + '|', + ('active', '=', True), + ('active', '=', False)]) + field_name = field_name_format % ( + relation.id, + 'left' if not inverse else 'right') + res_partner._columns[field_name] = field + + for relation in self.browse( + cr, SUPERUSER_ID, + self.search( + cr, SUPERUSER_ID, + [ + '|', + ('own_tab_left', '=', True), + ('own_tab_right', '=', True), + ])): + if relation.own_tab_left: + add_field(relation, False) + if relation.own_tab_right: + add_field(relation, True) + + def _register_hook(self, cr): + self._update_res_partner_fields(cr) + + def create(self, cr, uid, vals, context=None): + result = super(ResPartnerRelationType, self).create( + cr, uid, vals, context=context) + if vals.get('own_tab_left') or vals.get('own_tab_right'): + self._update_res_partner_fields(cr) + return result + + def write(self, cr, uid, ids, vals, context=None): + result = super(ResPartnerRelationType, self).write( + cr, uid, ids, vals, context=context) + if 'own_tab_left' in vals or 'own_tab_right' in vals: + self._update_res_partner_fields(cr) + return result diff --git a/partner_relations_in_tab/static/src/img/icon.png b/partner_relations_in_tab/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b219b220e874c919f20b361209fc886696027165 GIT binary patch literal 18407 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 literal 0 HcmV?d00001 diff --git a/partner_relations_in_tab/view/res_partner_relation_type.xml b/partner_relations_in_tab/view/res_partner_relation_type.xml new file mode 100644 index 000000000..117911258 --- /dev/null +++ b/partner_relations_in_tab/view/res_partner_relation_type.xml @@ -0,0 +1,20 @@ + + + + + res.partner.relation.type + form + + + + + + + + + + + + + + From e421eb864ec41bc3f46237d807933e165e88b2d9 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 13 Aug 2014 14:35:42 +0200 Subject: [PATCH 2/3] [RFR] use refactoring in partner_relations --- partner_relations_in_tab/model/res_partner.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/partner_relations_in_tab/model/res_partner.py b/partner_relations_in_tab/model/res_partner.py index 636a5e259..ab7b3e57a 100644 --- a/partner_relations_in_tab/model/res_partner.py +++ b/partner_relations_in_tab/model/res_partner.py @@ -27,12 +27,8 @@ from openerp.tools.translate import _ class ResPartner(Model): _inherit = 'res.partner' - def _get_relation_ids( - self, cr, uid, ids, dummy_name, dummy_arg, context=None): - if context is None: - context = {} - - #TODO: do a permission test on returned ids + def _get_relation_ids_select(self, cr, uid, ids, field_name, arg, + context=None): cr.execute( '''select r.id, left_partner_id, right_partner_id from res_partner_relation r @@ -43,13 +39,7 @@ class ResPartner(Model): ' order by ' + self.pool['res.partner.relation']._order, (tuple(ids), tuple(ids)) ) - result = dict([(i, []) for i in ids]) - for row in cr.fetchall(): - if row[1] in result: - result[row[1]].append(row[0]) - if row[2] in result: - result[row[2]].append(row[0]) - return result + return cr.fetchall() def _create_relation_type_tab( self, cr, uid, rel_type, inverse, field_names, context=None): From ebc3e22d853d062fb5fe95bcf04a916d92b57d01 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 25 Nov 2014 10:12:37 +0100 Subject: [PATCH 3/3] [ADD] translations --- partner_relations_in_tab/i18n/nl.po | 43 +++++++++++++++++++ .../i18n/partner_relations_in_tab.pot | 43 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 partner_relations_in_tab/i18n/nl.po create mode 100644 partner_relations_in_tab/i18n/partner_relations_in_tab.pot diff --git a/partner_relations_in_tab/i18n/nl.po b/partner_relations_in_tab/i18n/nl.po new file mode 100644 index 000000000..3382c1442 --- /dev/null +++ b/partner_relations_in_tab/i18n/nl.po @@ -0,0 +1,43 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * partner_relations_in_tab +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-25 09:08+0000\n" +"PO-Revision-Date: 2014-11-25 09:08+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_relations_in_tab +#: field:res.partner,id:0 +msgid "Id" +msgstr "Id" + +#. module: partner_relations_in_tab +#: code:_description:0 +#: model:ir.model,name:partner_relations_in_tab.model_res_partner_relation_type +#, python-format +msgid "Parter relation type" +msgstr "Type relatiekoppeling" + +#. module: partner_relations_in_tab +#: code:_description:0 +#: code:addons/partner_relations_in_tab/model/res_partner.py:99 +#: model:ir.model,name:partner_relations_in_tab.model_res_partner +#, python-format +msgid "Partner" +msgstr "Relatie" + +#. module: partner_relations_in_tab +#: field:res.partner.relation.type,own_tab_left:0 +#: field:res.partner.relation.type,own_tab_right:0 +msgid "Show in own tab" +msgstr "Toon in eigen tabblad" + diff --git a/partner_relations_in_tab/i18n/partner_relations_in_tab.pot b/partner_relations_in_tab/i18n/partner_relations_in_tab.pot new file mode 100644 index 000000000..0d1815e3c --- /dev/null +++ b/partner_relations_in_tab/i18n/partner_relations_in_tab.pot @@ -0,0 +1,43 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * partner_relations_in_tab +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-25 09:08+0000\n" +"PO-Revision-Date: 2014-11-25 09:08+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_relations_in_tab +#: field:res.partner,id:0 +msgid "Id" +msgstr "" + +#. module: partner_relations_in_tab +#: code:_description:0 +#: model:ir.model,name:partner_relations_in_tab.model_res_partner_relation_type +#, python-format +msgid "Parter relation type" +msgstr "" + +#. module: partner_relations_in_tab +#: code:_description:0 +#: code:addons/partner_relations_in_tab/model/res_partner.py:99 +#: model:ir.model,name:partner_relations_in_tab.model_res_partner +#, python-format +msgid "Partner" +msgstr "" + +#. module: partner_relations_in_tab +#: field:res.partner.relation.type,own_tab_left:0 +#: field:res.partner.relation.type,own_tab_right:0 +msgid "Show in own tab" +msgstr "" +