From 87f2818191168278791dab5dfa59bf91e2de3458 Mon Sep 17 00:00:00 2001 From: Moises Lopez Date: Tue, 10 May 2022 20:10:29 +0000 Subject: [PATCH] [FIX] ir_sequence: Fix creating date_range_seq with range_month and range_day More info about: - https://github.com/odoo/odoo/pull/91019 TODO: Revert this commit after it is merged --- account_move_name_sequence/models/__init__.py | 1 + .../models/ir_sequence.py | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 account_move_name_sequence/models/ir_sequence.py diff --git a/account_move_name_sequence/models/__init__.py b/account_move_name_sequence/models/__init__.py index 067db8c5..069c9b59 100644 --- a/account_move_name_sequence/models/__init__.py +++ b/account_move_name_sequence/models/__init__.py @@ -1,2 +1,3 @@ from . import account_journal from . import account_move +from . import ir_sequence diff --git a/account_move_name_sequence/models/ir_sequence.py b/account_move_name_sequence/models/ir_sequence.py new file mode 100644 index 00000000..c7ee985f --- /dev/null +++ b/account_move_name_sequence/models/ir_sequence.py @@ -0,0 +1,58 @@ +from dateutil.relativedelta import relativedelta + +from odoo import fields, models + + +class IrSequence(models.Model): + _inherit = "ir.sequence" + + def _create_date_range_seq(self, date): + # Fix issue creating new date range for future dates + # It assigns more than one month + # TODO: Remove if odoo merge the following PR: + # https://github.com/odoo/odoo/pull/91019 + date_obj = fields.Date.from_string(date) + prefix_suffix = "%s %s" % (self.prefix, self.suffix) + if "%(range_day)s" in prefix_suffix: + date_from = date_obj + date_to = date_obj + elif "%(range_month)s" in prefix_suffix: + date_from = date_obj + relativedelta(day=1) + date_to = date_obj + relativedelta(day=31) + else: + date_from = date_obj + relativedelta(day=1, month=1) + date_to = date_obj + relativedelta(day=31, month=12) + date_range = self.env["ir.sequence.date_range"].search( + [ + ("sequence_id", "=", self.id), + ("date_from", ">=", date), + ("date_from", "<=", date_to), + ], + order="date_from desc", + limit=1, + ) + if date_range: + date_to = date_range.date_from + relativedelta(days=-1) + date_range = self.env["ir.sequence.date_range"].search( + [ + ("sequence_id", "=", self.id), + ("date_to", ">=", date_from), + ("date_to", "<=", date), + ], + order="date_to desc", + limit=1, + ) + if date_range: + date_from = date_range.date_to + relativedelta(days=1) + seq_date_range = ( + self.env["ir.sequence.date_range"] + .sudo() + .create( + { + "date_from": date_from, + "date_to": date_to, + "sequence_id": self.id, + } + ) + ) + return seq_date_range