Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Analyse der Überstundenberechnung #2

Closed
3 tasks done
albig opened this issue Jun 29, 2023 · 13 comments
Closed
3 tasks done

Analyse der Überstundenberechnung #2

albig opened this issue Jun 29, 2023 · 13 comments

Comments

@albig
Copy link
Member

albig commented Jun 29, 2023

Odoo 15 schreibt alle Überstunden in die Tabelle hr_attendance_overtime. Diese Funktion ist aktiv, sobald unter "Einstellungen" -> "Anwensenheiten" -> "Überstunden zählen" aktiviert wurde.

Diese Option kann an- und abgeschaltet werden. Die Überstundenberechnung erfolgt direkt bei Aktivierung.

Es gibt zwei offene Punkte bei der Berechnung

  • Gesetzliche Feiertage aus hr_holidays_public / l10n_de_holidays werden nicht berücksichtigt --> muss vermutlich in hr_holidays_public gefixt werden.
  • die Auswertung im Bericht "Theoretische vs. Tatsächliche Arbeitszeiten" ist aus unserer Sicht korrekt.
  • "Fehltage" (nicht gebuchte Tage) fließen nicht in die Berechnung der Überstunden ein. Die "Odoo-Überstunden" geben also aktuell nicht das Arbeitsstundensaldo wieder.

Wir sind da nicht allein bei der Verwirrung. Siehe z.B. https://www.odoo.com/de_DE/forum/hilfe-1/modifying-how-overtime-is-calculated-221313

@hbrunn
Copy link
Contributor

hbrunn commented Jun 29, 2023

ich denke bei der Code-Exegese heute habe ich die Gründe für 1) und 3) gefunden, werde mir das am Montag noch einmal genau anschauen und reparieren. Besteht die Möglichkeit in der Demo-Instanz beide Situationen nachzubauen? Dann ist es einfach für mich zu verifizieren dass die Stellen auch wirklich das Problem sind.

@albig
Copy link
Member Author

albig commented Jul 3, 2023

ich denke bei der Code-Exegese heute habe ich die Gründe für 1) und 3) gefunden, werde mir das am Montag noch einmal genau anschauen und reparieren. Besteht die Möglichkeit in der Demo-Instanz beide Situationen nachzubauen? Dann ist es einfach für mich zu verifizieren dass die Stellen auch wirklich das Problem sind.

Wir können in der Demo-Instanz alles ändern. Sag Bescheid, wenn ich einen bestimmten Code-Stand auschecken soll.
Ich kann den Stand später wieder zurück setzen. Auch ein Datenabzug ist möglich, da keine personenbezogenen Daten enthalten sind.

@albig
Copy link
Member Author

albig commented Aug 7, 2023

Ergänzend noch:

  • Das Odoo-eigenen Datenmodell speichert die Feiertage in resource_calendar_leaves. Das ist recht aufwändig, da man jeden Tag einzeln angeben muss (mit Start- und Endzeit (!)). Optional kann man das einem Arbeitszeitkalender zuordnen.
  • Die Odoo-eigene Überstunden-Berechnung scheint hier ebenfalls nicht zu funktionieren.
  • Das Datenmodell hr_holidays_public kommt aus dem OCA-Modul

@albig
Copy link
Member Author

albig commented Aug 11, 2023

Ich habe hier mal angefangen, Use-Cases aufzuschreiben: https://github.com/verdigado/odoo-customize/wiki/Use-Cases-for-Overtime-Calculation

@tv-openbig
Copy link

@albig @hbrunn Ich habe hier alle aktuell verfügbaren Optionen getestet und dokumentiert.

https://cloud.verdigado.com/index.php/s/FNqxN2oLyZo6sFH?dir=undefined&openfile=451850

Zusammenfassend kann man sagen, dass der Odoo Standard "lediglich" ein Problem hat, die Überstunden korrekt zu berechnen, wenn es fehlende Arbeitszeiteinträge an Tagen gibt, die gem. vereinbartem Arbeitszeitmodell des Mitarbeiters eigentlich reguläre Arbeitstage sind (also kein Urlaub, kein Wochenende, keine Feiertage).

Dieses wir aktuell durch 2 offene Pull Requests adressiert:

1.) OCA/hr-attendance#139
Modul: hr_attendance_overtime_from_work_calendar

2.) OCA/hr-attendance#140
Modul: hr_attendance_missing_days

Die Berechnung stimmt auch mit dem Odoo Standard für die korrekten Überstunden an Feiertagen.
Hier fehlt aber wie @albig angemerkt hat, ein Wizard für die Version 15.

Einen Vorschlag gibt es auch hierfür, wurde aber nicht in Richtung OCA gepusht, da zu diesem Modul keine Testfälle geschrieben wurde und außerdem ist es für die Version 16:

hr_generate_public_holidays aus diesem Repo:
https://github.com/wildi1/odoo-hr

Ich habe es mir aber zeigen lassen und es sah sehr komfortabel aus, zumal es auch für andere Länder einsetzbar ist. Zu prüfen wäre, ob diese genutzte python Library auch Bundesländer (Bayern etc.) unterstützt.

@tv-openbig
Copy link

@albig @hbrunn Der Vollständigkeit halber muss ich doch feststellen.

Die Berechnung der Überstunden an Feiertagen mit odoo Standard ist doch korrekt.
Ich habe dies auf einer Datenbank getestet auf der nur das Modul hr_attendance_missing_days installiert
ist und über den Odoo Standard die gesetzlichen Feiertage konfiguriert wurden.

hr_holidays_public wurde gar nicht installiert.

Hier wäre der Share für das Video:
https://cloud.verdigado.com/index.php/s/FNqxN2oLyZo6sFH?dir=undefined&openfile=452052

Es verbleibt also im Vergleich zu hr_public_holidays und l10n_de_holidays:

  • Aktuell kein Wizard für v15
  • Es existiert Source Code für Version 16
  • Dieser wäre OCA Ready zu machen (Backport 15.0 & Test Cases)
  • Das Modul ist grundsätzlich Bundesland fähig

Image

  • Es könnte dann gg. hr_holidays_public und l10n_de_holidays obsolet machen
  • Vorteil: Nutzung des Odoo Standard für die Feiertage

Meinungen dazu ?

@hbrunn
Copy link
Contributor

hbrunn commented Aug 14, 2023

der Odoo-Feiertags-Mechanismus kann aber keine Bundeslander, das mussten wir dann noch nachschieben, und das ist doch noch ein paar Stunden Arbeit und greift recht tief in Odoo core ein.

D.h. "dein" Wizard funktioniert prima wenn alle employees im selben Bundesland sind, aber Feiertage von employees mit verschiedenen Bundeslandern gehen nicht out of the box.

Mit OCA/hr-holidays#87 tun die OCA public holidays einfach.

@albig
Copy link
Member Author

albig commented Aug 17, 2023

Danke @tv-openbig für das Überprüfen der Odoo-Feiertagsberechung. Ich habe das darauf hin auch noch mal getestet und kann bestätigen, dass Feiertage in resource_calendar_leaves in der Überstundenberechnung richtig berücksichtigt werden.

Trotzdem würde ich den Punkt Feiertage zunächst weiter mit dem OCA-Modul und dem neuen Modul hr_holidays_public_overtime aus OCA/hr-holidays#87 umsetzen. Wie @hbrunn schon schrieb:

  • die OCA-Lösung funktioniert sowohl für bundeslandspezifische Feiertage als auch für die Überstundenberechnung
  • dem Odoo-Standard fehlt ein Wizard bzw. wir müssten den Vorschlag von 16 auf 15 portieren

Das Thema Feiertage können wir uns ggf. zu einem späteren Zeitpunkt noch mal anschauen.

@albig
Copy link
Member Author

albig commented Aug 17, 2023

Zwischenstand

Mit

haben wir eine funktionierende Lösung, die den Odoo-Standard fixed und

  • Fehlstunden berechnet für Tage, an denen der Mitarbeitende keine Stunden gebucht hat
  • Überstunden berechnet werden für Arbeit an gesetzlichen Feiertagen

Diesen Software-Stand habe ich in der Demo-Instanz installiert.

Abweichung zum Modul hr_attendance_report_theoretical_time

Es gibt in Problem mit dem Abwesenheitstyp "Überstunden" / Leave Type "Extra Hours". Das führt zu Abweichungen in der Berechnung für bestehende Daten.

Normales Verhalten beim Antrag "New time off"

  • Time Off Type --> Extra Hours
  • Dates: z.B. 30.08.2023 (in der Zukunft)
  • Extra-Hours werden sofort um die beantragte Tagesstundenzahl reduziert
  • Tage werden im Kalender markiert

Dazu erfolgen folgende Datebank-Einträge

  • in hr_attendance_overtime mit dem Flag adjustment=Truefür den Tag der Antragsstellung (also im Beispiel am 17.8.23 und NICHT am 30.08.2023)
  • in hr_leave mit dem state=confirm
    2023-08-17_16-00

Fehler bei alten Daten

Stellt man das Feature "Überstundenberechnung" zeitweise ab oder konfiguriert den Start-Zeitpunkt um, werden die Einträge der Tabelle hr_attendance_overtime gelöscht. Damit aber auch die adjustment-Einträge für die "Extra Hours Leaves".

Schaltet man das Feature wieder ein, werden alle Einträge in der Tabelle hr_attendance_overtime neu berechnet. Bestehender Urlaub und Kranktage werden richtig berücksichtigt.

Überstunden, die in Extra Hour Leaves umgewandelt wurden, werden NICHT mehr berücksichtigt.

Konkret hat in der Demo-Instanz der Test-employee_42 dann -14:04 statt -35:04 Stunden (7 Tage "geschenkt").

Für das Problem bräuchte ich noch eine Lösung.

Beispielsweise

  • man regeneriert die Einträge in hr_attendance_overtime aus hr_leave
  • man löscht alle alten Anträge in hr_leave
  • ...?

@hbrunn
Copy link
Contributor

hbrunn commented Aug 17, 2023

...sorgt dafur dass bloss die Uberstunden und nicht die adjustments geloscht werden?

@albig
Copy link
Member Author

albig commented Aug 17, 2023

...sorgt dafur dass bloss die Uberstunden und nicht die adjustments geloscht werden?

Wäre auch denkbar.

Im konkreten Fall hilft das aber nicht, da das Feature aktuell abgeschaltet und die Tabelle entsprechend leer ist :-( Notfalls kann man die 35 Einträge natürlich (halb-) manuell / direkt in die Tabelle eintragen.

@hbrunn
Copy link
Contributor

hbrunn commented Aug 21, 2023

ah, es geht um die bestehenden halb-produktiven Datenbanken. @tv-openbig und ich denken das kann doch mit OCA/hr-attendance#141 erschlagen werden?

Und ist hr_attendance_report_theoretical_time überhaupt noch interessant? Ich denke die dependency darauf kann weg und Ihr schaut bloss noch auf den Standard-Report. Habe #17 entsprechend angepasst.

@albig
Copy link
Member Author

albig commented Aug 22, 2023

Mit OCA/hr-attendance#141 (hr_attendance_overtime_manual) kann ich die Einträge manuell setzen. In der relevanten Datenbank sind das 19 Einträge. Das wäre natürlich machbar.

Ich denke, das wäre aber auch relativ leicht automatisierbar:

  1. Die Einträge aus alten Extra Hours Anträgen könnte man aus resource_calendar_leavesund hr_leave reproduzieren werden.
  2. Die Korrekturen mit hr_attendance_overtime_manual könnte man aus hr_attendance_overtime_wizard reproduzieren.

Da weitere Überstunden-Anpassungen (adjustmets) in hr_attendance_overtime mit

@albig albig closed this as completed Sep 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants