mirror of https://github.com/OCA/social.git
85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
# Copyright 2023 Camptocamp
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import Command, api, fields, models, tools
|
|
|
|
CC_BCC_FIELDS = {
|
|
"email_cc": "partner_cc_ids",
|
|
"email_bcc": "partner_bcc_ids",
|
|
}
|
|
|
|
|
|
class MailComposeMessage(models.TransientModel):
|
|
_inherit = "mail.compose.message"
|
|
|
|
@api.model
|
|
def default_get(self, fields_list):
|
|
company = self.env.company
|
|
res = super().default_get(fields_list)
|
|
partner_cc = company.default_partner_cc_ids
|
|
if partner_cc:
|
|
res["partner_cc_ids"] = [Command.set(partner_cc.ids)]
|
|
partner_bcc = company.default_partner_bcc_ids
|
|
if partner_bcc:
|
|
res["partner_bcc_ids"] = [Command.set(partner_bcc.ids)]
|
|
return res
|
|
|
|
partner_cc_ids = fields.Many2many(
|
|
"res.partner",
|
|
"mail_compose_message_res_partner_cc_rel",
|
|
"wizard_id",
|
|
"partner_id",
|
|
string="Cc",
|
|
)
|
|
partner_bcc_ids = fields.Many2many(
|
|
"res.partner",
|
|
"mail_compose_message_res_partner_bcc_rel",
|
|
"wizard_id",
|
|
"partner_id",
|
|
string="Bcc",
|
|
)
|
|
|
|
def _onchange_template_id(self, template_id, composition_mode, model, res_id):
|
|
if not template_id:
|
|
return {"value": {}}
|
|
ctx = {"is_from_composer": True}
|
|
ctx.update(self.env.context)
|
|
self_ctx = self.with_context(**ctx)
|
|
res = super(MailComposeMessage, self_ctx)._onchange_template_id(
|
|
template_id, composition_mode, model, res_id
|
|
)
|
|
res_ids = [res_id]
|
|
# tpl_partners_only need to be False for email_cc value
|
|
tmpl_ctx = self.env["mail.template"].with_context(tpl_partners_only=False)
|
|
mail_tmpl = tmpl_ctx.browse(template_id)
|
|
template_values = mail_tmpl.generate_email(res_ids, CC_BCC_FIELDS)
|
|
values = template_values[res_id]
|
|
for fname in CC_BCC_FIELDS:
|
|
value = values.get(fname, None)
|
|
if not value:
|
|
continue
|
|
self._set_partner_field(CC_BCC_FIELDS[fname], value)
|
|
return res
|
|
|
|
def _set_partner_field(self, field_name, email):
|
|
if field_name not in CC_BCC_FIELDS.values():
|
|
return
|
|
for_email = [("email", "in", tools.email_split(email))]
|
|
partner = self.env["res.partner"].search(for_email)
|
|
current_partners = getattr(self, field_name)
|
|
setattr(self, field_name, current_partners + partner)
|
|
|
|
def _action_send_mail(self, auto_commit=False):
|
|
# don't impact mass_mailing that also uses mail.compose.message
|
|
if self.composition_mode == "mass_mail":
|
|
return super()._action_send_mail(auto_commit)
|
|
context = {
|
|
"is_from_composer": True,
|
|
"partner_cc_ids": self.partner_cc_ids,
|
|
"partner_bcc_ids": self.partner_bcc_ids,
|
|
}
|
|
context.update(self.env.context)
|
|
self_super = super(MailComposeMessage, self.with_context(**context))
|
|
res = self_super._action_send_mail(auto_commit)
|
|
return res
|