You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.2 KiB
56 lines
2.2 KiB
from odoo import api, models
|
|
|
|
|
|
class MailTemplate(models.Model):
|
|
_inherit = "mail.template"
|
|
|
|
@api.multi
|
|
def send_mail_with_multiple_attachments(
|
|
self, res_id, additional_attachments, force_send=False, raise_exception=False
|
|
):
|
|
"""Generates a new mail message for the given template and record,
|
|
and schedules it for delivery through the ``mail``
|
|
module's scheduler.
|
|
|
|
:param int res_id: id of the record to render the template with
|
|
(model is taken from the template)
|
|
:param bool force_send: if True, the generated mail.message is
|
|
immediately sent after being created, as if the scheduler
|
|
was executed for this message only.
|
|
:returns: id of the mail.message that was created
|
|
"""
|
|
self.ensure_one()
|
|
Mail = self.env["mail.mail"]
|
|
# TDE FIXME: should remove dfeault_type from context
|
|
Attachment = self.env["ir.attachment"]
|
|
|
|
# create a mail_mail based on values, without attachments
|
|
values = self.generate_email(res_id)
|
|
values["recipient_ids"] = [
|
|
(4, pid) for pid in values.get("partner_ids", list())
|
|
]
|
|
attachment_ids = values.pop("attachment_ids", [])
|
|
attachments = values.pop("attachments", [])
|
|
# add a protection against void email_from
|
|
if "email_from" in values and not values.get("email_from"):
|
|
values.pop("email_from")
|
|
mail = Mail.create(values)
|
|
|
|
# manage attachments
|
|
attachments.extend(additional_attachments)
|
|
for attachment in attachments:
|
|
attachment_data = {
|
|
"name": attachment[0],
|
|
"datas_fname": attachment[0],
|
|
"datas": attachment[1],
|
|
"res_model": "mail.message",
|
|
"res_id": mail.mail_message_id.id,
|
|
}
|
|
attachment_ids.append(Attachment.create(attachment_data).id)
|
|
if attachment_ids:
|
|
values["attachment_ids"] = [(6, 0, attachment_ids)]
|
|
mail.write({"attachment_ids": [(6, 0, attachment_ids)]})
|
|
|
|
if force_send:
|
|
mail.send(raise_exception=raise_exception)
|
|
return mail.id # TDE CLEANME: return mail + api.returns ?
|