Files
tocmo0nlord adbe430761
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

54 lines
2.0 KiB
Python
Executable File

# Copyright 2016-2018 Tecnativa - Pedro M. Baeza
# Copyright 2021 Tecnativa - Víctor Martínez
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import api, fields, models
class ResPartner(models.Model):
_inherit = "res.partner"
# add indexes for better performance on record rules
user_id = fields.Many2one(index=True)
def _remove_key_followers(self, partner):
for record in self.mapped("commercial_partner_id"):
# Look for delivery and invoice addresses
childrens = record.child_ids.filtered(
lambda x: x.type in {"invoice", "delivery"}
)
(childrens + record).message_unsubscribe(partner_ids=partner.ids)
def _add_followers_from_salesmen(self):
"""Sync followers in commercial partner + delivery/invoice contacts."""
for record in self.commercial_partner_id:
followers = (record.child_ids + record).user_id.partner_id
# Look for delivery and invoice addresses
childrens = record.child_ids.filtered(
lambda x: x.type in {"invoice", "delivery"}
)
(childrens + record).message_subscribe(partner_ids=followers.ids)
@api.model_create_multi
def create(self, vals_list):
"""Sync followers on contact creation."""
records = super().create(vals_list)
records._add_followers_from_salesmen()
return records
def write(self, vals):
"""If the salesman is changed, first remove the old salesman as follower
of the key contacts (commercial + delivery/invoice), and then sync for
the new ones.
It performs as well the followers sync on contact type change.
"""
if "user_id" in vals:
for record in self.filtered("user_id"):
record._remove_key_followers(record.user_id.partner_id)
result = super().write(vals)
if "user_id" in vals or vals.get("type") in {"invoice", "delivery"}:
self._add_followers_from_salesmen()
return result