1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # -*- 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
|