mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
Improve usability about variable creation and choice by hiding base wizard base fields and display simplified view Add a description on paramter fields to help the user to use parameters If not parameter are used for the query, display the wizard with the generated file directly
97 lines
3.4 KiB
Python
97 lines
3.4 KiB
Python
# Copyright (C) 2015 Akretion (<http://www.akretion.com>)
|
|
# @author: Florian da Costa
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
from odoo import fields, models
|
|
|
|
|
|
class SqlExport(models.Model):
|
|
_name = "sql.export"
|
|
_inherit = ["sql.request.mixin"]
|
|
_description = "SQL export"
|
|
|
|
_sql_request_groups_relation = "groups_sqlquery_rel"
|
|
|
|
_sql_request_users_relation = "users_sqlquery_rel"
|
|
|
|
_check_execution_enabled = False
|
|
|
|
copy_options = fields.Char(
|
|
string="Copy Options", required=False, default="CSV HEADER DELIMITER ';'"
|
|
)
|
|
|
|
file_format = fields.Selection([("csv", "CSV")], default="csv", required=True)
|
|
|
|
field_ids = fields.Many2many(
|
|
"ir.model.fields",
|
|
"fields_sqlquery_rel",
|
|
"sql_id",
|
|
"field_id",
|
|
"Parameters",
|
|
domain=[("model", "=", "sql.file.wizard"), ("state", "=", "manual")],
|
|
help="Before adding parameters, make sure you have created one that fill your "
|
|
"need in the dedicated menu with the right type and label. \n"
|
|
"Then, when you add a parameter here, you have to include it in the SQL "
|
|
"query in order to have dynamic values depending on the user choice.\n"
|
|
"The format of the parameters in the SQL query must be like this :"
|
|
" %(parameter_field_name)s. \n"
|
|
"Example : from the variable menu, create an variable with type 'char', "
|
|
"having field name 'x_name' and field label : 'Name' \n"
|
|
"Then, you can create a SQL query like this : "
|
|
"SELECT * FROM res_partner WHERE name = %(x_name)s the variable "
|
|
"can be used in any number of different SQL queries. \n"
|
|
"In the SQL query, you can also include these 2 special parameters "
|
|
"%(user_id)s and %(company_id)s which will be replaced respectively by "
|
|
"the user executing the query and the company of the user executing the"
|
|
" query.",
|
|
)
|
|
|
|
encoding = fields.Selection(
|
|
[
|
|
("utf-8", "utf-8"),
|
|
("utf-16", "utf-16"),
|
|
("windows-1252", "windows-1252"),
|
|
("latin1", "latin1"),
|
|
("latin2", "latin2"),
|
|
("big5", "big5"),
|
|
("gb18030", "gb18030"),
|
|
("shift_jis", "shift_jis"),
|
|
("windows-1251", "windows-1251"),
|
|
("koir8_r", "koir8_r"),
|
|
],
|
|
string="Encoding",
|
|
required=True,
|
|
default="utf-8",
|
|
)
|
|
|
|
def export_sql_query(self):
|
|
self.ensure_one()
|
|
wiz = self.env["sql.file.wizard"].create({"sql_export_id": self.id})
|
|
# no variable input, we can return the file directly
|
|
if not self.field_ids:
|
|
return wiz.export_sql()
|
|
else:
|
|
return {
|
|
"view_mode": "form",
|
|
"res_model": "sql.file.wizard",
|
|
"res_id": wiz.id,
|
|
"type": "ir.actions.act_window",
|
|
"target": "new",
|
|
"context": self.env.context,
|
|
"nodestroy": True,
|
|
}
|
|
|
|
def _get_file_extension(self):
|
|
self.ensure_one()
|
|
if self.file_format == "csv":
|
|
return "csv"
|
|
|
|
def csv_get_data_from_query(self, variable_dict):
|
|
self.ensure_one()
|
|
# Execute Request
|
|
res = self._execute_sql_request(
|
|
params=variable_dict, mode="stdout", copy_options=self.copy_options
|
|
)
|
|
if self.encoding:
|
|
res = res.decode(self.encoding)
|
|
return res
|