59 lines
2.6 KiB
Python
59 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models
|
|
|
|
|
|
class MailTemplate(models.Model):
|
|
_inherit = "mail.template"
|
|
|
|
def _get_edi_attachments(self, document):
|
|
"""
|
|
Will either return the information about the attachment of the edi document for adding the attachment in the
|
|
mail, or the attachment id to be linked to the 'send & print' wizard.
|
|
Can be overridden where e.g. a zip-file needs to be sent with the individual files instead of the entire zip
|
|
IMPORTANT:
|
|
* If the attachment's id is returned, no new attachment will be created, the existing one on the move is linked
|
|
to the wizard (see _onchange_template_id in mail.compose.message).
|
|
* If the attachment's content is returned, a new one is created and linked to the wizard. Thus, when sending
|
|
the mail (clicking on 'send & print' in the wizard), a new attachment is added to the move (see
|
|
_action_send_mail in mail.compose.message).
|
|
:param document: an edi document
|
|
:return: dict:
|
|
{'attachments': tuple with the name and base64 content of the attachment}
|
|
OR
|
|
{'attachment_ids': list containing the id of the attachment}
|
|
"""
|
|
attachment_sudo = document.sudo().attachment_id
|
|
if not attachment_sudo:
|
|
return {}
|
|
if not (attachment_sudo.res_model and attachment_sudo.res_id):
|
|
# do not return system attachment not linked to a record
|
|
return {}
|
|
if len(self._context.get('active_ids', [])) > 1:
|
|
# In mass mail mode 'attachments_ids' is removed from template values
|
|
# as they should not be rendered
|
|
return {'attachments': [(attachment_sudo.name, attachment_sudo.datas)]}
|
|
return {'attachment_ids': [attachment_sudo.id]}
|
|
|
|
def generate_email(self, res_ids, fields):
|
|
res = super().generate_email(res_ids, fields)
|
|
|
|
multi_mode = True
|
|
if isinstance(res_ids, int):
|
|
res_ids = [res_ids]
|
|
multi_mode = False
|
|
|
|
if self.model not in ['account.move', 'account.payment']:
|
|
return res
|
|
|
|
records = self.env[self.model].browse(res_ids)
|
|
for record in records:
|
|
record_data = (res[record.id] if multi_mode else res)
|
|
for doc in record.edi_document_ids:
|
|
record_data.setdefault('attachments', [])
|
|
attachments = self._get_edi_attachments(doc)
|
|
record_data['attachment_ids'] += attachments.get('attachment_ids', [])
|
|
record_data['attachments'] += attachments.get('attachments', [])
|
|
|
|
return res
|