mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[ADD] sql_export: Allow keeping generated file
This commit is contained in:
@@ -41,6 +41,10 @@ class SqlExport(models.Model):
|
||||
default="utf-8",
|
||||
)
|
||||
|
||||
keep_generated_file = fields.Boolean(
|
||||
help="Check this to keep generated export files as attachments"
|
||||
)
|
||||
|
||||
def _compute_use_properties(self):
|
||||
for rec in self:
|
||||
rec.use_properties = bool(rec.query_properties_definition)
|
||||
|
||||
@@ -101,3 +101,16 @@ class TestExportSqlQuery(TransactionCase):
|
||||
wizard.export_sql()
|
||||
export = base64.b64decode(wizard.binary_file)
|
||||
self.assertTrue(export)
|
||||
|
||||
def test_keep_generated_file(self):
|
||||
"""Test that we keep generated files"""
|
||||
self.sql_report_demo.keep_generated_file = True
|
||||
wizard = self.wizard_obj.create(
|
||||
{
|
||||
"sql_export_id": self.sql_report_demo.id,
|
||||
}
|
||||
)
|
||||
wizard.export_sql()
|
||||
attachment = wizard._get_field_attachment()
|
||||
wizard.sudo().unlink()
|
||||
self.assertTrue(attachment.exists())
|
||||
|
||||
@@ -42,6 +42,11 @@
|
||||
name="file_format"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"
|
||||
/>
|
||||
<field
|
||||
name="keep_generated_file"
|
||||
attrs="{'invisible': [('file_format', '!=', 'csv')], 'required': [('file_format', '=', 'csv')], 'readonly': [('state', '!=', 'draft')]}"
|
||||
groups="base.group_no_one"
|
||||
/>
|
||||
<field
|
||||
name="copy_options"
|
||||
attrs="{'invisible': [('file_format', '!=', 'csv')], 'required': [('file_format', '=', 'csv')], 'readonly': [('state', '!=', 'draft')]}"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from datetime import datetime
|
||||
from mimetypes import guess_type
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
@@ -78,6 +79,12 @@ class SqlFileWizard(models.TransientModel):
|
||||
sql_export.id,
|
||||
),
|
||||
)
|
||||
self._get_field_attachment().write(
|
||||
{
|
||||
"name": self.file_name,
|
||||
"mimetype": guess_type(self.file_name)[0],
|
||||
}
|
||||
)
|
||||
action = {
|
||||
"name": "SQL Export",
|
||||
"type": "ir.actions.act_url",
|
||||
@@ -87,3 +94,24 @@ class SqlFileWizard(models.TransientModel):
|
||||
"target": "self",
|
||||
}
|
||||
return action
|
||||
|
||||
def _get_field_attachment(self):
|
||||
"""Return the attachment of the binary_file field"""
|
||||
return self.env["ir.attachment"].search(
|
||||
[
|
||||
("res_model", "=", self._name),
|
||||
("res_id", "in", self.ids),
|
||||
("res_field", "=", "binary_file"),
|
||||
],
|
||||
)
|
||||
|
||||
def unlink(self):
|
||||
for this in self.filtered("sql_export_id.keep_generated_file"):
|
||||
this._get_field_attachment().write(
|
||||
{
|
||||
"res_model": this.sql_export_id._name,
|
||||
"res_id": this.sql_export_id.id,
|
||||
"res_field": None,
|
||||
}
|
||||
)
|
||||
return super().unlink()
|
||||
|
||||
Reference in New Issue
Block a user