5 changed files with 148 additions and 134 deletions
-
1partner_relations_in_tab/__init__.py
-
137partner_relations_in_tab/model/res_partner.py
-
42partner_relations_in_tab/model/res_partner_relation_type.py
-
4partner_relations_in_tab/tablib/__init__.py
-
98partner_relations_in_tab/tablib/tab.py
@ -1,4 +1,5 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
# Copyright 2014-2018 Therp BV <https://therp.nl>. |
# Copyright 2014-2018 Therp BV <https://therp.nl>. |
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from . import tablib |
||||
from . import model |
from . import model |
@ -0,0 +1,4 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2018 Therp BV <https://therp.nl>. |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from .tab import Tab |
@ -0,0 +1,98 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2014-2018 Therp BV <https://therp.nl>. |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from lxml import etree |
||||
|
|
||||
|
from openerp.osv import expression |
||||
|
from openerp.osv.orm import transfer_modifiers_to_node |
||||
|
from openerp.tools.translate import _ |
||||
|
|
||||
|
|
||||
|
NAME_PREFIX = 'relation_ids_tab' |
||||
|
|
||||
|
|
||||
|
class Tab(object): |
||||
|
|
||||
|
def __init__(self, source, side): |
||||
|
"""Create tab from source. |
||||
|
|
||||
|
In this version source can be assumed to be a partner.relation.type. |
||||
|
""" |
||||
|
self.id = source.id |
||||
|
self.side = side |
||||
|
if side == 'left': |
||||
|
self.name = source.name |
||||
|
self.contact_type = source.contact_type_left |
||||
|
self.category_id = source.partner_category_left |
||||
|
self.other_contact_type = source.contact_type_right |
||||
|
self.other_category_id = source.partner_category_right |
||||
|
self.other_side = 'right' |
||||
|
else: |
||||
|
self.name = source.name_inverse |
||||
|
self.contact_type = source.contact_type_right |
||||
|
self.category_id = source.partner_category_right |
||||
|
self.other_contact_type = source.contact_type_left |
||||
|
self.other_category_id = source.partner_category_left |
||||
|
self.other_side = 'left' |
||||
|
|
||||
|
@staticmethod |
||||
|
def is_tab_fieldname(name): |
||||
|
return name.startswith(NAME_PREFIX) |
||||
|
|
||||
|
def get_fieldname(self): |
||||
|
return '%s_%s_%s' % (NAME_PREFIX, self.id, self.side) |
||||
|
|
||||
|
def get_domain(self): |
||||
|
return [('type_id', '=', self.id)] |
||||
|
|
||||
|
def create_page(self): |
||||
|
tab_page = etree.Element('page') |
||||
|
self._set_page_attrs(tab_page) |
||||
|
field = etree.Element( |
||||
|
'field', |
||||
|
name=self.get_fieldname(), |
||||
|
context=( |
||||
|
'{"default_type_id": %s, "default_%s_partner_id": id, ' |
||||
|
'"active_test": False}') % (self.id, self.side)) |
||||
|
tab_page.append(field) |
||||
|
tree = etree.Element('tree', editable='bottom') |
||||
|
field.append(tree) |
||||
|
tree.append(etree.Element( |
||||
|
'field', name='%s_partner_id' % self.side, invisible='True')) |
||||
|
tree.append(etree.Element( |
||||
|
'field', |
||||
|
string=_('Partner'), |
||||
|
domain=repr(self._get_other_partner_domain()), |
||||
|
widget='many2one_clickable', |
||||
|
name='%s_partner_id' % self.other_side)) |
||||
|
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')) |
||||
|
return tab_page |
||||
|
|
||||
|
def _get_other_partner_domain(self): |
||||
|
partner_domain = [] |
||||
|
if self.other_contact_type == 'c': |
||||
|
partner_domain.append(('is_company', '=', True)) |
||||
|
if self.other_contact_type == 'p': |
||||
|
partner_domain.append(('is_company', '=', False)) |
||||
|
if self.other_category_id: |
||||
|
partner_domain.append( |
||||
|
('category_id', 'child_of', self.other_category_id.id)) |
||||
|
return partner_domain |
||||
|
|
||||
|
def _set_page_attrs(self, tab_page): |
||||
|
tab_page.set('string', self.name) |
||||
|
invisible = [('id', '=', False)] |
||||
|
if self.contact_type: |
||||
|
invisible = expression.OR([ |
||||
|
invisible, |
||||
|
[('is_company', '=', self.contact_type != 'c')]]) |
||||
|
if self.category_id: |
||||
|
invisible = expression.OR([ |
||||
|
invisible, |
||||
|
[('category_id', '!=', self.category_id.id)]]) |
||||
|
attrs = {'invisible': invisible} |
||||
|
tab_page.set('attrs', repr(attrs)) |
||||
|
transfer_modifiers_to_node(attrs, tab_page) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue