From 4505af107df468708166afe950418f267617a4b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BEAU?= Date: Thu, 28 Apr 2016 22:40:39 +0200 Subject: [PATCH] [IMP] improve report view --- mis_builder/models/mis_builder.py | 72 +++++++++++++++- mis_builder/views/mis_builder.xml | 132 +++++++++++++++++++++--------- 2 files changed, 162 insertions(+), 42 deletions(-) diff --git a/mis_builder/models/mis_builder.py b/mis_builder/models/mis_builder.py index 121014e2..7591c282 100644 --- a/mis_builder/models/mis_builder.py +++ b/mis_builder/models/mis_builder.py @@ -659,13 +659,23 @@ class MisReportInstancePeriod(models.Model): """ @api.one - @api.depends('report_instance_id.pivot_date', 'type', 'offset', 'duration') + @api.depends('report_instance_id.pivot_date', 'type', 'offset', + 'duration', 'report_instance_id.comparison_mode') def _compute_dates(self): self.date_from = False self.date_to = False self.valid = False - d = fields.Date.from_string(self.report_instance_id.pivot_date) - if self.type == 'd': + report = self.report_instance_id + d = fields.Date.from_string(report.pivot_date) + if not report.comparison_mode: + self.date_from = report.date_from + self.date_to = report.date_to + self.valid = True + elif self.mode == 'fix': + self.date_from = self.manual_date_from + self.date_to = self.manual_date_to + self.valid = True + elif self.type == 'd': date_from = d + datetime.timedelta(days=self.offset) date_to = date_from + \ datetime.timedelta(days=self.duration - 1) @@ -705,6 +715,10 @@ class MisReportInstancePeriod(models.Model): name = fields.Char(size=32, required=True, string='Description', translate=True) + mode = fields.Selection([('fix', 'Fix'), + ('relative', 'Relative'), + ], required=True, + default='fix') type = fields.Selection([('d', _('Day')), ('w', _('Week')), ('date_range', _('Date Range')) @@ -721,6 +735,11 @@ class MisReportInstancePeriod(models.Model): default=1) date_from = fields.Date(compute='_compute_dates', string="From") date_to = fields.Date(compute='_compute_dates', string="To") + manual_date_from = fields.Date(string="From") + manual_date_to = fields.Date(string="To") + date_range_id = fields.Many2one( + comodel_name='date.range', + string='Date Range') valid = fields.Boolean(compute='_compute_dates', type='boolean', string='Valid') @@ -740,7 +759,7 @@ class MisReportInstancePeriod(models.Model): default=1) subkpi_ids = fields.Many2many( 'mis.report.subkpi', - string="Sub KPI") + string="Sub KPI Filter") _order = 'sequence, id' @@ -753,6 +772,12 @@ class MisReportInstancePeriod(models.Model): 'Period name should be unique by report'), ] + @api.onchange('date_range_id') + def onchange_date_range(self): + for record in self: + record.manual_date_from = record.date_range_id.date_start + record.manual_date_to = record.date_range_id.date_end + @api.multi def _get_additional_move_line_filter(self): """ Prepare a filter to apply on all move lines @@ -944,6 +969,14 @@ class MisReportInstance(models.Model): default=_default_company, required=True) landscape_pdf = fields.Boolean(string='Landscape PDF') + comparison_mode = fields.Boolean( + compute="_compute_comparison_mode", + inverse="_inverse_comparison_mode") + date_range_id = fields.Many2one( + comodel_name='date.range', + string='Date Range') + date_from = fields.Date(string="From") + date_to = fields.Date(string="To") @api.one def copy(self, default=None): @@ -957,6 +990,37 @@ class MisReportInstance(models.Model): return datetime.datetime.strftime( fields.Date.from_string(date), date_format) + @api.multi + @api.depends('date_from') + def _compute_comparison_mode(self): + for instance in self: + instance.advanced_mode = not bool(instance.date_from) + + @api.multi + def _inverse_comparison_mode(self): + for record in self: + if not record.comparison_mode: + if not record.date_from: + record.date_from = datetime.now() + if not record.date_to: + record.date_to = datetime.now() + record.period_ids.unlink() + record.write({'period_ids': [ + (0, 0, { + 'name': 'Default', + 'type': 'd', + }) + ]}) + else: + record.date_from = None + record.date_to = None + + @api.onchange('date_range_id') + def onchange_date_range(self): + for record in self: + record.date_from = record.date_range_id.date_start + record.date_to = record.date_range_id.date_end + @api.multi def preview(self): assert len(self) == 1 diff --git a/mis_builder/views/mis_builder.xml b/mis_builder/views/mis_builder.xml index 226307f3..df80f979 100644 --- a/mis_builder/views/mis_builder.xml +++ b/mis_builder/views/mis_builder.xml @@ -230,6 +230,12 @@
+
+
-
-
- - - - - - - - - +
+ + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
@@ -294,5 +299,56 @@ + + mis.report.instance.period + + +
+ +
+
+
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+