verdigado / odoo-customize

GNU Affero General Public License v3.0
0 stars 1 forks source link

Ein Manager / Abteilungsleitung soll die Arbeitszeiten und Urlaube NUR seiner MAs sehen und bearbeiten können. #11

Closed albig closed 1 year ago

albig commented 1 year ago

Das ist für Anwesenheiten möglich. Allerdings nur über das Modul "Anwesenheiten" -> "Anwesenheiten".

Es funktioniert nicht:

Vorzugsweise soll der Odoo-eigene Bericht "Anwesenheitsanalyse" entsprechend ertüchtigt werden.

Achtung: Der Bericht ist aktuell nicht zugänglich für Nicht-Personalverantwortliche. Sobald er zugänglich ist, können die Buchungen aller Mitarbeitende eingesehen werden. Hier muss also die bestehende Freigabe im Modul verdigado_attendance korrigiert werden.

tv-openbig commented 1 year ago

@albig @hbrunn

Es stehen grundsätzlich zwei Vorschläge zur Verfügung:

1.) Eine weitere Berechtigungsgruppe um Rechte etwas granularer aufzubauen und somit den Zugang auf bestimmte Berichte zu ermöglichen.

@hbrunn Bitte gerne näher erläutern an dieser Stelle.

2.) Anwendung des OCA Moduls base_custom_filters Spezielle Filter auf Attendance Records in Auswertungen, z.B. aufgebaut nach Abteilungen für einzelne Benutzer oder Benutzergruppen.

Hier einmal etwas näher erläutert und aufgezeigt am Beispiel Rechnungen aber auch für Attendances: Beispiel für Rechnungen

https://drive.google.com/file/d/1Ud_St8ZD4cMMt6eLSApgECJOzW8ciWre/view

Beispiel für Attendances

https://drive.google.com/file/d/1HLT2glqtXIiaob_jq4BLU_Rvpc1nlY8p/view

hbrunn commented 1 year ago

wir brauchen ohnehin beides. In standard Odoo siehst Du entweder alle hr.employees oder gar keine außer Deinem eigenen. Analog Urlaube, Überstunden, Anwesenheiten, da siehst Du auch entweder alle oder keine die nicht von Deinem employee kommen. Mit base_custom_filter kriegen wir die Einschränkungen in der UI prima hin, dann müssten aber alle Benutzer die überhaupt etwas von HR sehen sollen HR User sein, und die könnten dann mit einem direkten Link oder einem RPC-Request Daten lesen die sie nichts angehen.

Es braucht also eine Gruppe die sich von den Zugriffsrechten her wie die HR-Gruppe verhält, aber beschränkt auf das eigene Department (oder (in-)direkte Untergebene).

Relevante Modelle die dann beschränkt werden sollten wären

(gerne erweitern)

Es wundert mich ehrlich gesagt etwas dass ich dafür nichts in oca/hr finde. Falls wir uns über oben einig sind sollten hier dann die Module hr_department_user, hr_department_user_attendance und hr_department_user_holidays beigesteuert werden die jeweils die gewünschten ir.rules beinhalten (und nicht viel mehr).

Wichtigste Frage hier ist dann ob es um das eigene Department geht, oder um die Untergebenen (Feld Manager auf dem employee-record), und da ob rekursiv oder nicht.

hbrunn commented 1 year ago

Ich habe in #19 mal mit employees und attendances angefangen, fur Urlaube wird das etwas trickier.

Die Änderung hier ist dass HR Users ('Personalsachbearbeiter') bei den relevanten Records auf ihre Untergebenen beschränkt werden, und die jeweilige admin-Gruppe diese Beschränkung wieder aufhebt.

Muss das vielleicht noch auseinander gezogen werden, dass es eine Gruppe ('Personalsachbearbeiter global') gibt die alle Records (oder nur alle der Abteilung, dann nennen wir sie 'Abteilungsleitung') sieht, aber keine Admin-Berechtigungen (ie Abteilungen, Urlaubstypen bearbeiten, das Config-Menu sehen) hat?

albig commented 1 year ago

Die aktuelle Lösung funktioniert bei mir lokal mit employees.

Mit attendances bekomm ich es nicht hin. Wenn der "Abteilungsleiter" die Rechte "Anwesenheiten" -> "Personalsachbearbeiter" bekommt, kann er die attendances aller Mitarbeiter sehen.

Momentan ist die Abstufung bei Attendances ja folgende:

Manual Attendance -> Officer -> Adminstrator

Ja, ich denke wir brauchen da eine Stufe dazwischen. Also z.B.

Manual Attendance -> Department Officer -> (global) Officer -> Adminstrator
hbrunn commented 1 year ago

hast Du das Module mit -i geupdated? Fur attendances muss ich existierende Regeln uberschreiben, das passiert nur im init-Modus, oder wenn ich halt ein Migrationsscript schreibe

albig commented 1 year ago

Das scheint es gewesen zu sein. Mit -i verdigado_attendance hab ich auch bei Attendances das gewünschte Ergebnis.

-i INIT hab ich tatsächlich noch nie benutzt. In anderen Fällen hab ich das Modul deinstalliert und wieder installiert. Durch die Abhängigkeiten geht das bei verdigado_attendance ja nicht.

-i INIT, --init=INIT
               install one or more modules (comma-separated list, use "all" for all modules), requires -d
-u UPDATE, --update=UPDATE
               update one or more modules (comma-separated list, use "all" for all modules). Requires -d.
hbrunn commented 1 year ago

die Standard-Vorgehensweise ist in solchen Fällen ein Migrationsscript zu schreiben dass die records die überschrieben werden müssen dann halt von Hand überschreibt.

Aber da wir planen das für die Produktions-Version ohnehin in verschiedene eigene Module zu stecken (planen wir das noch?), habe ich davon abgesehen, weil nur testweise die Versionsnummer erhöhen und das wieder zurückrollen auch recht viel Aufwand ist.

albig commented 1 year ago

Zum Testen ist das schon in Ordnung. Ich habe einfach nicht damit gerechnet, dass ein normales Update / Upgrade des Moduls nicht ausreicht.

Wenn es Sinn macht, das Modul aufzusplitten, dann können wir das machen. Aktuell ist verdigado_attendances das Sammel-Modul für alle verdigado-spezifischen Anpassungen. Und das würde auf allen Systemen identisch laufen.

albig commented 1 year ago

Für das Einsehen der Attendance-Records funktioniert der aktuelle PR ja. Was aktuell fehlt, ist der Attendance-Report, weil das durch der durch die Rechte-Beschränkung in odoo_customize herausgenommen wird.

Wenn die Überstunden-Berechnung jetzt funktioniert. Dann brauchen wir doch hr_attendance_report_theoretical_time nicht mehr, oder? Dann sollte der "Manager" den Standard Attendance-Report nutzen können, aber NUR seine Mitarbeitenden sehen können.

hbrunn commented 1 year ago

ja, hr_attendance_report_theoretical_time brauchen wir nicht mehr denke ich.

Meinst Du "Manager" in Odoo-Lingo oder verdigado-Lingo? Die Gruppe hr_attendance.group_hr_attendance_user (ich finde xmlids immer am Eindeutigsten, dann gibt es keine Sprachverwirrung) sieht das Report-Menu ja ohnehin, was da bloss fehlt ist noch die Einschränkung auf [('employee_id','child_of',user.employee_ids.ids)], richtig?

albig commented 1 year ago

Genau, diese Domain-Einschränkung fehlt. Das würde offenbar funktionieren. Kannst Du das nochmal prüfen, vereinheitlichen und einbauen?

    <!-- Report -->
    <record id="rule_hr_attendance_user" model="ir.rule">
        <field name="name">Restrict HR attendance report to own attendance</field>
        <field name="model_id" ref="hr_attendance.model_hr_attendance_report"/>
        <field name="domain_force">[('employee_id','child_of',user.employee_ids.ids)]</field>
    </record>
albig commented 1 year ago

Wenn ich das richtig sehe, müssen wir für Urlaube / Time Off gar nichts machen. Ein Manager sieht nur sich und seine zugeordnete Mitarbeiter. Ich kann es nur nicht erklären, über welche Regeln das gemacht wird.

hbrunn commented 1 year ago

Deine Regel ist global, dh auch manager sehen immer nur ihre Untergebenen. Habe das auseinander gezogen so dass es konsistent mit den anderen Regeln ist: 3b634bb4328

Für Urlaube brauchen wir tatsächlich nichts zu tun, falls Ihr beim Konzept des Abwesenheits-Genehmigers bleiben wollt. Dann müssen halt zwei Felder verwaltet werden, scheint mir auch nicht schlimm, oder ggf das Feld verstecken und mit parent_id synchron halten?

Habe mal in hr-repo gefragt ob Interesse daran besteht das in die OCA zu stecken: https://github.com/OCA/hr/issues/1279

albig commented 1 year ago

Das funktioniert noch nicht ganz.

Jetzt kann der einfache Employee / Attendance User wieder die Attendances aller Employees im Report sehen :-(

Für den Manager & Attendance Officer und Administrator passt es.

hbrunn commented 1 year ago

ah, ich hatte noch verdigado-spezifischen Rechte übersehen: https://github.com/verdigado/odoo-customize/blob/15.0/verdigado_attendance/security/ir.model.access.csv#L2 - habe dann hr_attendance.group_hr_attendance noch bei der Einschränkung zugefügt.

albig commented 1 year ago

Super. Das funktioniert jetzt für User, HR Officer und Administratoren:

Eine letzte Inkonsistenz:

  1. HR Officer sieht unter Employees nur "seine" Mitarbeiter*innen. --> perfekt
  2. Ein Employee sieht aber alle anderen Mitarbeiter*innen --> kann man das noch einschränken auf sich selbst?
hbrunn commented 1 year ago
  1. normale Employees sehen das "Directory", das sind die hr.employee.public records, die alle Daten zugänglich machen die Odoo nicht privacy-relevant findet. Idee hier ist eine allgemeine Liste zu haben von KollegInnen - das trotzdem einschränken, oder sollen wir im Zuge dessen eher einschränken was auf den public records zu sehen ist?
albig commented 1 year ago

Dass das nur die öffentlichen Daten der Employees sind, ist mir schon klar. Das hatte ich bisher auch so erklären können.

Der "HR Officer" sieht aber dieses öffentliche Employee-Verzeichnis nicht mehr: 2023-09-18_13-08

Wir müssen da entscheiden, ob wir die (intern) öffentliche Liste beibehalten oder nicht. Wenn ja, dann müsste auch der HR-Officer sie sehen können.

hbrunn commented 1 year ago

note to self: Wenn das directory für alle angezeigt werden soll, muss das rückgängig gemacht werden: https://github.com/OCA/OCB/blob/15.0/addons/hr/models/ir_ui_menu.py#L13

hbrunn commented 1 year ago

@albig habe jetzt die Beschränkung von hr.employee.public auf das eigene Department gepushed. Achtung: Durch das Caching von Zugriffsrechten wird sich eine Änderung des Departments eines employees hier nicht sofort auswirken, am einfachsten Odoo neu starten.

  1. Soll ich noch das Verzeichnis-Menü für HR user zugänglich machen?
  2. Und auch die Einschränkung fur Abwesenheiten auf 'Meine Abteilung' umbiegen?
albig commented 1 year ago

@hbrunn Sorry, steh auf der Leitung. Welche "Verzeichnis-Menü" meinst Du?

hbrunn commented 1 year ago

das uber das nicht hr.group_hr_user-User die Liste aller hr.employee.public sehen, fur hr.group_hr_user-User wird das versteckt, weil die in standard-Odoo ja ohnehin alle hr.employees sehen

albig commented 1 year ago

Soweit ich das jetzt überblicke, denke ich:

  1. brauchen wir nicht.
  2. Ja, das macht Sinn (Abwesenheiten --> alle in "Meine Abteilung")