Skip to content

Commit

Permalink
Add Month and Year in Relative to report base date
Browse files Browse the repository at this point in the history
fixes #2
  • Loading branch information
Martronic-SA authored and JordiBForgeFlow committed Nov 17, 2017
1 parent e616b82 commit 5c24212
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
9 changes: 8 additions & 1 deletion mis_builder/CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ Changelog for mis_builder
..
.. *
10.0.3.1.0 (unreleased)
~~~~~~~~~~~~~~~~~~~~~~~

New features:

* [ADD] month and year relative periods, easier to use than
date ranges for the most common case.

10.0.3.0.4 (2017-10-14)
~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
23 changes: 23 additions & 0 deletions mis_builder/models/mis_report_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

import datetime
from dateutil.relativedelta import relativedelta
import logging

from odoo import api, fields, models, _
Expand Down Expand Up @@ -111,6 +112,26 @@ def _compute_dates(self):
record.date_from = fields.Date.to_string(date_from)
record.date_to = fields.Date.to_string(date_to)
record.valid = True
elif record.mode == MODE_REL and record.type == 'm':
date_from = d.replace(day=1)
date_from = date_from + \
relativedelta(months=record.offset)
date_to = date_from + \
relativedelta(months=record.duration-1) + \
relativedelta(day=31)
record.date_from = fields.Date.to_string(date_from)
record.date_to = fields.Date.to_string(date_to)
record.valid = True
elif record.mode == MODE_REL and record.type == 'y':
date_from = d.replace(month=1, day=1)
date_from = date_from + \
relativedelta(years=record.offset)
date_to = date_from + \
relativedelta(years=record.duration-1)
date_to = date_to.replace(month=12, day=31)
record.date_from = fields.Date.to_string(date_from)
record.date_to = fields.Date.to_string(date_to)
record.valid = True
elif record.mode == MODE_REL and record.type == 'date_range':
date_range_obj = record.env['date.range']
current_periods = date_range_obj.search(
Expand Down Expand Up @@ -152,6 +173,8 @@ def _compute_dates(self):
type = fields.Selection(
[('d', _('Day')),
('w', _('Week')),
('m', _('Month')),
('y', _('Year')),
('date_range', _('Date Range'))],
string='Period type'
)
Expand Down
28 changes: 28 additions & 0 deletions mis_builder/tests/test_period_dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,34 @@ def test_rel_week(self):
self.assertEqual(self.period.date_to, '2017-01-15')
self.assertTrue(self.period.valid)

def test_rel_month(self):
self.instance.write(dict(
comparison_mode=True,
date='2017-01-05'
))
self.period.write(dict(
mode=MODE_REL,
type='m',
offset='1',
))
self.assertEqual(self.period.date_from, '2017-02-01')
self.assertEqual(self.period.date_to, '2017-02-28')
self.assertTrue(self.period.valid)

def test_rel_year(self):
self.instance.write(dict(
comparison_mode=True,
date='2017-05-06'
))
self.period.write(dict(
mode=MODE_REL,
type='y',
offset='1',
))
self.assertEqual(self.period.date_from, '2018-01-01')
self.assertEqual(self.period.date_to, '2018-12-31')
self.assertTrue(self.period.valid)

def test_rel_date_range(self):
# create a few date ranges
date_range_type = self.env['date.range.type'].create(dict(
Expand Down

0 comments on commit 5c24212

Please sign in to comment.