56 lines
2.1 KiB
56 lines
2.1 KiB
# Copyright 2014-2018 Therp BV <https://therp.nl>.
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class ResPartnerRelationAll(models.AbstractModel):
|
|
"""Abstract model to show each relation from two sides."""
|
|
_inherit = 'res.partner.relation.all'
|
|
|
|
tab_id = fields.Many2one(
|
|
comodel_name='res.partner.tab',
|
|
string='Show relation on tab',
|
|
readonly=True,
|
|
)
|
|
|
|
def _get_additional_view_fields(self):
|
|
"""Add tab_id to view fields."""
|
|
# pylint: disable=no-member
|
|
return ','.join([
|
|
super(ResPartnerRelationAll, self)._get_additional_view_fields(),
|
|
"CASE"
|
|
" WHEN NOT bas.is_inverse"
|
|
" THEN lefttab.id"
|
|
" ELSE righttab.id"
|
|
" END as tab_id"])
|
|
|
|
def _get_additional_tables(self):
|
|
"""Add res_partner_tab table to view."""
|
|
# pylint: disable=no-member
|
|
return ' '.join([
|
|
super(ResPartnerRelationAll, self)._get_additional_tables(),
|
|
"LEFT OUTER JOIN res_partner_tab lefttab"
|
|
" ON typ.tab_left_id = lefttab.id",
|
|
"LEFT OUTER JOIN res_partner_tab righttab"
|
|
" ON typ.tab_right_id = righttab.id"])
|
|
|
|
@api.onchange(
|
|
'this_partner_id',
|
|
'other_partner_id',
|
|
)
|
|
def onchange_partner_id(self):
|
|
"""Add tab if needed to type_selection_id domain.
|
|
|
|
This method makes sure that when a relation is added to a tab,
|
|
it is with a relation type meant to be placed on that tab.
|
|
"""
|
|
# pylint: disable=no-member
|
|
result = super(ResPartnerRelationAll, self).onchange_partner_id()
|
|
if 'default_tab_id' in self.env.context:
|
|
result['domain'] = result['domain'] if 'domain' in result else {}
|
|
result['domain']['type_selection_id'] = \
|
|
result['domain']['type_selection_id'] \
|
|
if 'type_selection_id' in result['domain'] else {}
|
|
result['domain']['type_selection_id'].append(
|
|
('tab_id', '=', self.env.context['default_tab_id']))
|
|
return result
|