# © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 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 = "year, month" 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") 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.model def get_month_values(self): month_values = self.search( [ "&", "|", "&", ("year", "<", fields.Date.today().year), ("month", ">", fields.Date.today().month), "&", ("year", "<", fields.Date.today().year + 1), ("month", "<=", fields.Date.today().month + 1), ("ur_id", "=", self.env.user.ur_id.id), ], limit=12, order="year desc, month desc", ).sorted(reverse=False) return { "month": month_values.mapped( lambda x: { "year": x.year, "num_month": x.month, "month": self._fields["month"].selection[int(x.month) - 1][1], } ), "values": month_values.mapped("working_time"), "today": { "year": fields.Date.today().year, "month": fields.Date.today().month, }, }