From d526bb94c60331ffaa59b7f91bea63965622cb0d Mon Sep 17 00:00:00 2001 From: jbeficent Date: Thu, 11 Feb 2016 12:11:29 +0100 Subject: [PATCH] [IMP] add prefixes. comes from PR #145 --- mis_builder/__init__.py | 24 +--- mis_builder/__openerp__.py | 24 +--- mis_builder/models/__init__.py | 24 +--- mis_builder/models/aep.py | 27 +--- mis_builder/models/aggregate.py | 24 +--- mis_builder/models/mis_builder.py | 44 ++----- mis_builder/report/__init__.py | 24 +--- mis_builder/report/mis_builder_xls.py | 120 ++++++++++++++++++ mis_builder/report/mis_builder_xlsx.py | 2 + .../report/report_mis_report_instance.py | 24 +--- mis_builder/tests/__init__.py | 24 +--- mis_builder/tests/test_mis_builder.py | 27 +--- mis_builder/views/mis_builder.xml | 1 + mis_builder/wizard/__init__.py | 24 +--- mis_builder/wizard/mis_builder_dashboard.py | 107 +++++++--------- 15 files changed, 203 insertions(+), 317 deletions(-) create mode 100644 mis_builder/report/mis_builder_xls.py diff --git a/mis_builder/__init__.py b/mis_builder/__init__.py index 426d492a..409475d8 100644 --- a/mis_builder/__init__.py +++ b/mis_builder/__init__.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import models from . import wizard diff --git a/mis_builder/__openerp__.py b/mis_builder/__openerp__.py index f38e1582..6b1fe3bb 100644 --- a/mis_builder/__openerp__.py +++ b/mis_builder/__openerp__.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { 'name': 'MIS Builder', diff --git a/mis_builder/models/__init__.py b/mis_builder/models/__init__.py index 220a97a2..7f8b7fc8 100644 --- a/mis_builder/models/__init__.py +++ b/mis_builder/models/__init__.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import mis_builder from . import aep diff --git a/mis_builder/models/aep.py b/mis_builder/models/aep.py index 6d3a47a7..4267c296 100644 --- a/mis_builder/models/aep.py +++ b/mis_builder/models/aep.py @@ -1,31 +1,12 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import re from collections import defaultdict -from openerp.osv import expression +from openerp.exceptions import Warning as UserError +from openerp.models import expression from openerp.tools.safe_eval import safe_eval MODE_VARIATION = 'p' diff --git a/mis_builder/models/aggregate.py b/mis_builder/models/aggregate.py index f098a4c5..bd2aa3c3 100644 --- a/mis_builder/models/aggregate.py +++ b/mis_builder/models/aggregate.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). def _sum(l): diff --git a/mis_builder/models/mis_builder.py b/mis_builder/models/mis_builder.py index e466221b..6be04b27 100644 --- a/mis_builder/models/mis_builder.py +++ b/mis_builder/models/mis_builder.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import datetime import dateutil @@ -76,7 +56,7 @@ class MisReportKpi(models.Model): In addition to a name and description, it has an expression to compute it based on queries defined in the MIS report. It also has various informations defining how to render it - (numeric or percentage or a string, a suffix, divider) and + (numeric or percentage or a string, a prefix, a suffix, divider) and how to render comparison of two values of the KPI. KPI's have a sequence and are ordered inside the MIS report. """ @@ -106,6 +86,7 @@ class MisReportKpi(models.Model): string='Factor', default='1') dp = fields.Integer(string='Rounding', default=0) + prefix = fields.Char(size=16, string='Prefix') suffix = fields.Char(size=16, string='Suffix') compare_method = fields.Selection([('diff', _('Difference')), ('pct', _('Percentage')), @@ -165,10 +146,10 @@ class MisReportKpi(models.Model): return '#N/A' elif self.type == 'num': return self._render_num(lang_id, value, self.divider, - self.dp, self.suffix) + self.dp, self.prefix, self.suffix) elif self.type == 'pct': return self._render_num(lang_id, value, 0.01, - self.dp, '%') + self.dp, '', '%') else: return unicode(value) @@ -182,7 +163,7 @@ class MisReportKpi(models.Model): return self._render_num( lang_id, value - base_value, - 0.01, self.dp, _('pp'), sign='+') + 0.01, self.dp, '', _('pp'), sign='+') elif self.type == 'num': if average_value: value = value / float(average_value) @@ -192,17 +173,17 @@ class MisReportKpi(models.Model): return self._render_num( lang_id, value - base_value, - self.divider, self.dp, self.suffix, sign='+') + self.divider, self.dp, self.prefix, self.suffix, sign='+') elif self.compare_method == 'pct': if round(base_value, self.dp) != 0: return self._render_num( lang_id, (value - base_value) / abs(base_value), - 0.01, self.dp, '%', sign='+') + 0.01, self.dp, '', '%', sign='+') return '' def _render_num(self, lang_id, value, divider, - dp, suffix, sign='-'): + dp, prefix, suffix, sign='-'): divider_label = _get_selection_label( self._columns['divider'].selection, divider) if divider_label == '1': @@ -213,8 +194,8 @@ class MisReportKpi(models.Model): '%%%s.%df' % (sign, dp), value, grouping=True) - value = u'%s\N{NO-BREAK SPACE}%s%s' % \ - (value, divider_label, suffix or '') + value = u'%s\N{NARROW NO-BREAK SPACE}%s\N{NO-BREAK SPACE}%s%s' % \ + (prefix or '', value, divider_label, suffix or '') value = value.replace('-', u'\N{NON-BREAKING HYPHEN}') return value @@ -538,6 +519,7 @@ class MisReportInstancePeriod(models.Model): 'val_r': kpi_val_rendered, 'val_c': kpi_val_comment, 'style': kpi_style, + 'prefix': kpi.prefix, 'suffix': kpi.suffix, 'dp': kpi.dp, 'is_percentage': kpi.type == 'pct', diff --git a/mis_builder/report/__init__.py b/mis_builder/report/__init__.py index 250cef12..bdcf09d6 100644 --- a/mis_builder/report/__init__.py +++ b/mis_builder/report/__init__.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). try: from . import mis_builder_xlsx diff --git a/mis_builder/report/mis_builder_xls.py b/mis_builder/report/mis_builder_xls.py new file mode 100644 index 00000000..df3d3ee5 --- /dev/null +++ b/mis_builder/report/mis_builder_xls.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import xlwt +from openerp.report import report_sxw +from openerp.addons.report_xls.report_xls import report_xls +import logging +_logger = logging.getLogger(__name__) + + +class MisBuilderXlsParser(report_sxw.rml_parse): + + def __init__(self, cr, uid, name, context): + super(MisBuilderXlsParser, self).__init__( + cr, uid, name, context=context) + self.context = context + + +class MisBuilderXls(report_xls): + + def __init__(self, name, table, rml=False, parser=False, header=True, + store=False): + super(MisBuilderXls, self).__init__( + name, table, rml, parser, header, store) + + # Cell Styles + _xs = self.xls_styles + # header + rh_cell_format = _xs['bold'] + _xs['fill'] + \ + _xs['borders_all'] + _xs['right'] + self.rh_cell_style = xlwt.easyxf(rh_cell_format) + self.rh_cell_style_date = xlwt.easyxf( + rh_cell_format, num_format_str=report_xls.date_format) + # lines + self.mis_rh_cell_style = xlwt.easyxf( + _xs['borders_all'] + _xs['bold'] + _xs['fill']) + + def generate_xls_report(self, _p, _xs, data, objects, wb): + + report_name = objects[0].name + ws = wb.add_sheet(report_name[:31]) + ws.panes_frozen = True + ws.remove_splits = True + ws.portrait = 0 # Landscape + ws.fit_width_to_pages = 1 + row_pos = 0 + + # set print header/footer + ws.header_str = self.xls_headers['standard'] + ws.footer_str = self.xls_footers['standard'] + + # Title + c_specs = [ + ('report_name', 1, 0, 'text', report_name), + ] + row_data = self.xls_row_template(c_specs, ['report_name']) + row_pos = self.xls_write_row( + ws, row_pos, row_data, row_style=xlwt.easyxf(_xs['xls_title'])) + row_pos += 1 + + # get the computed result of the report + data = self.pool.get('mis.report.instance').compute( + self.cr, self.uid, objects[0].id) + + # Column headers + header_name_list = [''] + col_specs_template = {'': {'header': [1, 30, 'text', ''], + 'header_date': [1, 1, 'text', '']}} + for col in data['header'][0]['cols']: + col_specs_template[col['name']] = {'header': [1, 30, 'text', + col['name']], + 'header_date': [1, 1, 'text', + col['date']]} + header_name_list.append(col['name']) + c_specs = map( + lambda x: self.render(x, col_specs_template, 'header'), + header_name_list) + row_data = self.xls_row_template(c_specs, [x[0] for x in c_specs]) + row_pos = self.xls_write_row( + ws, row_pos, row_data, row_style=self.rh_cell_style, + set_column_size=True) + c_specs = map(lambda x: self.render( + x, col_specs_template, 'header_date'), header_name_list) + row_data = self.xls_row_template(c_specs, [x[0] for x in c_specs]) + row_pos = self.xls_write_row( + ws, row_pos, row_data, row_style=self.rh_cell_style_date) + + ws.set_horz_split_pos(row_pos) + ws.set_vert_split_pos(1) + + for line in data['content']: + col = 0 + ws.write(row_pos, col, line['kpi_name'], self.mis_rh_cell_style) + for value in line['cols']: + col += 1 + num_format_str = '#' + if value.get('dp'): + num_format_str += '.' + num_format_str += '0' * int(value['dp']) + if value.get('prefix'): + num_format_str = '"%s"' % value['prefix'] + num_format_str + if value.get('suffix'): + num_format_str += ' "%s"' % value['suffix'] + kpi_cell_style = xlwt.easyxf( + _xs['borders_all'] + _xs['right'], + num_format_str=num_format_str) + if value.get('val'): + val = value['val'] + if value.get('is_percentage'): + val = val / 0.01 + ws.write(row_pos, col, val, kpi_cell_style) + else: + ws.write(row_pos, col, value['val_r'], kpi_cell_style) + row_pos += 1 + + +MisBuilderXls('report.mis.report.instance.xls', + 'mis.report.instance', + parser=MisBuilderXlsParser) diff --git a/mis_builder/report/mis_builder_xlsx.py b/mis_builder/report/mis_builder_xlsx.py index 69469142..9aee3685 100644 --- a/mis_builder/report/mis_builder_xlsx.py +++ b/mis_builder/report/mis_builder_xlsx.py @@ -73,6 +73,8 @@ class MisBuilderXslx(ReportXlsx): if value.get('dp'): num_format_str += '.' num_format_str += '0' * int(value['dp']) + if value.get('prefix'): + num_format_str = '"%s"' % value['prefix'] + num_format_str if value.get('suffix'): num_format_str = num_format_str + ' "%s"' % value['suffix'] kpi_format = workbook.add_format({'num_format': num_format_str, diff --git a/mis_builder/report/report_mis_report_instance.py b/mis_builder/report/report_mis_report_instance.py index 1a85e0ea..44cfbeb8 100644 --- a/mis_builder/report/report_mis_report_instance.py +++ b/mis_builder/report/report_mis_report_instance.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import logging diff --git a/mis_builder/tests/__init__.py b/mis_builder/tests/__init__.py index 46244c14..622712e3 100644 --- a/mis_builder/tests/__init__.py +++ b/mis_builder/tests/__init__.py @@ -1,25 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import test_mis_builder diff --git a/mis_builder/tests/test_mis_builder.py b/mis_builder/tests/test_mis_builder.py index 85d7af9f..637aed32 100644 --- a/mis_builder/tests/test_mis_builder.py +++ b/mis_builder/tests/test_mis_builder.py @@ -1,26 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import openerp.tests.common as common @@ -64,11 +44,12 @@ class TestMisBuilder(common.TransactionCase): 'mis_report_instance_' 'period_test'), 'style': None, + 'prefix': False, 'suffix': False, 'expr': 'len(test)', 'val_c': 'total_test = len(test)', 'val': 0, - 'val_r': u'0\xa0', + 'val_r': u'\u202f0\xa0', 'is_percentage': False, 'dp': 0, 'drilldown': False}] diff --git a/mis_builder/views/mis_builder.xml b/mis_builder/views/mis_builder.xml index 6d4f5a16..f5154381 100644 --- a/mis_builder/views/mis_builder.xml +++ b/mis_builder/views/mis_builder.xml @@ -49,6 +49,7 @@ + diff --git a/mis_builder/wizard/__init__.py b/mis_builder/wizard/__init__.py index 17e53ebe..8cbd8455 100644 --- a/mis_builder/wizard/__init__.py +++ b/mis_builder/wizard/__init__.py @@ -1,25 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import mis_builder_dashboard diff --git a/mis_builder/wizard/mis_builder_dashboard.py b/mis_builder/wizard/mis_builder_dashboard.py index b2550b8d..f4f91a1b 100644 --- a/mis_builder/wizard/mis_builder_dashboard.py +++ b/mis_builder/wizard/mis_builder_dashboard.py @@ -1,87 +1,66 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# mis_builder module for Odoo, Management Information System Builder -# Copyright (C) 2014-2015 ACSONE SA/NV () -# -# This file is a part of mis_builder -# -# mis_builder is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License v3 or later -# as published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# mis_builder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License v3 or later for more details. -# -# You should have received a copy of the GNU Affero General Public License -# v3 or later along with this program. -# If not, see . -# -############################################################################## +# © 2014-2015 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from openerp.osv import orm, fields +from openerp import api, fields, models from lxml import etree -class AddMisReportInstanceDashboard(orm.TransientModel): +class AddMisReportInstanceDashboard(models.TransientModel): _name = "add.mis.report.instance.dashboard.wizard" - _columns = {'name': fields.char('Name', size=32, required=True), - 'dashboard_id': fields.many2one( - 'ir.actions.act_window', - string="Dashboard", required=True, - domain="[('res_model', '=', 'board.board')]"), - } + name = fields.Char('Name', size=32, required=True) - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - if context.get('active_id'): + dashboard_id = fields.Many2one('ir.actions.act_window', + string="Dashboard", required=True, + domain="[('res_model', '=', " + "'board.board')]") + + @api.model + def default_get(self, fields): + res = {} + if self.env.context.get('active_id', False): res = super(AddMisReportInstanceDashboard, self).default_get( - cr, uid, fields, context=context) + fields) # get report instance name - res['name'] = self.pool['mis.report.instance'].read( - cr, uid, context['active_id'], ['name'])['name'] + res['name'] = self.env['mis.report.instance'].browse( + self.env.context['active_id']).name return res - def action_add_to_dashboard(self, cr, uid, ids, context=None): - if context is None: - context = {} - assert 'active_id' in context, "active_id missing in context" - wizard_data = self.browse(cr, uid, ids, context=context)[0] + @api.multi + def action_add_to_dashboard(self): + assert self.env.context.get('active_id', False), \ + "active_id missing in context" # create the act_window corresponding to this report - view_id = self.pool['ir.model.data'].get_object_reference( - cr, uid, 'mis_builder', 'mis_report_instance_result_view_form')[1] - report_result = self.pool['ir.actions.act_window'].create( - cr, uid, + 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'].create( {'name': 'mis.report.instance.result.view.action.%d' - % context['active_id'], + % self.env.context['active_id'], 'res_model': 'mis.report.instance', - 'res_id': context['active_id'], + 'res_id': self.env.context['active_id'], 'target': 'current', 'view_mode': 'form', - 'view_id': view_id}) + 'view_id': view.id}) # add this result in the selected dashboard - last_customization = self.pool['ir.ui.view.custom'].search( - cr, uid, - [('user_id', '=', uid), - ('ref_id', '=', wizard_data.dashboard_id.view_id.id)], limit=1) - arch = wizard_data.dashboard_id.view_id.arch + 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.pool['ir.ui.view.custom'].read( - cr, uid, last_customization[0], ['arch'])['arch'] + 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(context), - 'name': str(report_result), - 'string': wizard_data.name, - 'view_mode': 'form'})) - self.pool['ir.ui.view.custom'].create( - cr, uid, {'user_id': uid, - 'ref_id': wizard_data.dashboard_id.view_id.id, - 'arch': etree.tostring(new_arch, pretty_print=True)}) + 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', }