diff --git a/hr_attendance_kanban/README.rst b/hr_attendance_kanban/README.rst index 7789ce35..62628354 100644 --- a/hr_attendance_kanban/README.rst +++ b/hr_attendance_kanban/README.rst @@ -7,7 +7,7 @@ HR Kanban Attendance !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3527d5b744e7ca4667922d5169ccf9a330e8d959c96532eff5e6e3d8c7f1b0a1 + !! source digest: sha256:c33b99f2d41c72315885f1bdb45af0f13464296b0d46e31ee74f6ed759f786dd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/hr_attendance_kanban/__manifest__.py b/hr_attendance_kanban/__manifest__.py index f7a0b4b9..b88f4ca4 100644 --- a/hr_attendance_kanban/__manifest__.py +++ b/hr_attendance_kanban/__manifest__.py @@ -3,7 +3,7 @@ { "name": "HR Kanban Attendance", - "version": "16.0.5.0.0", + "version": "16.0.6.0.0", "category": "Human Resources", "website": "https://github.com/OCA/hr-attendance", "author": "Sozialinfo, Odoo Community Association (OCA), Miika Nissi", diff --git a/hr_attendance_kanban/i18n/de.po b/hr_attendance_kanban/i18n/de.po index 1e4b8b77..be40e799 100644 --- a/hr_attendance_kanban/i18n/de.po +++ b/hr_attendance_kanban/i18n/de.po @@ -4,48 +4,45 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0+e\n" +"Project-Id-Version: Odoo Server 16.0+e-20241108\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-09 05:59+0000\n" -"PO-Revision-Date: 2024-07-09 08:45+0200\n" +"POT-Creation-Date: 2024-11-17 03:38+0000\n" +"PO-Revision-Date: 2024-11-17 03:38+0000\n" "Last-Translator: \n" "Language-Team: \n" -"Language: de_CH\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.4\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" #. module: hr_attendance_kanban #. odoo-python #: code:addons/hr_attendance_kanban/wizard/hr_attendance_kanban_wizard.py:0 #, python-format msgid "\"Check Out\" time cannot be earlier than \"Check In\" time." -msgstr "Die \"Check Out\" Zeit kann nicht vor der \"Check In\" Zeit liegen." +msgstr "" #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban -msgid "On Break" -msgstr "Pause" +msgid "" +msgstr "" #. module: hr_attendance_kanban -#: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form -msgid "" -"\n" -" hours\n" -" " +#: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban +msgid "" +msgstr "" + +#. module: hr_attendance_kanban +#: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban +msgid "On Break" msgstr "" -"\n" -" Stunden\n" -" " #. module: hr_attendance_kanban #. odoo-python #: code:addons/hr_attendance_kanban/models/hr_employee_public.py:0 #, python-format msgid "A valid employee must be selected to check in / out." -msgstr "Für Check In / Check Out bitte einen Mitarbeiter auswählen." +msgstr "" #. module: hr_attendance_kanban #. odoo-python @@ -53,8 +50,6 @@ msgstr "Für Check In / Check Out bitte einen Mitarbeiter auswählen." #, python-format msgid "A valid employee must be selected to go on a break." msgstr "" -"Um eine Pause zu aktivieren oder zu deaktivieren, bitte einen Mitarbeiter " -"auswählen." #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_type__absent @@ -70,7 +65,7 @@ msgstr "Anwesenheit" #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__attendance_state #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__attendance_state msgid "Attendance Status" -msgstr "Anwesenheitsstatus" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model,name:hr_attendance_kanban.model_hr_attendance_type @@ -89,16 +84,28 @@ msgid "Attendance Types" msgstr "Anwesenheitsarten" #. module: hr_attendance_kanban -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance__break_time -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__break_time -msgid "Break Time" -msgstr "Pausen" +#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance__break_start_time +#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__break_start_time +#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__break_start_time +#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee__break_start_time +#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__break_start_time +msgid "Break Start Time" +msgstr "" #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_break_form #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form msgid "Cancel" -msgstr "Abbrechen" +msgstr "" + +#. module: hr_attendance_kanban +#. odoo-python +#: code:addons/hr_attendance_kanban/wizard/hr_attendance_kanban_wizard.py:0 +#, python-format +msgid "" +"Cannot perform check out on {empl_name} while they are on break. Please end " +"the break first." +msgstr "" #. module: hr_attendance_kanban #. odoo-python @@ -109,9 +116,6 @@ msgid "" "in. Your attendances have probably been modified manually by human " "resources." msgstr "" -"Das Check Out für {empl_name} konnte nicht erfolgen, da das entsprechende " -"Check In nicht gefunden wurde. Eventuell wurde der Eintrag manuell durch " -"einen HR-Verantwortlichen geändert." #. module: hr_attendance_kanban #. odoo-python @@ -120,15 +124,13 @@ msgstr "" msgid "" "Cannot perform check out on {empl_name}, employee is already checked out." msgstr "" -"Das Check Out für {empl_name} ist nicht möglich, da der Mitarbeiter bereits " -"ausgecheckt ist." #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__last_check_in #: model:ir.model.fields.selection,name:hr_attendance_kanban.selection__hr_attendance_kanban_wizard__check_in_mode__check_in #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form msgid "Check In" -msgstr "Check In" +msgstr "" #. module: hr_attendance_kanban #. odoo-javascript @@ -137,19 +139,19 @@ msgstr "Check In" #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form #, python-format msgid "Check In / Check Out" -msgstr "Check In / Check Out" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__check_in_mode msgid "Check In Mode" -msgstr "Check In Modus" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__last_check_out #: model:ir.model.fields.selection,name:hr_attendance_kanban.selection__hr_attendance_kanban_wizard__check_in_mode__check_out #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form msgid "Check Out" -msgstr "Check Out" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance__comment @@ -181,7 +183,7 @@ msgstr "Erstellt am" #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_search msgid "Current User" -msgstr "Aktueller Benutzer" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_type__absent @@ -201,18 +203,12 @@ msgstr "" msgid "Display Name" msgstr "Anzeigename" -#. module: hr_attendance_kanban -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance__break_time -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_wizard__break_time -msgid "Duration of the break in hours" -msgstr "Pausendauer in Stunden" - #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__edit_check_in #: model:ir.model.fields.selection,name:hr_attendance_kanban.selection__hr_attendance_kanban_wizard__check_in_mode__edit_check_in #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_wizard_form msgid "Edit Check In" -msgstr "Check In ändern" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model,name:hr_attendance_kanban.model_hr_employee @@ -221,6 +217,20 @@ msgstr "Check In ändern" msgid "Employee" msgstr "Mitarbeiter" +#. module: hr_attendance_kanban +#. odoo-python +#: code:addons/hr_attendance_kanban/models/hr_attendance.py:0 +#, python-format +msgid "Employee cannot start a break before checking in." +msgstr "" + +#. module: hr_attendance_kanban +#. odoo-python +#: code:addons/hr_attendance_kanban/models/hr_attendance.py:0 +#, python-format +msgid "Employee cannot start a break while checked out." +msgstr "" + #. module: hr_attendance_kanban #. odoo-python #: code:addons/hr_attendance_kanban/models/hr_employee_public.py:0 @@ -229,8 +239,6 @@ msgid "" "Employee is already checked in, employee must be moved to an absent " "attendance type to check out." msgstr "" -"Der Mitarbeiter ist bereits eingecheckt. Bitte Mitarbeiter auf \"Abwesend\" " -"setzen, um auszuchecken." #. module: hr_attendance_kanban #. odoo-python @@ -240,15 +248,13 @@ msgid "" "Employee is already checked out, employee must be moved to a non-absent " "attendance type to check in." msgstr "" -"Der Mitarbeiter ist bereits ausgecheckt. Bitte Mitarbeiter auf einen " -"anderen Status als \"Abwesend\" setzen, um einzuchecken." #. module: hr_attendance_kanban #. odoo-python #: code:addons/hr_attendance_kanban/models/hr_attendance.py:0 #, python-format -msgid "Employee is not on break." -msgstr "Der Mitarbeiter ist nicht in der Pause." +msgid "Employee is already checked out." +msgstr "" #. module: hr_attendance_kanban #. odoo-python @@ -256,87 +262,82 @@ msgstr "Der Mitarbeiter ist nicht in der Pause." #, python-format msgid "Employee must be moved to a valid attendance type." msgstr "" -"Der Mitarbeiter muss auf eine gültige Anwesenheitsart verschoben werden." #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban msgid "Employee's Name" -msgstr "Name des Mitarbeiters" +msgstr "" #. module: hr_attendance_kanban #: model:ir.actions.act_window,name:hr_attendance_kanban.action_hr_attendance_employee_kanban #: model:ir.ui.menu,name:hr_attendance_kanban.menu_hr_attendance_employee_kanban msgid "Employees Kanban" -msgstr "Anwesenheits-Kanban" +msgstr "" #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_break_form #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban msgid "End Break" -msgstr "Pause beenden" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__end_time #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__end_time msgid "End Time" -msgstr "Schlusszeit" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_type__fold msgid "Folded in Kanban" -msgstr "In Kanban eingeklappt" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_wizard__edit_check_in msgid "" -"Helper field passed in context to allow for editing of employee's " -"attendance record." +"Helper field passed in context to allow for editing of employee's attendance" +" record." msgstr "" -"Hilfsfeld, das im Kontext übergeben wird, um die Bearbeitung der " -"Anwesenheit des Mitarbeiters zu ermöglichen." #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_wizard__manual_mode msgid "" -"Helper field passed in context to allow for manual check in of employee " -"when not dragged from kanban." +"Helper field passed in context to allow for manual check in of employee when" +" not dragged from kanban." msgstr "" -"Hilfsfeld, das im Kontext übergeben wird, um ein manuelles Einchecken des " -"Mitarbeiters zu ermöglichen, wenn er nicht aus dem Kanban gezogen wird." #. module: hr_attendance_kanban #: model:ir.model,name:hr_attendance_kanban.model_hr_attendance_kanban_break msgid "Hr Attendance Kanban Break" -msgstr "Mitarbeiter-Kanban Pause" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model,name:hr_attendance_kanban.model_hr_attendance_kanban_wizard msgid "Hr Attendance Kanban Wizard" -msgstr "Mitarbeiter-Kanban Wizard" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__id #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__id #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_type__id msgid "ID" -msgstr "ID" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__is_cur_user msgid "Is Current User" -msgstr "Entspricht dem aktuellen Benutzer" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee__is_kanban_attendance #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__is_kanban_attendance msgid "Kanban Attendance" -msgstr "Mitarbeiter-Kanban" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__last_attendance_id #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__last_attendance_id msgid "Last Attendance" -msgstr "Zuletzt anwesend" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break____last_update @@ -362,31 +363,26 @@ msgstr "Zuletzt geändert am" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__manual_mode msgid "Manual Mode" -msgstr "Manueller Modus" +msgstr "" #. module: hr_attendance_kanban -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance__on_break -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__on_break -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__on_break -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee__on_break -#: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_employee_public__on_break #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_search msgid "On Break" -msgstr "Pause" +msgstr "" #. module: hr_attendance_kanban #. odoo-python #: code:addons/hr_attendance_kanban/models/hr_employee_public.py:0 #, python-format msgid "Only Officers can manage other employees attendances." -msgstr "Nur Admin können die Anwesenheitseinträge anderer Mitarbeiter ändern." +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance__comment #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee__last_attendance_comment #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee_public__last_attendance_comment msgid "Optional comment for attendance" -msgstr "Kommentar (optional)" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model,name:hr_attendance_kanban.model_hr_employee_public @@ -401,7 +397,7 @@ msgstr "Repräsentiert eine Spalte im Mitarbeiter-Kanban" #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance__attendance_type_id msgid "Represents the type of employee attendance" -msgstr "Repräsentiert die Anwesenheitsart" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_type__sequence @@ -412,42 +408,35 @@ msgstr "Reihenfolge" #: model:ir.actions.act_window,name:hr_attendance_kanban.hr_attendance_kanban_break_action #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_break_form msgid "Start / End Break" -msgstr "Beginn / Ende der Pause" +msgstr "" #. module: hr_attendance_kanban #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.hr_attendance_kanban_break_form #: model_terms:ir.ui.view,arch_db:hr_attendance_kanban.view_hr_attendance_employee_kanban msgid "Start Break" -msgstr "Pause beginnen" +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_break__start_time #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_kanban_wizard__start_time msgid "Start Time" -msgstr "Startzeit" +msgstr "" #. module: hr_attendance_kanban -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance__on_break -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_break__on_break -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_wizard__on_break -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee__on_break -#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee_public__on_break +#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance__break_start_time +#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_break__break_start_time +#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_attendance_kanban_wizard__break_start_time +#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee__break_start_time +#: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee_public__break_start_time msgid "" "Start time of the break. This is a technical field used to calculate break " -"time." +"time and determine if an attendance is on break." msgstr "" -"Startzeit der Pause. Dies ist ein technisches Feld, um die Pausenzeit zu " -"berechnen." #. module: hr_attendance_kanban #: model:ir.model.fields,help:hr_attendance_kanban.field_hr_employee_public__is_cur_user msgid "Technical field to see if the current user is the user of the record." -msgstr "Technisches Feld, um den aktuellen Benutzer des Eintrags zu sehen." - -#. module: hr_attendance_kanban -#: model:ir.model.constraint,message:hr_attendance_kanban.constraint_hr_attendance_check_break_time_positive -msgid "The break time cannot be negative." -msgstr "Die Pausenzeit kann nicht negativ sein." +msgstr "" #. module: hr_attendance_kanban #: model:ir.model.fields,field_description:hr_attendance_kanban.field_hr_attendance_type__name @@ -462,8 +451,6 @@ msgid "" "Unable to check in {empl_name} earlier than their previous attendance " "started." msgstr "" -"Der Mitarbeiter {empl_name} kann nicht früher als der letzte " -"Anwesenheitseintrag eingecheckt werden." #. module: hr_attendance_kanban #. odoo-python @@ -474,9 +461,6 @@ msgid "" "exactly one Attendance Type with 'absent' checked, because it is used to " "represents absent employees." msgstr "" -"Sie können die als \"abwesend\" markierte Anwesenheitsart nicht löschen. Es " -"muss genau eine Anwesenheitsart mit der Markierung \"abwesend\" vorhanden " -"sein, da sie zur Darstellung abwesender Mitarbeiter verwendet wird." #. module: hr_attendance_kanban #. odoo-python @@ -485,11 +469,26 @@ msgstr "" msgid "" "You cannot uncheck this Attendance Type as 'absent'. There needs to be " "exactly one Attendance Type with 'absent' checked, because it is used to " -"represents absent employees. You can however mark another Attendance Type " -"as 'absent' and then the flag for this record will automatically be removed." -msgstr "" -"Sie können diese Anwesenheitsart nicht als \"abwesend\" abwählen. Es muss " -"genau eine Anwesenheitsart mit der Markierung \"abwesend\" vorhanden sein, " -"da sie zur Darstellung abwesender Mitarbeiter verwendet wird. Sie können " -"jedoch eine andere Anwesenheitsart als \"abwesend\" markieren, dann wird " -"das Kennzeichen für diesen Datensatz automatisch entfernt." +"represents absent employees. You can however mark another Attendance Type as" +" 'absent' and then the flag for this record will automatically be removed." +msgstr "" + +#. module: hr_attendance_kanban +#: model:hr.attendance.type,name:hr_attendance_kanban.hr_attendance_type_homeoffice +msgid "🏠 Home-Office" +msgstr "" + +#. module: hr_attendance_kanban +#: model:hr.attendance.type,name:hr_attendance_kanban.hr_attendance_type_office +msgid "🏢 Office" +msgstr "" + +#. module: hr_attendance_kanban +#: model:hr.attendance.type,name:hr_attendance_kanban.hr_attendance_type_absent +msgid "👋 Absent" +msgstr "" + +#. module: hr_attendance_kanban +#: model:hr.attendance.type,name:hr_attendance_kanban.hr_attendance_type_travelling +msgid "🚋 Travelling" +msgstr "" diff --git a/hr_attendance_kanban/models/hr_attendance_type.py b/hr_attendance_kanban/models/hr_attendance_type.py index 78547170..0a3ba240 100644 --- a/hr_attendance_kanban/models/hr_attendance_type.py +++ b/hr_attendance_kanban/models/hr_attendance_type.py @@ -16,6 +16,7 @@ class HrAttendanceType(models.Model): help="Represents a lane in the Attendance Kanban Board", required=True, index=True, + translate=True, ) absent = fields.Boolean( help=( diff --git a/hr_attendance_kanban/static/description/index.html b/hr_attendance_kanban/static/description/index.html index 3e105a5f..a5544252 100644 --- a/hr_attendance_kanban/static/description/index.html +++ b/hr_attendance_kanban/static/description/index.html @@ -368,7 +368,7 @@
This module allows employees to check-in or check-out by moving their avatar on a kanban board.
diff --git a/hr_attendance_kanban/static/src/views/inspector/employee_inspector.esm.js b/hr_attendance_kanban/static/src/views/inspector/employee_inspector.esm.js index 303f4960..393ba1dc 100644 --- a/hr_attendance_kanban/static/src/views/inspector/employee_inspector.esm.js +++ b/hr_attendance_kanban/static/src/views/inspector/employee_inspector.esm.js @@ -1,8 +1,9 @@ /** @odoo-module **/ +import {TimeOffCard} from "@hr_holidays/dashboard/time_off_card"; + import fieldUtils from "web.field_utils"; import {session} from "@web/session"; -import {TimeOffCard} from "@hr_holidays/dashboard/time_off_card"; import {useService} from "@web/core/utils/hooks"; const {Component, useState, onWillStart} = owl; diff --git a/hr_attendance_kanban/static/src/views/inspector/employee_inspector.scss b/hr_attendance_kanban/static/src/views/inspector/employee_inspector.scss index 9e29c428..be29901a 100644 --- a/hr_attendance_kanban/static/src/views/inspector/employee_inspector.scss +++ b/hr_attendance_kanban/static/src/views/inspector/employee_inspector.scss @@ -4,10 +4,9 @@ .o_employee_inspector { flex: 0 0 200px; overflow: auto; - background-color: #ffffff; + background-color: $o-view-background-color; .o_employee_inspector_info { - border-top: 1px solid #4c4c4c; padding: $o-horizontal-padding * 0.5 $o-horizontal-padding * 0.5 $o-horizontal-padding * 0.5; } diff --git a/hr_attendance_kanban/tests/test_hr_attendance_kanban.py b/hr_attendance_kanban/tests/test_hr_attendance_kanban.py index dddda85c..6762899f 100644 --- a/hr_attendance_kanban/tests/test_hr_attendance_kanban.py +++ b/hr_attendance_kanban/tests/test_hr_attendance_kanban.py @@ -4,11 +4,13 @@ from datetime import datetime, timedelta from odoo.exceptions import AccessError, UserError -from odoo.tests import common, new_test_user, users +from odoo.tests import new_test_user, users +from odoo.tests.common import TransactionCase, tagged from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT as DF -class TestHrAttendanceKanban(common.TransactionCase): +@tagged("post_install", "-at_install", "hr_attendance_kanban") +class TestHrAttendanceKanban(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -261,3 +263,99 @@ def test_employee_break(self): self.assertFalse(public_employee.break_start_time) self.assertEqual(first_attendance.worked_hours, 0.5) self.assertEqual(public_employee.last_attendance_id.worked_hours, 7.0) + + @users("test-user") + def test_start_break_when_already_on_break(self): + """Test employee user cannot start a break when already on a break""" + public_employee = self.env["hr.employee.public"].browse(self.employee.ids) + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_office.id, + "start_time": datetime.now().strftime(DF), + "comment": self.att_comment, + } + ).action_change() + self.env["hr.attendance.kanban.break"].create( + { + "public_employee_id": public_employee.id, + "start_time": (datetime.now() + timedelta(minutes=30)).strftime(DF), + } + ).action_start_break() + with self.assertRaises(UserError): + self.env["hr.attendance.kanban.break"].create( + { + "public_employee_id": public_employee.id, + "start_time": (datetime.now() + timedelta(minutes=60)).strftime(DF), + } + ).action_start_break() + + @users("test-user") + def test_end_break_when_not_on_break(self): + """Test employee user cannot end a break when not on a break""" + public_employee = self.env["hr.employee.public"].browse(self.employee.ids) + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_office.id, + "start_time": datetime.now().strftime(DF), + "comment": self.att_comment, + } + ).action_change() + with self.assertRaises(UserError): + self.env["hr.attendance.kanban.break"].create( + { + "public_employee_id": public_employee.id, + "end_time": (datetime.now() + timedelta(minutes=30)).strftime(DF), + } + ).action_end_break() + + @users("test-user") + def test_check_in_when_already_checked_in(self): + """Test employee user cannot check in when already checked in""" + public_employee = self.env["hr.employee.public"].browse(self.employee.ids) + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_office.id, + "start_time": datetime.now().strftime(DF), + "comment": self.att_comment, + } + ).action_change() + with self.assertRaises(UserError): + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_home.id, + "start_time": datetime.now().strftime(DF), + "comment": self.att_comment, + } + ).action_change() + + @users("test-user") + def test_check_out_when_already_checked_out(self): + """Test employee user cannot check out when already checked out""" + public_employee = self.env["hr.employee.public"].browse(self.employee.ids) + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_office.id, + "start_time": datetime.now().strftime(DF), + "comment": self.att_comment, + } + ).action_change() + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_absent.id, + "end_time": (datetime.now() + timedelta(hours=8)).strftime(DF), + } + ).action_change() + with self.assertRaises(UserError): + self.env["hr.attendance.kanban.wizard"].create( + { + "public_employee_id": public_employee.id, + "next_attendance_type_id": self.att_type_absent.id, + "end_time": (datetime.now() + timedelta(hours=9)).strftime(DF), + } + ).action_change() diff --git a/hr_attendance_kanban/views/hr_attendance_kanban_view.xml b/hr_attendance_kanban/views/hr_attendance_kanban_view.xml index 4d42c3a1..fdf3afbc 100644 --- a/hr_attendance_kanban/views/hr_attendance_kanban_view.xml +++ b/hr_attendance_kanban/views/hr_attendance_kanban_view.xml @@ -61,14 +61,32 @@