Skip to content

Commit

Permalink
Merge PR #32 into 16.0
Browse files Browse the repository at this point in the history
Signed-off-by carmenbianca
  • Loading branch information
github-grap-bot committed Jun 28, 2024
2 parents 13f79ee + 84a8072 commit c97c44e
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 29 deletions.
26 changes: 26 additions & 0 deletions hr_timesheet_overtime/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,32 @@ Computes overtime hours according to employee's contracts.
.. contents::
:local:

Known issues / Roadmap
======================

There is a problem with the way this module handles rates for overtime. If the
rate ever changes, things will start to break.

At time of writing (2024-06-28), the way a rate is computed for a date is by
looking _exclusively_ at the corresponding day of the week. This should be more
robust.

Furthermore, when inserting hours worked, the actual hours worked get lost. You
(try to) write a value to ``unit_amount``, but an augmented value gets written
to the field instead. This is rather ugly.

We can improve this by relying on the computation of ``unit_amount`` in Odoo
≥16: create a new field ``hours_worked``, which contains the actual hours worked
sans rate. Then, compute ``unit_amount`` from ``hours_worked`` (in a more robust
fashion than is presently the case). In the interface, show ``hours_worked``
more prominently than ``unit_amount`` as the main editable field.

To make this module subsequently compatible with ``hr_timesheet_begin_end``,
``hours_worked`` must be computed from ``time_stop`` and ``time_start``, and
``unit_amount`` must use this module's computation method instead of
``hr_timesheet_begin_end``'s. The compatibility layer should go into its own
module.

Bug Tracker
===========

Expand Down
36 changes: 20 additions & 16 deletions hr_timesheet_overtime/models/account_analytic_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging

from odoo import fields, models
from odoo import api, fields, models

_logger = logging.getLogger(__name__)

Expand All @@ -15,9 +15,11 @@ class AnalyticLine(models.Model):

_inherit = "account.analytic.line"

def create(self, values):
self._update_values(values)
return super().create(values)
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
self._update_values(vals)
return super().create(vals_list)

def write(self, values):
if not self.env.context.get("create"): # sale module
Expand All @@ -29,17 +31,19 @@ def _update_values(self, values):
Update values if date or unit_amount fields have changed
"""
if "date" in values or "unit_amount" in values:
# TODO: self.date and self.unit_amount do not exist when called from
# create().
date = values.get("date", self.date)
unit_amount = values.get("unit_amount", self.unit_amount)

# rate management
weekday = fields.Date.from_string(date).weekday()
rate = (
self.env["resource.overtime.rate"]
.search([("dayofweek", "=", weekday)], limit=1)
.rate
or 1.0
)

# update
values["unit_amount"] = unit_amount * rate
values["unit_amount"] = unit_amount * self.rate_for_date(date)

@api.model
def rate_for_date(self, date):
# n.b. from_string also works on date objects, returning itself.
weekday = fields.Date.from_string(date).weekday()
return (
self.env["resource.overtime.rate"]
.search([("dayofweek", "=", weekday)], limit=1)
.rate
or 1.0
)
22 changes: 22 additions & 0 deletions hr_timesheet_overtime/readme/ROADMAP.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
There is a problem with the way this module handles rates for overtime. If the
rate ever changes, things will start to break.

At time of writing (2024-06-28), the way a rate is computed for a date is by
looking _exclusively_ at the corresponding day of the week. This should be more
robust.

Furthermore, when inserting hours worked, the actual hours worked get lost. You
(try to) write a value to ``unit_amount``, but an augmented value gets written
to the field instead. This is rather ugly.

We can improve this by relying on the computation of ``unit_amount`` in Odoo
≥16: create a new field ``hours_worked``, which contains the actual hours worked
sans rate. Then, compute ``unit_amount`` from ``hours_worked`` (in a more robust
fashion than is presently the case). In the interface, show ``hours_worked``
more prominently than ``unit_amount`` as the main editable field.

To make this module subsequently compatible with ``hr_timesheet_begin_end``,
``hours_worked`` must be computed from ``time_stop`` and ``time_start``, and
``unit_amount`` must use this module's computation method instead of
``hr_timesheet_begin_end``'s. The compatibility layer should go into its own
module.
48 changes: 35 additions & 13 deletions hr_timesheet_overtime/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -366,41 +366,63 @@ <h1 class="title">Timesheet/Contract - Overtime</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:864f762c46f2380ae49c8c705bd419243ee57a30b935ef491a26df7837f119d4
!! source digest: sha256:f303e3ad17e5d88c4ddf2a1baf816f420994d594a04db998c4fd2c1e9f1b2131
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/coopiteasy/cie-timesheet/tree/16.0/hr_timesheet_overtime"><img alt="coopiteasy/cie-timesheet" src="https://img.shields.io/badge/github-coopiteasy%2Fcie--timesheet-lightgray.png?logo=github" /></a></p>
<p>Computes overtime hours according to employee’s contracts.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-5">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-1">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-6">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-1">Known issues / Roadmap</a></h1>
<p>There is a problem with the way this module handles rates for overtime. If the
rate ever changes, things will start to break.</p>
<p>At time of writing (2024-06-28), the way a rate is computed for a date is by
looking _exclusively_ at the corresponding day of the week. This should be more
robust.</p>
<p>Furthermore, when inserting hours worked, the actual hours worked get lost. You
(try to) write a value to <tt class="docutils literal">unit_amount</tt>, but an augmented value gets written
to the field instead. This is rather ugly.</p>
<p>We can improve this by relying on the computation of <tt class="docutils literal">unit_amount</tt> in Odoo
≥16: create a new field <tt class="docutils literal">hours_worked</tt>, which contains the actual hours worked
sans rate. Then, compute <tt class="docutils literal">unit_amount</tt> from <tt class="docutils literal">hours_worked</tt> (in a more robust
fashion than is presently the case). In the interface, show <tt class="docutils literal">hours_worked</tt>
more prominently than <tt class="docutils literal">unit_amount</tt> as the main editable field.</p>
<p>To make this module subsequently compatible with <tt class="docutils literal">hr_timesheet_begin_end</tt>,
<tt class="docutils literal">hours_worked</tt> must be computed from <tt class="docutils literal">time_stop</tt> and <tt class="docutils literal">time_start</tt>, and
<tt class="docutils literal">unit_amount</tt> must use this module’s computation method instead of
<tt class="docutils literal">hr_timesheet_begin_end</tt>’s. The compatibility layer should go into its own
module.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/coopiteasy/cie-timesheet/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/coopiteasy/cie-timesheet/issues/new?body=module:%20hr_timesheet_overtime%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Coop IT Easy SC</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://coopiteasy.be">Coop IT Easy SC</a>:<ul>
<li>Vincent Van Rossem</li>
Expand All @@ -412,12 +434,12 @@ <h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-5">Other credits</a></h2>
<h2><a class="toc-backref" href="#toc-entry-6">Other credits</a></h2>
<p>The development of this module has been paid for by
<a class="reference external" href="https://www.provelo.org/">Pro Velo</a>.</p>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/coopiteasy/cie-timesheet/tree/16.0/hr_timesheet_overtime">coopiteasy/cie-timesheet</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
Expand Down

0 comments on commit c97c44e

Please sign in to comment.