Odoo18-Base/addons/mail/models/mail_canned_response.py
2025-01-06 10:57:38 +07:00

79 lines
2.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models, api
from odoo.addons.mail.tools.discuss import Store
class MailCannedResponse(models.Model):
"""
Canned Response: content that will automatically replace the shortcut of your choosing. This content can still be adapted before sending your message.
"""
_name = "mail.canned.response"
_description = "Canned Response"
_order = "id desc"
_rec_name = "source"
source = fields.Char(
"Shortcut", required=True, index="trigram",
help="Canned response that will automatically be substituted with longer content in your messages."
" Type ':' followed by the name of your shortcut (e.g. :hello) to use in your messages.",
)
substitution = fields.Text(
"Substitution",
required=True,
help="Content that will automatically replace the shortcut of your choosing. This content can still be adapted before sending your message.",
)
description = fields.Char("Description")
last_used = fields.Datetime("Last Used", help="Last time this canned_response was used")
group_ids = fields.Many2many("res.groups", string="Authorized Groups")
is_shared = fields.Boolean(
string="Determines if the canned_response is currently shared with other users",
compute="_compute_is_shared",
store=True,
)
is_editable = fields.Boolean(
string="Determines if the canned response can be edited by the current user",
compute="_compute_is_editable"
)
@api.depends("group_ids")
def _compute_is_shared(self):
for canned_response in self:
canned_response.is_shared = bool(canned_response.group_ids)
@api.depends_context('uid')
@api.depends("create_uid")
def _compute_is_editable(self):
creating = self.filtered(lambda c: not c.id)
updating = self - creating
editable = creating._filtered_access("create") + updating._filtered_access("write")
editable.is_editable = True
(self - editable).is_editable = False
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
res._broadcast()
return res
def write(self, vals):
res = super().write(vals)
self._broadcast()
return res
def unlink(self):
self._broadcast(delete=True)
return super().unlink()
def _broadcast(self, /, *, delete=False):
for canned_response in self:
store = Store(canned_response, delete=delete)
(self.env.user | canned_response.create_uid)._bus_send_store(store)
canned_response.group_ids._bus_send_store(store)
def _to_store(self, store: Store, /, *, fields=None):
if fields is None:
fields = ["source", "substitution"]
store.add(self._name, self._read_format(fields))