mirror of
https://gitlab.com/flectra-community/server-ux.git
synced 2024-11-25 15:42:06 +00:00
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
# Copyright (C) 2017 Creu Blanca
|
||
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||
|
|
||
|
from datetime import date as datetime_date, timedelta
|
||
|
|
||
|
from dateutil.relativedelta import relativedelta
|
||
|
|
||
|
from flectra import fields, models
|
||
|
|
||
|
|
||
|
class IrSequence(models.Model):
|
||
|
_inherit = "ir.sequence"
|
||
|
|
||
|
range_reset = fields.Selection(
|
||
|
[
|
||
|
("daily", "Daily"),
|
||
|
("weekly", "Weekly"),
|
||
|
("monthly", "Monthly"),
|
||
|
("yearly", "Yearly"),
|
||
|
]
|
||
|
)
|
||
|
|
||
|
def _compute_date_from_to(self, date):
|
||
|
self.ensure_one()
|
||
|
date_from = date_to = date
|
||
|
if self.range_reset == "weekly":
|
||
|
date_from = date_from - timedelta(days=date_from.weekday())
|
||
|
date_to = date_from + timedelta(days=6)
|
||
|
elif self.range_reset == "monthly":
|
||
|
date_from = datetime_date(date_from.year, date_from.month, 1)
|
||
|
date_to = date_from + relativedelta(months=1)
|
||
|
date_to += relativedelta(days=-1)
|
||
|
elif self.range_reset == "yearly":
|
||
|
date_from = datetime_date(date_from.year, 1, 1)
|
||
|
date_to = datetime_date(date_from.year, 12, 31)
|
||
|
return date_from, date_to
|
||
|
|
||
|
def _create_date_range_seq(self, date):
|
||
|
self.ensure_one()
|
||
|
if not self.range_reset:
|
||
|
return super()._create_date_range_seq(date)
|
||
|
date_from, date_to = self._compute_date_from_to(date)
|
||
|
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 + timedelta(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 + timedelta(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
|