diff options
| author | Laurent Smet <las@odoo.com> | 2018-12-11 10:27:34 +0000 |
|---|---|---|
| committer | Laurent Smet <las@odoo.com> | 2019-01-03 08:30:31 +0000 |
| commit | 67d3d30cf2992e3193ec6d20025da5ad2261871a (patch) | |
| tree | 899993a4101aa751b92118a9a9a4ea316c39386b /odoo/tools/date_utils.py | |
| parent | 5807c3bd95b64df77366d3c214c54ad9638e64a6 (diff) | |
[FIX] tools/date_utils: Fix get_fiscal_year with leap years
Suppose calling get_fiscal_year(date, day=29, month=2) with date(year=2017, month=2, day=28)
The computation steps are:
date_from = date(year=2017, month=2, day=28) - 1 year = date(year=2016, month=2, day=28)
date_from = date_from + 1 day = date(year=2016, month=2, day=29)
It's incorrect because the value of date_from must be date(year=2016, month=3, day=1)
closes odoo/odoo#29416
Diffstat (limited to 'odoo/tools/date_utils.py')
| -rw-r--r-- | odoo/tools/date_utils.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/odoo/tools/date_utils.py b/odoo/tools/date_utils.py index 55220ced033..26bfdabd835 100644 --- a/odoo/tools/date_utils.py +++ b/odoo/tools/date_utils.py @@ -55,8 +55,19 @@ def get_fiscal_year(date, day=31, month=12): ''' max_day = calendar.monthrange(date.year, month)[1] date_to = type(date)(date.year, month, min(day, max_day)) + + # Force at 29 February instead of 28 in case of leap year. + if date_to.month == 2 and date_to.day == 28 and max_day == 29: + date_to = type(date)(date.year, 2, 29) + if date <= date_to: date_from = date_to - relativedelta(years=1) + max_day = calendar.monthrange(date_from.year, date_from.month)[1] + + # Force at 29 February instead of 28 in case of leap year. + if date_from.month == 2 and date_from.day == 28 and max_day == 29: + date_from = type(date)(date_from.year, 2, 29) + date_from += relativedelta(days=1) else: date_from = date_to + relativedelta(days=1) |
