2021-03-23 19:36:01 +00:00
|
|
|
# Copyright 2014 ACSONE SA/NV (<http://acsone.eu>)
|
2021-10-10 02:21:14 +00:00
|
|
|
# Copyright 2020 CorporateHub (https://corporatehub.eu)
|
2021-03-23 19:36:01 +00:00
|
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
|
|
|
|
from lxml import etree
|
|
|
|
|
|
|
|
from flectra import api, fields, models
|
|
|
|
|
|
|
|
|
|
|
|
class AddMisReportInstanceDashboard(models.TransientModel):
|
|
|
|
_name = "add.mis.report.instance.dashboard.wizard"
|
|
|
|
_description = "MIS Report Add to Dashboard Wizard"
|
|
|
|
|
2021-10-10 02:21:14 +00:00
|
|
|
name = fields.Char("Name", required=True)
|
2021-03-23 19:36:01 +00:00
|
|
|
|
|
|
|
dashboard_id = fields.Many2one(
|
|
|
|
"ir.actions.act_window",
|
|
|
|
string="Dashboard",
|
|
|
|
required=True,
|
|
|
|
domain="[('res_model', '=', " "'board.board')]",
|
|
|
|
)
|
|
|
|
|
|
|
|
@api.model
|
|
|
|
def default_get(self, fields_list):
|
|
|
|
res = {}
|
|
|
|
if self.env.context.get("active_id", False):
|
|
|
|
res = super(AddMisReportInstanceDashboard, self).default_get(fields_list)
|
|
|
|
# get report instance name
|
|
|
|
res["name"] = (
|
|
|
|
self.env["mis.report.instance"]
|
|
|
|
.browse(self.env.context["active_id"])
|
|
|
|
.name
|
|
|
|
)
|
|
|
|
return res
|
|
|
|
|
|
|
|
def action_add_to_dashboard(self):
|
|
|
|
active_model = self.env.context.get("active_model")
|
|
|
|
assert active_model == "mis.report.instance"
|
|
|
|
active_id = self.env.context.get("active_id")
|
|
|
|
assert active_id
|
|
|
|
mis_report_instance = self.env[active_model].browse(active_id)
|
|
|
|
# create the act_window corresponding to this report
|
|
|
|
self.env.ref("mis_builder.mis_report_instance_result_view_form")
|
|
|
|
view = self.env.ref("mis_builder.mis_report_instance_result_view_form")
|
|
|
|
report_result = (
|
|
|
|
self.env["ir.actions.act_window"]
|
|
|
|
.sudo()
|
|
|
|
.create(
|
|
|
|
{
|
|
|
|
"name": "mis.report.instance.result.view.action.%d"
|
|
|
|
% self.env.context["active_id"],
|
|
|
|
"res_model": active_model,
|
|
|
|
"res_id": active_id,
|
|
|
|
"target": "current",
|
|
|
|
"view_mode": "form",
|
|
|
|
"view_id": view.id,
|
|
|
|
"context": mis_report_instance._context_with_filters(),
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
# add this result in the selected dashboard
|
|
|
|
last_customization = self.env["ir.ui.view.custom"].search(
|
|
|
|
[
|
|
|
|
("user_id", "=", self.env.uid),
|
|
|
|
("ref_id", "=", self.dashboard_id.view_id.id),
|
|
|
|
],
|
|
|
|
limit=1,
|
|
|
|
)
|
|
|
|
arch = self.dashboard_id.view_id.arch
|
|
|
|
if last_customization:
|
|
|
|
arch = self.env["ir.ui.view.custom"].browse(last_customization[0].id).arch
|
|
|
|
new_arch = etree.fromstring(arch)
|
|
|
|
column = new_arch.xpath("//column")[0]
|
|
|
|
column.append(
|
|
|
|
etree.Element(
|
|
|
|
"action",
|
|
|
|
{
|
|
|
|
"context": str(self.env.context),
|
|
|
|
"name": str(report_result.id),
|
|
|
|
"string": self.name,
|
|
|
|
"view_mode": "form",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
)
|
|
|
|
self.env["ir.ui.view.custom"].create(
|
|
|
|
{
|
|
|
|
"user_id": self.env.uid,
|
|
|
|
"ref_id": self.dashboard_id.view_id.id,
|
|
|
|
"arch": etree.tostring(new_arch, pretty_print=True),
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
return {"type": "ir.actions.act_window_close"}
|