From 756d739e5ac0331c84abff44188885de06cbd9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com> Date: Tue, 22 Nov 2022 19:18:34 +0100 Subject: [PATCH] [ADD] round timesheets --- models/__init__.py | 1 + models/account_analytic_line.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 models/account_analytic_line.py diff --git a/models/__init__.py b/models/__init__.py index 409ca0e..de5a756 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,3 +1,4 @@ +from . import account_analytic_line from . import account_move from . import ecozimut_project_perf from . import project diff --git a/models/account_analytic_line.py b/models/account_analytic_line.py new file mode 100644 index 0000000..2669927 --- /dev/null +++ b/models/account_analytic_line.py @@ -0,0 +1,33 @@ +# © 2022 Le Filament (https://le-filament.com) +# © Odoo (see https://github.com/odoo/odoo/blob/14.0/LICENSE) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from math import ceil + +from odoo import models + + +class AccountAnalyticLine(models.Model): + _inherit = "account.analytic.line" + + def _timesheet_preprocess(self, vals): + """ + Update timesheet duration with rounding defined in timesheet configuration + """ + vals = super()._timesheet_preprocess(vals) + if vals.get("unit_amount"): + minimum_duration = int( + self.env["ir.config_parameter"] + .sudo() + .get_param("hr_timesheet.timesheet_min_duration", 0) + ) + rounding = int( + self.env["ir.config_parameter"] + .sudo() + .get_param("hr_timesheet.timesheet_rounding", 0) + ) + minutes_spent = max(minimum_duration, vals.get("unit_amount") * 60) + if rounding and ceil(minutes_spent % rounding) != 0: + minutes_spent = ceil(minutes_spent / rounding) * rounding + vals["unit_amount"] = minutes_spent / 60 + return vals -- GitLab