oca-technical/odoo-bringout-oca-crm-crm_salesperson_planner/crm_salesperson_planner/models/calendar_event.py
2025-08-29 15:43:03 +02:00

59 lines
2.4 KiB
Python

# Copyright 2021 Sygel - Manuel Regidor
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
from odoo import _, fields, models
from odoo.exceptions import ValidationError
class CalendarEvent(models.Model):
_inherit = "calendar.event"
salesperson_planner_visit_ids = fields.One2many(
string="Salesperson Visits",
comodel_name="crm.salesperson.planner.visit",
inverse_name="calendar_event_id",
)
def write(self, values):
if values.get("start") or values.get("user_id"):
salesperson_visit_events = self.filtered(
lambda a: a.res_model == "crm.salesperson.planner.visit"
)
if salesperson_visit_events:
new_vals = {}
if values.get("start"):
new_vals["date"] = values.get("start")
if values.get("user_id"):
new_vals["user_id"] = values.get("user_id")
user_id = self.env["res.users"].browse(values.get("user_id"))
if user_id:
partner_ids = self.partner_ids.filtered(
lambda a: a != self.user_id.partner_id
).ids
partner_ids.append(user_id.partner_id.id)
values["partner_ids"] = [(6, 0, partner_ids)]
salesperson_visit_events.mapped(
"salesperson_planner_visit_ids"
).with_context(bypass_update_event=True).write(new_vals)
return super().write(values)
def unlink(self):
if not self.env.context.get("bypass_cancel_visit"):
salesperson_visit_events = self.filtered(
lambda a: a.res_model == "crm.salesperson.planner.visit"
and a.salesperson_planner_visit_ids
)
if salesperson_visit_events:
error_msg = ""
for event in salesperson_visit_events:
error_msg += _(
"Event %(event_name)s is related to salesperson visit "
"%(partner_name)s. Cancel it to delete this event.\n"
) % {
"event_name": event.name,
"partner_name": fields.first(
event.salesperson_planner_visit_ids
).name,
}
raise ValidationError(error_msg)
return super().unlink()