Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[14.0][IMP] export_async_schedule : Send attachments directly #570

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 21 additions & 10 deletions base_export_async/models/delay_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ def _get_file_content(self, params):
return xls.from_data(columns_headers, import_data)

@api.model
def export(self, params):
def export(
self, params, mail_template=None, is_export_file_attached_to_email=False
):
"""Delayed export of a file sent by email

The ``params`` is a dict of parameters, contains:
Expand Down Expand Up @@ -124,15 +126,24 @@ def export(self, params):
"model_description": model_description,
}
)

self.env.ref("base_export_async.delay_export_mail_template").send_mail(
export_record.id,
email_values={
"email_from": email_from,
"reply_to": email_from,
"recipient_ids": [(6, 0, users.mapped("partner_id").ids)],
},
)
email_values = {
"email_from": email_from,
"reply_to": email_from,
"recipient_ids": [(6, 0, users.mapped("partner_id").ids)],
}
if is_export_file_attached_to_email:
email_values.update({"attachments": [(name, base64.b64encode(content))]})

if mail_template:
mail_template.send_mail(
export_record.id,
email_values=email_values,
)
else:
self.env.ref("base_export_async.delay_export_mail_template").send_mail(
export_record.id,
email_values=email_values,
)

@api.model
def cron_delete(self):
Expand Down
16 changes: 10 additions & 6 deletions base_export_async/tests/test_base_export_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,26 @@ def test_export_csv(self):
params = json.loads(data_csv.get("data"))
mails = self.env["mail.mail"].search([])
attachments = self.env["ir.attachment"].search([])
self.delay_export_obj.export(params)
self.delay_export_obj.export(
params, self.env.ref("base_export_async.delay_export_mail_template"), True
)
new_mail = self.env["mail.mail"].search([]) - mails
new_attachment = self.env["ir.attachment"].search([]) - attachments
new_attachments = self.env["ir.attachment"].search([]) - attachments
self.assertEqual(len(new_mail), 1)
self.assertEqual(new_attachment.name, "res.partner.csv")
self.assertEqual(len(new_mail.attachment_ids), 1)
self.assertEqual(new_attachments[0].name, "res.partner.csv")

def test_export_xls(self):
"""Check that the export generate an attachment and email"""
params = json.loads(data_xls.get("data"))
mails = self.env["mail.mail"].search([])
attachments = self.env["ir.attachment"].search([])
self.delay_export_obj.export(params)
self.delay_export_obj.export(params, None, True)
new_mail = self.env["mail.mail"].search([]) - mails
new_attachment = self.env["ir.attachment"].search([]) - attachments
new_attachments = self.env["ir.attachment"].search([]) - attachments
self.assertEqual(len(new_mail), 1)
self.assertEqual(new_attachment.name, "res.partner.xls")
self.assertEqual(len(new_mail.attachment_ids), 1)
self.assertEqual(new_attachments[0].name, "res.partner.xls")

def test_cron_delete(self):
"""Check that cron delete attachment after TTL"""
Expand Down
17 changes: 15 additions & 2 deletions export_async_schedule/models/export_async_schedule.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,16 @@ class ExportAsyncSchedule(models.Model):
default=lambda self: self.env.lang,
help="Exports will be translated in this language.",
)

mail_template_id = fields.Many2one(
"mail.template",
string="Email addresses",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why email addresses?

default=lambda self: self.env.ref(
"base_export_async.delay_export_mail_template"
),
)
is_export_file_attached_to_email = fields.Boolean(
"Export file attached to email", default=False
)
# Scheduling
next_execution = fields.Datetime(default=fields.Datetime.now, required=True)
interval = fields.Integer(default=1, required=True)
Expand Down Expand Up @@ -149,4 +158,8 @@ def action_export(self):
for record in self:
record = record.with_context(lang=record.lang)
params = record._prepare_export_params()
record.env["delay.export"].with_delay().export(params)
record.env["delay.export"].with_delay().export(
params,
mail_template=record.mail_template_id,
is_export_file_attached_to_email=record.is_export_file_attached_to_email,
)
2 changes: 2 additions & 0 deletions export_async_schedule/views/export_async_schedule_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
name="model_id"
options="{'no_open': True, 'no_create_edit': True}"
/>
<field name="mail_template_id" />
<field name="model_name" invisible="1" />
<field
name="user_ids"
Expand All @@ -61,6 +62,7 @@
/>
<field name="export_format" />
<field name="import_compat" />
<field name="is_export_file_attached_to_email" />
</group>
<group name="scheduling" string="Scheduling">
<field name="next_execution" />
Expand Down
Loading