[FIX] tools: fiscal year of 30/12 is taken as 31

To reproduce:
- Put your fiscal year to the 30th of December (yes it's unlikely)
- Create an asset
- Compute depreciations
=> they are created for the 31th of December

It comes from the `get_fiscal_year` in `date_utils` which considers it as the case of the 28th of February

opw-3704466

closes odoo/odoo#153528

X-original-commit: cd0bb178441790e7e33c0d1c01b7ade82d4ab8c0
Signed-off-by: Florian Gilbert (flg) <flg@odoo.com>
This commit is contained in:
Gauthier Wala (gawa)
2024-02-10 17:43:14 +00:00
parent ec4cf76d04
commit c017f44f4f
3 changed files with 28 additions and 1 deletions
+1
View File
@@ -7,6 +7,7 @@ from . import test_barcode
from . import test_base
from . import test_basecase
from . import test_cache
from . import test_date_utils
from . import test_deprecation
from . import test_db_cursor
from . import test_display_name
+26
View File
@@ -0,0 +1,26 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import date
from odoo.tests import BaseCase
from odoo.tools.date_utils import get_fiscal_year
class TestDateUtils(BaseCase):
def test_fiscal_year(self):
self.assertEqual(get_fiscal_year(date(2024, 12, 31)), (date(2024, 1, 1), date(2024, 12, 31)))
self.assertEqual(get_fiscal_year(date(2024, 12, 31), 30, 11), (date(2024, 12, 1), date(2025, 11, 30)))
self.assertEqual(get_fiscal_year(date(2024, 10, 31), 30, 11), (date(2023, 12, 1), date(2024, 11, 30)))
self.assertEqual(get_fiscal_year(date(2024, 10, 31), 30, 12), (date(2023, 12, 31), date(2024, 12, 30)))
self.assertEqual(get_fiscal_year(date(2024, 10, 31), month=11), (date(2023, 12, 1), date(2024, 11, 30)))
self.assertEqual(get_fiscal_year(date(2024, 2, 29)), (date(2024, 1, 1), date(2024, 12, 31)))
self.assertEqual(get_fiscal_year(date(2024, 12, 31), 29, 2), (date(2024, 3, 1), date(2025, 2, 28)))
self.assertEqual(get_fiscal_year(date(2024, 12, 31), 28, 2), (date(2024, 3, 1), date(2025, 2, 28)))
self.assertEqual(get_fiscal_year(date(2023, 12, 31), 28, 2), (date(2023, 3, 1), date(2024, 2, 29)))
self.assertEqual(get_fiscal_year(date(2023, 12, 31), 29, 2), (date(2023, 3, 1), date(2024, 2, 29)))
self.assertEqual(get_fiscal_year(date(2024, 2, 29), 28, 2), (date(2023, 3, 1), date(2024, 2, 29)))
self.assertEqual(get_fiscal_year(date(2023, 2, 28), 28, 2), (date(2022, 3, 1), date(2023, 2, 28)))
self.assertEqual(get_fiscal_year(date(2023, 2, 28), 29, 2), (date(2022, 3, 1), date(2023, 2, 28)))
+1 -1
View File
@@ -65,7 +65,7 @@ def get_fiscal_year(date, day=31, month=12):
def fix_day(year, month, day):
max_day = calendar.monthrange(year, month)[1]
if (month == 2 and day in (28, max_day)) or (month != 2 and day in (30, max_day)):
if month == 2 and day in (28, max_day):
return max_day
return min(day, max_day)