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

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 ?