Repository
OCA/partner-contact · module folder · Try on Runboat
Module version
1.1.0
Category
Customer Relationship Management
Folder size
1.98 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/partner-contact
Last tracking update
2026-08-07 09:06:26
Authors
Camptocamp, Odoo Community Association (OCA), Therp BV
Maintainers
Camptocamp, Odoo Community Association (OCA), Therp BV
Committers
Ronald Portier, Weblate, OCA-git-bot, oca-ci
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
This module aims to provide generic means to model relations between
partners.

Examples would be 'is sibling of' or 'is friend of', but also 'has
contract X with' or 'is assistant of'. This way, you can encode your
knowledge about your partners directly in your partner list.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
form_res_partner_relation res.partner.relation form New
form_res_partner_relation_type res.partner.relation.type form New
search_res_partner_relation res.partner.relation search New
tree_res_partner_relation res.partner.relation list New
tree_res_partner_relation_type res.partner.relation.type list New
view_partner_form partner_multi_relation.view_partner_form res.partner form Inherits base.view_partner_form
view_res_partner_filter partner_multi_relation.view_partner_filter res.partner Inherits base.view_res_partner_filter
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (3)

New fields (7)
  • relation_count Integer
    compute='_compute_relation_count'
  • relation_left_ids One2many → res.partner.relation
    comodel_name='res.partner.relation' copy=False inverse_name='left_partner_id' string='Left relations with current partner'
  • relation_right_ids One2many → res.partner.relation
    comodel_name='res.partner.relation' copy=False inverse_name='right_partner_id' string='Right relations with current partner'
  • search_relation_date Date
    compute=<expr> search='_search_relation_date' string='Relation valid'
  • search_relation_partner_category_id Many2one → res.partner.category
    comodel_name='res.partner.category' compute=<expr> search='_search_relation_partner_category_id' string='Has relation with a partner in category'
  • search_relation_partner_id Many2one → res.partner
    comodel_name='res.partner' compute=<expr> search='_search_relation_partner_id' string='Has relation with'
  • search_relation_type_id Many2one → res.partner.relation.type
    comodel_name='res.partner.relation.type' compute=<expr> search='_search_relation_type_id' string='Has relation of type'
Public methods (2)
  • action_view_relations(self)
  • search(self, domain, offset=0, limit=None, order=None)
    @api.model
    Inject searching for current relation date if we search for relation properties and no explicit date was given.

New fields (13)
  • active Boolean
    default=True help='Records with date_end in the past should be inactive' readonly=True
  • any_partner_id Many2many → res.partner
    comodel_name='res.partner' compute=<expr> search='_search_any_partner_id' string='Partner'
  • date_end Date
    args: 'Ending date'
  • date_start Date
    args: 'Starting date'
  • left_partner_id Many2one → res.partner
    bypass_search_access=True comodel_name='res.partner' ondelete='cascade' required=True string='Source Partner'
  • left_partner_id_domain Binary
    compute='_compute_left_partner_id_domain' default=[]
  • other_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_other_partner_id' help='Partner shown right when no currently active partner, or connected partnes as seen from current partner.'
  • right_partner_id Many2one → res.partner
    bypass_search_access=True comodel_name='res.partner' ondelete='cascade' required=True string='Destination Partner'
  • right_partner_id_domain Binary
    compute='_compute_right_partner_id_domain' default=[]
  • this_partner_id Many2one → res.partner
    comodel_name='res.partner' compute='_compute_this_partner_id' help='Partner shown left when no currently active partner'
  • type_id Many2one → res.partner.relation.type
    bypass_search_access=True comodel_name='res.partner.relation.type' required=True string='Type'
  • type_id_display Char
    compute='_compute_type_id_display' help='In current context relation is inverse'
  • type_id_domain Binary
    compute='_compute_type_id_domain' default=[]
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
    Override create to correct values, before being stored.
  • default_get(self, fields_list)
    @api.model

New fields (9)
  • allow_self Boolean
    default=False help='This relation can be set up with the same partner left and right' string='Reflexive'
  • handle_invalid_onchange Selection
    default='restrict' help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.' required=True selection=HANDLE_INVALID_ONCHANGE string='Invalid relation handling'
  • is_symmetric Boolean
    default=False help='This relation is the same from right to left as from left to right' string='Symmetric'
  • left_partner_category_id Many2one → res.partner.category
    comodel_name='res.partner.category' string='Left partner category'
  • left_partner_type Selection
    selection='get_partner_types' string='Left partner type'
  • name Char
    required=True translate=True
  • name_inverse Char
    required=True string='Inverse name' translate=True
  • right_partner_category_id Many2one → res.partner.category
    comodel_name='res.partner.category' string='Right partner category'
  • right_partner_type Selection
    selection='get_partner_types' string='Right partner type'
Public methods (5)
  • check_existing(self, vals)
    Check wether records exist that do not fit new criteria.
  • create(self, vals_list)
    @api.model_create_multi
  • get_partner_types(self)
    @api.model
    A partner can be an organisation or an individual.
  • unlink(self)
    Allow delete of relation type, even when connections exist. Relations can be deleted if relation type allows it, so existing relations do not prevent unlink of relation type.
  • write(self, vals)
    Handle existing relations if conditions change.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…