diff --git a/energy_selfconsumption/__init__.py b/energy_selfconsumption/__init__.py index aee8895e7a319f82c43a3230c05bc9fe3ba58d89..4ba79402084324083a9dd48c484d021467cbdb99 100644 --- a/energy_selfconsumption/__init__.py +++ b/energy_selfconsumption/__init__.py @@ -1,2 +1,3 @@ from . import models from . import wizards +from . import controllers diff --git a/energy_selfconsumption/__manifest__.py b/energy_selfconsumption/__manifest__.py index f684b7a0153e1fe9907e620f8d78d932e7056855..37e48c7e7ca44dba4129aaa3f37e1abb77d43d67 100644 --- a/energy_selfconsumption/__manifest__.py +++ b/energy_selfconsumption/__manifest__.py @@ -28,6 +28,7 @@ "views/res_partner_views.xml", "views/distribution_table_views.xml", "views/supply_point_assignation_views.xml", + "views/report_wizard_view.xml", "wizards/selfconsumption_import_wizard_views.xml", "wizards/distribution_table_import_wizard_views.xml", "reports/selfconsumption_reports.xml", diff --git a/energy_selfconsumption/controllers/__init__.py b/energy_selfconsumption/controllers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e046e49fbe22a4768c49bca1ed4cc0b0487c66c3 --- /dev/null +++ b/energy_selfconsumption/controllers/__init__.py @@ -0,0 +1 @@ +from . import controllers diff --git a/energy_selfconsumption/controllers/controllers.py b/energy_selfconsumption/controllers/controllers.py new file mode 100644 index 0000000000000000000000000000000000000000..f4c9d0c4b137a14a05e589098e6143d88eda4419 --- /dev/null +++ b/energy_selfconsumption/controllers/controllers.py @@ -0,0 +1,18 @@ +from odoo import http +from odoo.http import request + + +class ReportController(http.Controller): + @http.route("/energy_selfconsumption/download_report", type="http", auth="user") + def download_report(self, **kw): + wizard = request.env["energy_selfconsumption.report_wizard"].browse( + int(kw.get("id")) + ) + content = wizard.report_data + return request.make_response( + content, + [ + ("Content-Type", "application/text"), + ("Content-Disposition", "attachment; filename=" + wizard.file_name), + ], + ) diff --git a/energy_selfconsumption/models/selfconsumption.py b/energy_selfconsumption/models/selfconsumption.py index 002452af8b74acbc38c34118182a4dd231627808..9c874683f24dad60d4fdd38b68e2c00981669292 100644 --- a/energy_selfconsumption/models/selfconsumption.py +++ b/energy_selfconsumption/models/selfconsumption.py @@ -45,8 +45,6 @@ class Selfconsumption(models.Model): "energy_project.inscription", "project_id", readonly=True ) inscription_count = fields.Integer(compute=_compute_inscription_count) - report_file = fields.Binary(string="Report File", attachment=True) - report_file_name = fields.Char(string="Report File Name") def get_distribution_tables(self): self.ensure_one() @@ -141,20 +139,24 @@ class Selfconsumption(models.Model): "coefficient": assignation.coefficient, } ) + file_content = "" for data in report_data: line = f"{data['code']};{str(data['coefficient']).replace('.', ',')}\n" file_content += line - txt_file = io.BytesIO(file_content.encode()) - file_name = "Coeficiente de reparto.txt" - self.write( - { - "report_file": base64.b64encode(txt_file.getvalue()), - "report_file_name": file_name, - } + + wizard = self.env["energy_selfconsumption.report_wizard"].create( + {"report_data": file_content, "file_name": "Coeficiente_de_reparto.txt"} ) + return { - "type": "ir.actions.act_url", - "url": f"web/content/{self._name}/{self.id}/report_file/{file_name}?download=true", + "name": _("Download Partition Coefficient"), + "type": "ir.actions.act_window", + "res_model": "energy_selfconsumption.report_wizard", + "view_mode": "form", + "view_id": self.env.ref( + "energy_selfconsumption.view_energy_selfconsumption_report_wizard_form" + ).id, + "res_id": wizard.id, "target": "new", } diff --git a/energy_selfconsumption/security/ir.model.access.csv b/energy_selfconsumption/security/ir.model.access.csv index 96bb5295f1ebe1c7308db50e6102f6538655d4f1..2c6ebce772d96c440da3778d775fadd1c0ea3a5a 100644 --- a/energy_selfconsumption/security/ir.model.access.csv +++ b/energy_selfconsumption/security/ir.model.access.csv @@ -9,3 +9,5 @@ access_energy_selfconsumption_distribution_table_admin,energy_selfconsumption.di access_energy_selfconsumption_supply_point_assignation_admin,energy_selfconsumption.supply_point_assignation.admin,model_energy_selfconsumption_supply_point_assignation,energy_project.group_admin,1,1,1,1 access_energy_selfconsumption_selfconsumption_import_wizard_admin,energy_selfconsumption.selfconsumption_import.wizard.admin,model_energy_selfconsumption_selfconsumption_import_wizard,energy_project.group_admin,1,1,1,1 access_energy_selfconsumption_distribution_table_import_wizard_admin,energy_selfconsumption.distribution_table_import.wizard.admin,model_energy_selfconsumption_distribution_table_import_wizard,energy_project.group_admin,1,1,1,1 +access_energy_selfconsumption_report_wizard_user,energy_selfconsumption.report_wizard.user,model_energy_selfconsumption_report_wizard,energy_project.group_user,1,0,0,0 +access_energy_selfconsumption_report_wizard_admin,energy_selfconsumption.report_wizard.admin,model_energy_selfconsumption_report_wizard,energy_project.group_admin,1,1,1,1 diff --git a/energy_selfconsumption/views/report_wizard_view.xml b/energy_selfconsumption/views/report_wizard_view.xml new file mode 100644 index 0000000000000000000000000000000000000000..4dcaabd1ec776db36cb04b11168c69bdc441d2f8 --- /dev/null +++ b/energy_selfconsumption/views/report_wizard_view.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_energy_selfconsumption_report_wizard_form" model="ir.ui.view"> + <field name="name">energy_selfconsumption.report_wizard.form</field> + <field name="model">energy_selfconsumption.report_wizard</field> + <field name="arch" type="xml"> + <form string="Generate Partition Coefficient Report"> + <group> + <field name="report_data" readonly="1" /> + <field name="file_name" readonly="1" /> + </group> + <footer> + <button + string="Download Report" + class="btn-primary" + type="object" + name="download_report" + /> + <button string="Close" class="btn-secondary" special="cancel" /> + </footer> + </form> + </field> + </record> + + <record + id="action_energy_selfconsumption_report_wizard" + model="ir.actions.act_window" + > + <field name="name">Generate Partition Coefficient Report</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">energy_selfconsumption.report_wizard</field> + <field name="view_mode">form</field> + <field name="view_id" ref="view_energy_selfconsumption_report_wizard_form" /> + </record> + + <menuitem + name="Generate Partition Coefficient Report" + id="menu_energy_selfconsumption_report_wizard" + action="action_energy_selfconsumption_report_wizard" + /> +</odoo> diff --git a/energy_selfconsumption/wizards/__init__.py b/energy_selfconsumption/wizards/__init__.py index c2a09fbb5700199ada0a25086dcd1d0ff1c10990..1a0ecf2f6852e1b57b369ec3324e16d49fc45b66 100644 --- a/energy_selfconsumption/wizards/__init__.py +++ b/energy_selfconsumption/wizards/__init__.py @@ -1,2 +1,3 @@ from . import selfconsumption_import_wizard from . import distribution_table_import_wizard +from . import report_wizard diff --git a/energy_selfconsumption/wizards/report_wizard.py b/energy_selfconsumption/wizards/report_wizard.py new file mode 100644 index 0000000000000000000000000000000000000000..f64dea42d84e9e03fc9080e9d99e87012140e551 --- /dev/null +++ b/energy_selfconsumption/wizards/report_wizard.py @@ -0,0 +1,18 @@ +from odoo import _, api, fields, models + + +class ReportWizard(models.TransientModel): + _name = "energy_selfconsumption.report_wizard" + _description = "Generate Partition Coefficient Report" + + report_data = fields.Text("Report Data", readonly=True) + file_name = fields.Char("File Name", readonly=True) + file_data = fields.Binary("File", readonly=True) + + def download_report(self): + url = "/energy_selfconsumption/download_report?id=%s" % self.id + return { + "type": "ir.actions.act_url", + "url": url, + "target": "self", + }