diff --git a/odoo/addons/test_read_group/tests/test_date_range.py b/odoo/addons/test_read_group/tests/test_date_range.py index 3b0d85e743e..0071c4146ac 100644 --- a/odoo/addons/test_read_group/tests/test_date_range.py +++ b/odoo/addons/test_read_group/tests/test_date_range.py @@ -112,3 +112,17 @@ class TestDateRange(common.TransactionCase): groups = self.Model.read_group([], fields=['date', 'value'], groupby=['date:quarter', 'date:day'], lazy=False) self.assertEqual(groups, expected) + + def test_duplicate_month(self): + records = self.Model.create([ + {'date': '2022-01-29', 'value': 1}]) + expected = [{ + '__domain': ['&', '&', ('id', 'in', records.ids), '&', ('date', '>=', '2022-01-01'), ('date', '<', '2022-02-01'), ('date', '=', 'January 2022')], + '__count': 1, + '__range': {'date:month': {'from': '2022-01-01', 'to': '2022-02-01'}}, + 'value': 1, + 'date:month': 'January 2022' + }] + groups = self.Model.read_group( + [('id', 'in', records.ids)], fields=['date', 'value'], groupby=['date:month', 'date:month'], lazy=False) + self.assertEqual(groups, expected) diff --git a/odoo/models.py b/odoo/models.py index 4627fd60da1..b96a8a17a84 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -2455,7 +2455,7 @@ class BaseModel(metaclass=MetaModel): additional_domain = [(field_name, '=', value)] if field.type in ('date', 'datetime'): - if value: + if value and isinstance(value, (datetime.date, datetime.datetime)): range_start = value range_end = value + interval if field.type == 'datetime': @@ -2485,7 +2485,7 @@ class BaseModel(metaclass=MetaModel): (field_name, '>=', range_start), (field_name, '<', range_end), ] - else: + elif not value: # Set the __range of the group containing records with an unset # date/datetime field value to False. row.setdefault('__range', {})[group] = False