From 5d118259a3b5a7164db928e7762145691cecd6e2 Mon Sep 17 00:00:00 2001 From: Laetitia Da Costa Date: Fri, 25 Apr 2025 12:05:45 +0200 Subject: [PATCH] [ADD]hr_employee_stats_sheet_lunch_voucher --- .../README.rst | 50 +++++++++++ .../__init__.py | 1 + .../__manifest__.py | 20 +++++ .../i18n/fr.po | 86 +++++++++++++++++++ .../hr_employee_stats_sheet_lunch_voucher.pot | 42 +++++++++ .../models/__init__.py | 1 + .../models/hr_employee_stats.py | 19 ++++ .../models/hr_timesheet_sheet.py | 15 ++++ .../models/res_company.py | 7 ++ .../models/res_config.py | 14 +++ .../views/hr_employee_stats.xml | 12 +++ .../views/hr_timesheet_sheet.xml | 22 +++++ .../views/res_config_settings_views.xml | 35 ++++++++ 13 files changed, 324 insertions(+) create mode 100644 hr_employee_stats_sheet_lunch_voucher/README.rst create mode 100755 hr_employee_stats_sheet_lunch_voucher/__init__.py create mode 100755 hr_employee_stats_sheet_lunch_voucher/__manifest__.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/i18n/fr.po create mode 100644 hr_employee_stats_sheet_lunch_voucher/i18n/hr_employee_stats_sheet_lunch_voucher.pot create mode 100644 hr_employee_stats_sheet_lunch_voucher/models/__init__.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/models/hr_employee_stats.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/models/hr_timesheet_sheet.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/models/res_company.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/models/res_config.py create mode 100644 hr_employee_stats_sheet_lunch_voucher/views/hr_employee_stats.xml create mode 100644 hr_employee_stats_sheet_lunch_voucher/views/hr_timesheet_sheet.xml create mode 100644 hr_employee_stats_sheet_lunch_voucher/views/res_config_settings_views.xml diff --git a/hr_employee_stats_sheet_lunch_voucher/README.rst b/hr_employee_stats_sheet_lunch_voucher/README.rst new file mode 100644 index 0000000..3581313 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/README.rst @@ -0,0 +1,50 @@ +===================================== +hr_employee_stats_sheet_lunch_voucher +===================================== + +Summary +======= + + +Description +=========== + + +Installation +============ + +Use Odoo normal module installation procedure to install +``hr_employee_stats_sheet_lunch_voucher``. + +Known issues / Roadmap +====================== + +None yet. + +Bug Tracker +=========== + +Bugs are tracked on `our issues website `_. In case of +trouble, please check there if your issue has already been +reported. If you spotted it first, help us smashing it by providing a +detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* `Elabore ` + +Funders +------- + +The development of this module has been financially supported by: +* Elabore (https://elabore.coop) + + +Maintainer +---------- + +This module is maintained by Elabore. \ No newline at end of file diff --git a/hr_employee_stats_sheet_lunch_voucher/__init__.py b/hr_employee_stats_sheet_lunch_voucher/__init__.py new file mode 100755 index 0000000..0650744 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/hr_employee_stats_sheet_lunch_voucher/__manifest__.py b/hr_employee_stats_sheet_lunch_voucher/__manifest__.py new file mode 100755 index 0000000..83a9487 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/__manifest__.py @@ -0,0 +1,20 @@ +{ + "name": "hr_employee_stats_sheet_lunch_voucher", + "version": "16.0.1.0.0", + "description": "Add global sheet for employee stats", + "summary": "Add global sheet for employee stats", + "author": "Elabore", + "website": "https://elabore.coop", + "license": "LGPL-3", + "category": "Human Resources", + "depends": [ + "hr_employee_stats_sheet", + ], + "data": [ + "views/hr_employee_stats.xml", + "views/hr_timesheet_sheet.xml", + "views/res_config_settings_views.xml", + ], + "installable": True, + "application": False, +} diff --git a/hr_employee_stats_sheet_lunch_voucher/i18n/fr.po b/hr_employee_stats_sheet_lunch_voucher/i18n/fr.po new file mode 100644 index 0000000..4e634d3 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/i18n/fr.po @@ -0,0 +1,86 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_employee_stats_sheet_lunch_voucher +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-06-11 13:19+0000\n" +"PO-Revision-Date: 2025-06-11 13:19+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,help:hr_employee_stats_sheet_lunch_voucher.field_res_config_settings__lunch_voucher_min_worked_hours +msgid "" +"5h by default, meaning that if an employee works 5h or more in a day, he " +"will get a lunch voucher" +msgstr "5h par défaut" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.res_config_settings_view_form +msgid "" +"" +msgstr "" +"" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_hr_employee_stats +msgid "Employee Stats" +msgstr "Statistique de l'employé·e" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.res_config_settings_view_form +msgid "" +"Indicate the minimal number of hours worked in a day to get a lunch voucher " +"(by default 5 hours)." +msgstr "Indiquez le nombre d'heures minimal pour cumuler une prime repas/ticket restaurant" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_hr_employee_stats__lunch_voucher +msgid "Lunch Voucher" +msgstr "Ticket restaurant" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_res_company__lunch_voucher_min_worked_hours +msgid "Lunch Voucher Min Worked Hours" +msgstr "Prime repas Nombre d'heures minimal" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_hr_timesheet_sheet__lunch_voucher_count +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.hr_timesheet_sheet_tree_lunch_voucher_inherit +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.timesheet_sheet_form_lunch_voucher_inherit +msgid "Lunch voucher Count" +msgstr "Nombre de ticket restaurant" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_res_config_settings__lunch_voucher_min_worked_hours +msgid "Minimal number of hours worked in a day to get a lunch voucher" +msgstr "Nombre d'heures minimal pour cumuler une prime repas/ticket restaurant" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "Feuille de temps" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.hr_employee_stats_tree_lunch_voucher_inherit +msgid "Total" +msgstr "" \ No newline at end of file diff --git a/hr_employee_stats_sheet_lunch_voucher/i18n/hr_employee_stats_sheet_lunch_voucher.pot b/hr_employee_stats_sheet_lunch_voucher/i18n/hr_employee_stats_sheet_lunch_voucher.pot new file mode 100644 index 0000000..46f59a8 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/i18n/hr_employee_stats_sheet_lunch_voucher.pot @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_employee_stats_sheet_lunch_voucher +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-05-05 13:34+0000\n" +"PO-Revision-Date: 2025-05-05 13:34+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_hr_employee_stats +msgid "Employee Stats" +msgstr "" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_hr_employee_stats__lunch_voucher +msgid "Lunch Voucher" +msgstr "" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model.fields,field_description:hr_employee_stats_sheet_lunch_voucher.field_hr_timesheet_sheet__lunch_voucher_count +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.hr_timesheet_sheet_stats_overview_view_sikle_inherit +msgid "Lunch voucher Count" +msgstr "" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model:ir.model,name:hr_employee_stats_sheet_lunch_voucher.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "" + +#. module: hr_employee_stats_sheet_lunch_voucher +#: model_terms:ir.ui.view,arch_db:hr_employee_stats_sheet_lunch_voucher.view_hr_employee_stats_tree_sikle_inherit +msgid "Total" +msgstr "" diff --git a/hr_employee_stats_sheet_lunch_voucher/models/__init__.py b/hr_employee_stats_sheet_lunch_voucher/models/__init__.py new file mode 100644 index 0000000..3258c9a --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/models/__init__.py @@ -0,0 +1 @@ +from . import hr_employee_stats, hr_timesheet_sheet, res_config, res_company diff --git a/hr_employee_stats_sheet_lunch_voucher/models/hr_employee_stats.py b/hr_employee_stats_sheet_lunch_voucher/models/hr_employee_stats.py new file mode 100644 index 0000000..2a6a438 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/models/hr_employee_stats.py @@ -0,0 +1,19 @@ +from odoo import fields, models, api + +class HrEmployeeStats(models.Model): + _inherit = "hr.employee.stats" + + lunch_voucher = fields.Integer("Lunch Voucher", compute="_compute_lunch_voucher") + + @api.depends("total_hours") + def _compute_lunch_voucher(self): + for stat in self: + stat.lunch_voucher = 0 + if stat.date and stat.employee_id: + stat._get_lunch_voucher() + + def _get_lunch_voucher(self): + #do not factorize this method with _compute_lunch_voucher to be used in other modules + self.ensure_one() + if self.total_hours >= self.env.company.lunch_voucher_min_worked_hours: + self.lunch_voucher = 1 diff --git a/hr_employee_stats_sheet_lunch_voucher/models/hr_timesheet_sheet.py b/hr_employee_stats_sheet_lunch_voucher/models/hr_timesheet_sheet.py new file mode 100644 index 0000000..7a81e15 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/models/hr_timesheet_sheet.py @@ -0,0 +1,15 @@ +from odoo import fields, models, api + +class HrTimesheetSheet(models.Model): + _inherit = "hr_timesheet.sheet" + + lunch_voucher_count = fields.Integer("Lunch voucher Count", compute="_compute_lunch_voucher_count") + + @api.depends("employee_stats_ids.lunch_voucher") + def _compute_lunch_voucher_count(self): + for sheet in self: + sheet.lunch_voucher_count = 0 + if sheet.employee_stats_ids: + for stat in sheet.employee_stats_ids: + sheet.lunch_voucher_count += stat.lunch_voucher + diff --git a/hr_employee_stats_sheet_lunch_voucher/models/res_company.py b/hr_employee_stats_sheet_lunch_voucher/models/res_company.py new file mode 100644 index 0000000..9fea141 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/models/res_company.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + lunch_voucher_min_worked_hours = fields.Float(default=5) diff --git a/hr_employee_stats_sheet_lunch_voucher/models/res_config.py b/hr_employee_stats_sheet_lunch_voucher/models/res_config.py new file mode 100644 index 0000000..b7b0b44 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/models/res_config.py @@ -0,0 +1,14 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + lunch_voucher_min_worked_hours = fields.Float( + related="company_id.lunch_voucher_min_worked_hours", + required=True, + string="Minimal number of hours worked in a day to get a lunch voucher", + domain="[('company_id', '=', company_id)]", + readonly=False, + help="5h by default, meaning that if an employee works 5h or more in a day, he will get a lunch voucher", + ) diff --git a/hr_employee_stats_sheet_lunch_voucher/views/hr_employee_stats.xml b/hr_employee_stats_sheet_lunch_voucher/views/hr_employee_stats.xml new file mode 100644 index 0000000..bea9cd6 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/views/hr_employee_stats.xml @@ -0,0 +1,12 @@ + + + hr.employee.stats.tree.lunch.voucher.inherit + hr.employee.stats + + + + + + + + \ No newline at end of file diff --git a/hr_employee_stats_sheet_lunch_voucher/views/hr_timesheet_sheet.xml b/hr_employee_stats_sheet_lunch_voucher/views/hr_timesheet_sheet.xml new file mode 100644 index 0000000..6c29631 --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/views/hr_timesheet_sheet.xml @@ -0,0 +1,22 @@ + + + timesheet.sheet.form.lunch.voucher.inherit + hr_timesheet.sheet + + + + + + + + + hr.timesheet.sheet.tree.lunch.voucher.inherit + hr_timesheet.sheet + + + + + + + + \ No newline at end of file diff --git a/hr_employee_stats_sheet_lunch_voucher/views/res_config_settings_views.xml b/hr_employee_stats_sheet_lunch_voucher/views/res_config_settings_views.xml new file mode 100644 index 0000000..3fb6e3c --- /dev/null +++ b/hr_employee_stats_sheet_lunch_voucher/views/res_config_settings_views.xml @@ -0,0 +1,35 @@ + + + res.config.settings.view.form.inherit.hr.timesheet + res.config.settings + + + + +
+
+
+
+
+
+
+
\ No newline at end of file