# © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from datetime import date from dateutil.relativedelta import relativedelta from odoo import api, fields, models def get_years(): year_list = [] for i in range(2019, 2030): year_list.append((str(i), str(i))) return year_list MONTHS = [ ("1", "Janv"), ("2", "Fév"), ("3", "Mars"), ("4", "Avr"), ("5", "Mai"), ("6", "Juin"), ("7", "Juil"), ("8", "Août"), ("9", "Sept"), ("10", "Oct"), ("11", "Nov"), ("12", "Dec"), ] class ScopMonthTimesheet(models.Model): _name = "ur.month.timesheet" _description = "Heures theoriques mensuelles" _order = "date_timesheet" def _default_ur(self): return self.env["res.company"]._ur_default_get() year = fields.Selection( selection=get_years(), string="Année", default=fields.Date.today().year ) month = fields.Selection(selection=MONTHS, string="Mois") date_timesheet = fields.Date( string="Mois format date", compute="_compute_date_timesheet", store=True, ) company_id = fields.Many2one( comodel_name="res.company", string="Société", default=lambda self: self.env.company, ) ur_id = fields.Many2one( "union.regionale", string="Union Régionale", index=True, ondelete="restrict", default=_default_ur, ) working_time = fields.Integer("Heures théoriques") _sql_constraints = [ ( "month_year_uniq", "UNIQUE (year, month, ur_id)", "Cette date a déjà été renseignée.", ) ] @api.depends("year", "month") def _compute_date_timesheet(self): for month in self: date_timesheet = date(int(month.year), int(month.month), 1) month.date_timesheet = date_timesheet @api.model def get_month_values(self): today = date.today() first_date = today.replace(day=1) - relativedelta(months=6) last_date = today.replace(day=1) + relativedelta(months=6) values = self.search( [ ("date_timesheet", ">=", first_date), ("date_timesheet", "<=", last_date), ("ur_id", "=", self.env.company.ur_id.id), ] ) return { "month_values": values.mapped( lambda m: { "year": m.year, "month": self._fields["month"].selection[int(m.month) - 1][1], "working_time": m.working_time, "date_timesheet": m.date_timesheet, } ), "today": today.replace(day=1), }