mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
[MIG] report_csv: Migration to 14.0
This commit is contained in:
@@ -4,11 +4,10 @@
|
|||||||
"name": "Base report csv",
|
"name": "Base report csv",
|
||||||
"summary": "Base module to create csv report",
|
"summary": "Base module to create csv report",
|
||||||
"author": "Creu Blanca, Odoo Community Association (OCA)",
|
"author": "Creu Blanca, Odoo Community Association (OCA)",
|
||||||
"website": "https://github.com/oca/reporting-engine",
|
"website": "https://github.com/OCA/reporting-engine",
|
||||||
"category": "Reporting",
|
"category": "Reporting",
|
||||||
"version": "13.0.1.0.1",
|
"version": "14.0.1.0.0",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"external_dependencies": {"python": ["csv"]},
|
|
||||||
"depends": ["base", "web"],
|
"depends": ["base", "web"],
|
||||||
"data": ["views/webclient_templates.xml"],
|
"data": ["views/webclient_templates.xml"],
|
||||||
"demo": ["demo/report.xml"],
|
"demo": ["demo/report.xml"],
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).
|
# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
|
||||||
|
|
||||||
from odoo.http import content_disposition, request, route
|
from odoo.http import content_disposition, request, route
|
||||||
from odoo.tools.safe_eval import safe_eval
|
from odoo.tools.safe_eval import safe_eval
|
||||||
@@ -28,14 +27,14 @@ class ReportController(report.ReportController):
|
|||||||
if data["context"].get("lang"):
|
if data["context"].get("lang"):
|
||||||
del data["context"]["lang"]
|
del data["context"]["lang"]
|
||||||
context.update(data["context"])
|
context.update(data["context"])
|
||||||
csv = report.with_context(context).render_csv(docids, data=data)[0]
|
csv = report.with_context(context)._render_csv(docids, data=data)[0]
|
||||||
filename = "{}.{}".format(report.name, "csv")
|
filename = "{}.{}".format(report.name, "csv")
|
||||||
if docids:
|
if docids:
|
||||||
obj = request.env[report.model].browse(docids)
|
obj = request.env[report.model].browse(docids)
|
||||||
if report.print_report_name and not len(obj) > 1:
|
if report.print_report_name and not len(obj) > 1:
|
||||||
report_name = safe_eval(
|
report_name = safe_eval(
|
||||||
report.print_report_name,
|
report.print_report_name,
|
||||||
{"object": obj, "time": time, "multi": False},
|
{"object": obj},
|
||||||
)
|
)
|
||||||
filename = "{}.{}".format(report_name, "csv")
|
filename = "{}.{}".format(report_name, "csv")
|
||||||
# When we print multiple records we still allow a custom
|
# When we print multiple records we still allow a custom
|
||||||
@@ -43,7 +42,7 @@ class ReportController(report.ReportController):
|
|||||||
elif report.print_report_name and len(obj) > 1:
|
elif report.print_report_name and len(obj) > 1:
|
||||||
report_name = safe_eval(
|
report_name = safe_eval(
|
||||||
report.print_report_name,
|
report.print_report_name,
|
||||||
{"objects": obj, "time": time, "multi": True},
|
{"object": obj},
|
||||||
)
|
)
|
||||||
filename = "{}.{}".format(report_name, "csv")
|
filename = "{}.{}".format(report_name, "csv")
|
||||||
csvhttpheaders = [
|
csvhttpheaders = [
|
||||||
|
|||||||
@@ -4,13 +4,11 @@
|
|||||||
Copyright 2019 Creu Blanca
|
Copyright 2019 Creu Blanca
|
||||||
License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).
|
License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).
|
||||||
-->
|
-->
|
||||||
<report
|
<record id="partner_csv" model="ir.actions.report">
|
||||||
id="partner_csv"
|
<field name="name">Print to CSV</field>
|
||||||
model="res.partner"
|
<field name="model">res.partner</field>
|
||||||
string="Print to CSV"
|
<field name="report_type">csv</field>
|
||||||
report_type="csv"
|
<field name="report_name">report_csv.partner_csv</field>
|
||||||
name="report_csv.partner_csv"
|
<field name="report_file">res_partner</field>
|
||||||
file="res_partner"
|
</record>
|
||||||
attachment_use="False"
|
|
||||||
/>
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ from odoo.exceptions import UserError
|
|||||||
class ReportAction(models.Model):
|
class ReportAction(models.Model):
|
||||||
_inherit = "ir.actions.report"
|
_inherit = "ir.actions.report"
|
||||||
|
|
||||||
report_type = fields.Selection(selection_add=[("csv", "csv")])
|
report_type = fields.Selection(
|
||||||
|
selection_add=[("csv", "csv")], ondelete={"csv": "set default"}
|
||||||
|
)
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def render_csv(self, docids, data):
|
def _render_csv(self, docids, data):
|
||||||
report_model_name = "report.%s" % self.report_name
|
report_model_name = "report.%s" % self.report_name
|
||||||
report_model = self.env.get(report_model_name)
|
report_model = self.env.get(report_model_name)
|
||||||
if report_model is None:
|
if report_model is None:
|
||||||
|
|||||||
@@ -25,10 +25,9 @@ class TestReport(common.TransactionCase):
|
|||||||
|
|
||||||
def test_report(self):
|
def test_report(self):
|
||||||
# Test if not res:
|
# Test if not res:
|
||||||
self.env["ir.actions.report"]._get_report_from_name("TEST")
|
|
||||||
report = self.report
|
report = self.report
|
||||||
self.assertEqual(report.report_type, "csv")
|
self.assertEqual(report.report_type, "csv")
|
||||||
rep = report.render(self.docs.ids, {})
|
rep = report._render(self.docs.ids, {})
|
||||||
str_io = StringIO(rep[0])
|
str_io = StringIO(rep[0])
|
||||||
dict_report = list(csv.DictReader(str_io, delimiter=";", quoting=csv.QUOTE_ALL))
|
dict_report = list(csv.DictReader(str_io, delimiter=";", quoting=csv.QUOTE_ALL))
|
||||||
self.assertEqual(self.docs.name, dict(dict_report[0])["name"])
|
self.assertEqual(self.docs.name, dict(dict_report[0])["name"])
|
||||||
@@ -39,20 +38,20 @@ class TestReport(common.TransactionCase):
|
|||||||
objs = self.csv_report._get_objs_for_report(
|
objs = self.csv_report._get_objs_for_report(
|
||||||
False, {"context": {"active_ids": self.docs.ids}}
|
False, {"context": {"active_ids": self.docs.ids}}
|
||||||
)
|
)
|
||||||
self.assertEquals(objs, self.docs)
|
self.assertEqual(objs, self.docs)
|
||||||
|
|
||||||
# Typical call from within code not to report_action
|
# Typical call from within code not to report_action
|
||||||
objs = self.csv_report.with_context(
|
objs = self.csv_report.with_context(
|
||||||
active_ids=self.docs.ids
|
active_ids=self.docs.ids
|
||||||
)._get_objs_for_report(False, False)
|
)._get_objs_for_report(False, False)
|
||||||
self.assertEquals(objs, self.docs)
|
self.assertEqual(objs, self.docs)
|
||||||
|
|
||||||
# Typical call from WebUI
|
# Typical call from WebUI
|
||||||
objs = self.csv_report._get_objs_for_report(
|
objs = self.csv_report._get_objs_for_report(
|
||||||
self.docs.ids, {"data": [self.report_name, self.report.report_type]}
|
self.docs.ids, {"data": [self.report_name, self.report.report_type]}
|
||||||
)
|
)
|
||||||
self.assertEquals(objs, self.docs)
|
self.assertEqual(objs, self.docs)
|
||||||
|
|
||||||
# Typical call from render
|
# Typical call from render
|
||||||
objs = self.csv_report._get_objs_for_report(self.docs.ids, {})
|
objs = self.csv_report._get_objs_for_report(self.docs.ids, {})
|
||||||
self.assertEquals(objs, self.docs)
|
self.assertEqual(objs, self.docs)
|
||||||
|
|||||||
1
setup/report_csv/odoo/addons/report_csv
Symbolic link
1
setup/report_csv/odoo/addons/report_csv
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../report_csv
|
||||||
6
setup/report_csv/setup.py
Normal file
6
setup/report_csv/setup.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user