From 9d7236a7a56d99e6d84ef288f30295a37f461987 Mon Sep 17 00:00:00 2001 From: JordiMForgeFlow Date: Tue, 6 Jun 2023 12:17:04 +0200 Subject: [PATCH 01/12] [ADD] hr_holidays_summary_email --- hr_holidays_summary_email/README.rst | 97 ++++ hr_holidays_summary_email/__init__.py | 1 + hr_holidays_summary_email/__manifest__.py | 24 + hr_holidays_summary_email/data/ir_cron.xml | 15 + .../data/mail_template_data.xml | 109 +++++ hr_holidays_summary_email/models/__init__.py | 5 + .../models/hr_employee.py | 18 + hr_holidays_summary_email/models/hr_leave.py | 137 ++++++ .../models/res_company.py | 23 + .../models/res_config_settings.py | 14 + hr_holidays_summary_email/models/res_users.py | 11 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + hr_holidays_summary_email/readme/USAGE.rst | 9 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 442 ++++++++++++++++++ hr_holidays_summary_email/tests/__init__.py | 1 + .../tests/test_hr_leave_summary_email.py | 101 ++++ .../views/hr_employee_views.xml | 27 ++ .../views/res_config_settings.xml | 43 ++ .../views/res_users_views.xml | 18 + 21 files changed, 1100 insertions(+) create mode 100644 hr_holidays_summary_email/README.rst create mode 100644 hr_holidays_summary_email/__init__.py create mode 100644 hr_holidays_summary_email/__manifest__.py create mode 100644 hr_holidays_summary_email/data/ir_cron.xml create mode 100644 hr_holidays_summary_email/data/mail_template_data.xml create mode 100644 hr_holidays_summary_email/models/__init__.py create mode 100644 hr_holidays_summary_email/models/hr_employee.py create mode 100644 hr_holidays_summary_email/models/hr_leave.py create mode 100644 hr_holidays_summary_email/models/res_company.py create mode 100644 hr_holidays_summary_email/models/res_config_settings.py create mode 100644 hr_holidays_summary_email/models/res_users.py create mode 100644 hr_holidays_summary_email/readme/CONTRIBUTORS.rst create mode 100644 hr_holidays_summary_email/readme/DESCRIPTION.rst create mode 100644 hr_holidays_summary_email/readme/USAGE.rst create mode 100644 hr_holidays_summary_email/static/description/icon.png create mode 100644 hr_holidays_summary_email/static/description/index.html create mode 100644 hr_holidays_summary_email/tests/__init__.py create mode 100644 hr_holidays_summary_email/tests/test_hr_leave_summary_email.py create mode 100644 hr_holidays_summary_email/views/hr_employee_views.xml create mode 100644 hr_holidays_summary_email/views/res_config_settings.xml create mode 100644 hr_holidays_summary_email/views/res_users_views.xml diff --git a/hr_holidays_summary_email/README.rst b/hr_holidays_summary_email/README.rst new file mode 100644 index 00000000..6a9da1da --- /dev/null +++ b/hr_holidays_summary_email/README.rst @@ -0,0 +1,97 @@ +====================== +Holidays Summary Email +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github + :target: https://github.com/OCA/hr-holidays/tree/14.0/hr_holidays_summary_email + :alt: OCA/hr-holidays +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/hr-holidays-14-0/hr-holidays-14-0-hr_holidays_summary_email + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/290/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows sending a daily/weekly email to employees with a summary +of the leaves on that period of other employees in the same company. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +For each employee, three options can be selected for the Leave Summary Email +configuration: + +- No: No email with the leaves summary is sent to the employee. +- Daily: A daily email with the leaves summary is sent to the employee. +- Weekly: A weekly email with the leaves summary is sent to the employee. + +For the weekly email, the setting `Leave Weekly Summary Day of Week` allows +setting the day of the week in which the email is sent. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* ForgeFlow + + * Jordi Masvidal + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-JordiMForgeFlow| image:: https://github.com/JordiMForgeFlow.png?size=40px + :target: https://github.com/JordiMForgeFlow + :alt: JordiMForgeFlow + +Current `maintainer `__: + +|maintainer-JordiMForgeFlow| + +This module is part of the `OCA/hr-holidays `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_holidays_summary_email/__init__.py b/hr_holidays_summary_email/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/hr_holidays_summary_email/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/hr_holidays_summary_email/__manifest__.py b/hr_holidays_summary_email/__manifest__.py new file mode 100644 index 00000000..676dcd2f --- /dev/null +++ b/hr_holidays_summary_email/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Holidays Summary Email", + "summary": """ + Notify employees with daily or weekly leaves summaries of their company. + """, + "version": "14.0.1.0.0", + "category": "Human Resources", + "website": "https://github.com/OCA/hr-holidays", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["hr_holidays", "hr_holidays_settings"], + "data": [ + "data/ir_cron.xml", + "data/mail_template_data.xml", + "views/hr_employee_views.xml", + "views/res_users_views.xml", + "views/res_config_settings.xml", + ], + "maintainers": ["JordiMForgeFlow"], +} diff --git a/hr_holidays_summary_email/data/ir_cron.xml b/hr_holidays_summary_email/data/ir_cron.xml new file mode 100644 index 00000000..8b17eb4e --- /dev/null +++ b/hr_holidays_summary_email/data/ir_cron.xml @@ -0,0 +1,15 @@ + + + + Leaves Summary Email + + + 1 + days + -1 + + + code + model._cron_send_hr_leave_summary_emails() + + diff --git a/hr_holidays_summary_email/data/mail_template_data.xml b/hr_holidays_summary_email/data/mail_template_data.xml new file mode 100644 index 00000000..72840431 --- /dev/null +++ b/hr_holidays_summary_email/data/mail_template_data.xml @@ -0,0 +1,109 @@ + + + + + Leaves Summary: Daily + + Daily Leaves Summary + ${object.work_email | safe} + ${object.company_id.partner_id.email_formatted | safe} + +
+

Dear ${object.name},

+
+

This is today's leave summary:

+
+ + + + + + + + % set timeoffs = ctx.get('time_offs', False) + % for data in timeoffs + % set d_from = data.format_hr_leave_summary_date() + % set d_to = data.format_hr_leave_summary_date(False) + + + + + + + % endfor +
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
+
+
+ ${object.lang} + +
+ + Leaves Summary: Weekly + + Weekly Leaves Summary + ${object.work_email | safe} + ${object.company_id.partner_id.email_formatted | safe} + +
+

Dear ${object.name},

+
+

This is the leaves summary for this week:

+
+ + + + + + + + % set timeoffs = ctx.get('time_offs', False) + % for data in timeoffs + % set d_from = data.format_hr_leave_summary_date() + % set d_to = data.format_hr_leave_summary_date(False) + + + + + + + % endfor +
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
+
+
+ ${object.lang} + +
+
+
diff --git a/hr_holidays_summary_email/models/__init__.py b/hr_holidays_summary_email/models/__init__.py new file mode 100644 index 00000000..74ec9fc5 --- /dev/null +++ b/hr_holidays_summary_email/models/__init__.py @@ -0,0 +1,5 @@ +from . import hr_leave +from . import hr_employee +from . import res_company +from . import res_config_settings +from . import res_users diff --git a/hr_holidays_summary_email/models/hr_employee.py b/hr_holidays_summary_email/models/hr_employee.py new file mode 100644 index 00000000..58a23a75 --- /dev/null +++ b/hr_holidays_summary_email/models/hr_employee.py @@ -0,0 +1,18 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class HrEmployeeBase(models.AbstractModel): + _inherit = "hr.employee.base" + + hr_leave_summary_type = fields.Selection( + selection=[("no", "No"), ("daily", "Daily"), ("weekly", "Weekly")], + string="Leave Summary Email", + required=True, + default="no", + ) + last_hr_leave_summary_sent = fields.Date( + string="Last Leave Summary Email Sent", + readonly=True, + ) diff --git a/hr_holidays_summary_email/models/hr_leave.py b/hr_holidays_summary_email/models/hr_leave.py new file mode 100644 index 00000000..74bfa7b6 --- /dev/null +++ b/hr_holidays_summary_email/models/hr_leave.py @@ -0,0 +1,137 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT + + +class HrLeave(models.Model): + _inherit = "hr.leave" + + @api.model + def _get_hr_leave_summary_mail_template(self, summary_type): + return self.env.ref( + "hr_holidays_summary_email.hr_holidays_summary_mail_template_%s" + % summary_type, + raise_if_not_found=False, + ) + + @api.model + def _get_hr_leave_summary_employee_domain(self, summary_type, company_id): + return [ + ("hr_leave_summary_type", "=", summary_type), + ("last_hr_leave_summary_sent", "!=", fields.Date.today()), + ("company_id", "=", company_id), + ] + + @api.model + def _get_hr_leave_summary_base_domain(self, company_id): + return [ + ("state", "=", "validate"), + ("employee_id.company_id", "=", company_id), + ] + + @api.model + def _get_hr_leave_summary_daily_domain(self, company_id): + res = self._get_hr_leave_summary_base_domain(company_id) + res += [ + ("date_from", "<=", fields.Date.today()), + ("date_to", ">=", fields.Date.today()), + ] + return res + + @api.model + def _get_hr_leave_summary_weekly_domain(self, company_id): + res = self._get_hr_leave_summary_base_domain(company_id) + date_from = fields.Date.today() + date_to = date_from + relativedelta(days=6) + res += [ + ("date_from", "<=", date_to), + ("date_to", ">=", date_from), + ] + return res + + @api.model + def _cron_send_hr_leave_summary_emails_daily(self, employees_to_notify, company): + domain = self._get_hr_leave_summary_daily_domain(company.id) + today_time_offs = self.env["hr.leave"].sudo().search(domain) + template = self._get_hr_leave_summary_mail_template("daily") + if not template: + return + for employee in employees_to_notify: + template.with_context(time_offs=today_time_offs).send_mail( + employee.id, force_send=False + ) + employees_to_notify.write({"last_hr_leave_summary_sent": fields.Date.today()}) + + @api.model + def _cron_send_hr_leave_summary_emails_weekly(self, employees_to_notify, company): + if str(fields.Date.today().weekday()) != company.hr_holidays_summary_weekly_dow: + return + domain = self._get_hr_leave_summary_weekly_domain(company.id) + today_time_offs = self.env["hr.leave"].sudo().search(domain) + template = self._get_hr_leave_summary_mail_template("weekly") + if not template: + return + for employee in employees_to_notify: + template.with_context(time_offs=today_time_offs).send_mail( + employee.id, force_send=False + ) + employees_to_notify.write({"last_hr_leave_summary_sent": fields.Date.today()}) + + @api.model + def _cron_send_hr_leave_summary_emails(self): + summary_types = self.env["hr.employee"].fields_get(["hr_leave_summary_type"])[ + "hr_leave_summary_type" + ]["selection"] + for company in self.env["res.company"].search([]): + for stype_tuple in summary_types: + stype = stype_tuple[0] + employee_domain = self._get_hr_leave_summary_employee_domain( + stype, company.id + ) + employees_to_notify = self.env["hr.employee"].search(employee_domain) + if employees_to_notify and hasattr( + self, "_cron_send_hr_leave_summary_emails_%s" % stype + ): + getattr(self, "_cron_send_hr_leave_summary_emails_%s" % stype)( + employees_to_notify, company + ) + + def format_hr_leave_summary_date(self, date_from=True): + self.ensure_one() + if date_from: + res = self.date_from.strftime(DEFAULT_SERVER_DATE_FORMAT) + else: + res = self.date_to.strftime(DEFAULT_SERVER_DATE_FORMAT) + if self.request_unit_half: + res += ( + " %s" + % dict( + self.env["hr.leave"].fields_get(["request_date_from_period"])[ + "request_date_from_period" + ]["selection"] + )[self.request_date_from_period] + ) + elif self.request_unit_hours: + if date_from: + res += ( + " %s" + % dict( + self.env["hr.leave"].fields_get(["request_hour_from"])[ + "request_hour_from" + ]["selection"] + )[self.request_hour_from] + ) + else: + res += ( + " %s" + % dict( + self.env["hr.leave"].fields_get(["request_hour_to"])[ + "request_hour_to" + ]["selection"] + )[self.request_hour_to] + ) + return res diff --git a/hr_holidays_summary_email/models/res_company.py b/hr_holidays_summary_email/models/res_company.py new file mode 100644 index 00000000..03b36d56 --- /dev/null +++ b/hr_holidays_summary_email/models/res_company.py @@ -0,0 +1,23 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + hr_holidays_summary_weekly_dow = fields.Selection( + selection=[ + ("0", "Monday"), + ("1", "Tuesday"), + ("2", "Wednesday"), + ("3", "Thursday"), + ("4", "Friday"), + ("5", "Saturday"), + ("6", "Sunday"), + ], + string="Leave Weekly Summary Day of Week", + default="0", + required=True, + ) diff --git a/hr_holidays_summary_email/models/res_config_settings.py b/hr_holidays_summary_email/models/res_config_settings.py new file mode 100644 index 00000000..9d914966 --- /dev/null +++ b/hr_holidays_summary_email/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + hr_holidays_summary_weekly_dow = fields.Selection( + related="company_id.hr_holidays_summary_weekly_dow", + readonly=False, + required=True, + ) diff --git a/hr_holidays_summary_email/models/res_users.py b/hr_holidays_summary_email/models/res_users.py new file mode 100644 index 00000000..f44c4998 --- /dev/null +++ b/hr_holidays_summary_email/models/res_users.py @@ -0,0 +1,11 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ResUser(models.Model): + _inherit = "res.users" + + hr_leave_summary_type = fields.Selection( + related="employee_id.hr_leave_summary_type", readonly=False, related_sudo=False + ) diff --git a/hr_holidays_summary_email/readme/CONTRIBUTORS.rst b/hr_holidays_summary_email/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..bbe976d7 --- /dev/null +++ b/hr_holidays_summary_email/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* ForgeFlow + + * Jordi Masvidal diff --git a/hr_holidays_summary_email/readme/DESCRIPTION.rst b/hr_holidays_summary_email/readme/DESCRIPTION.rst new file mode 100644 index 00000000..7230f841 --- /dev/null +++ b/hr_holidays_summary_email/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows sending a daily/weekly email to employees with a summary +of the leaves on that period of other employees in the same company. diff --git a/hr_holidays_summary_email/readme/USAGE.rst b/hr_holidays_summary_email/readme/USAGE.rst new file mode 100644 index 00000000..f2dea967 --- /dev/null +++ b/hr_holidays_summary_email/readme/USAGE.rst @@ -0,0 +1,9 @@ +For each employee, three options can be selected for the Leave Summary Email +configuration: + +- No: No email with the leaves summary is sent to the employee. +- Daily: A daily email with the leaves summary is sent to the employee. +- Weekly: A weekly email with the leaves summary is sent to the employee. + +For the weekly email, the setting `Leave Weekly Summary Day of Week` allows +setting the day of the week in which the email is sent. diff --git a/hr_holidays_summary_email/static/description/icon.png b/hr_holidays_summary_email/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/hr_holidays_summary_email/static/description/index.html b/hr_holidays_summary_email/static/description/index.html new file mode 100644 index 00000000..e900281b --- /dev/null +++ b/hr_holidays_summary_email/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Holidays natural period + + + +
+

Holidays natural period

+ + +

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runbot

+

This module was written to define natural day option in request unit on holidays type.

+

Table of contents

+ +
+

Usage

+

For using natural period on leaves:

+
    +
  1. Go to Leaves > Dashboard.
  2. +
  3. Select dragging on the calendar the days you want to be on leave, or go +to the form view for selecting start and end dates.
  4. +
  5. Select the proper “Leave Type” that has “Natural day” selected in “Request unit”.
  6. +
  7. If no leave type is yet specified, then default configuration is to exclude +public holidays.
  8. +
  9. The number of days will be computed without employee calendar used.
  10. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

victoralmau

+

This module is part of the OCA/hr-holidays project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/hr_holidays_summary_email/tests/__init__.py b/hr_holidays_summary_email/tests/__init__.py new file mode 100644 index 00000000..dfe66941 --- /dev/null +++ b/hr_holidays_summary_email/tests/__init__.py @@ -0,0 +1 @@ +from . import test_hr_leave_summary_email diff --git a/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py new file mode 100644 index 00000000..68546be8 --- /dev/null +++ b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py @@ -0,0 +1,101 @@ +# Copyright 2023 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from datetime import date, datetime + +from dateutil.relativedelta import relativedelta + +from odoo.tests import common + + +class TestHrLeaveSummaryEmail(common.TransactionCase): + def setUp(self): + super().setUp() + self.HrLeave = self.env["hr.leave"] + leave_type = self.env.ref("hr_holidays.hr_holiday_status_dv") + # Add allocation days for the test + leave_type.write({"allocation_type": "no"}) + calendar = self.env.ref("resource.resource_calendar_std") + partner = self.env["res.partner"].create( + { + "name": "Test employee", + "type": "private", + "country_id": self.env.ref("base.es").id, + } + ) + self.employee = self.env["hr.employee"].create( + { + "name": "Test employee", + "address_home_id": partner.id, + "resource_calendar_id": calendar.id, + } + ) + # Today leave + self.leave_1 = ( + self.env["hr.leave"] + .with_context(leave_skip_state_check=True) + .create( + { + "name": "Test 1", + "employee_id": self.employee.id, + "holiday_status_id": leave_type.id, + "date_from": datetime.today(), + "date_to": (datetime.today() + relativedelta(days=1)), + "number_of_days": 1, + "state": "validate", + } + ) + ) + + # Week leave + self.leave_2 = ( + self.env["hr.leave"] + .with_context(leave_skip_state_check=True) + .create( + { + "name": "Test 2", + "employee_id": self.employee.id, + "holiday_status_id": leave_type.id, + "date_from": (datetime.today() + relativedelta(days=3)), + "date_to": (datetime.today() + relativedelta(days=5)), + "number_of_days": 2, + "state": "validate", + } + ) + ) + + def test_hr_leave_summary_no(self): + """ + No email sent with the default setting in the employee + """ + self.HrLeave._cron_send_hr_leave_summary_emails() + self.assertFalse(self.employee.last_hr_leave_summary_sent) + + def test_hr_leave_summary_daily(self): + """ + Today's active leave is part of the daily email, but the other not. + """ + domain = self.HrLeave._get_hr_leave_summary_daily_domain(self.env.company.id) + today_time_offs = self.HrLeave.search(domain) + self.assertIn(self.leave_1, today_time_offs) + self.assertNotIn(self.leave_2, today_time_offs) + self.employee.write({"hr_leave_summary_type": "daily"}) + self.HrLeave._cron_send_hr_leave_summary_emails() + self.assertEqual(self.employee.last_hr_leave_summary_sent, date.today()) + + def test_hr_leave_summary_weekly(self): + """ + Today's active leave is part of the daily email, as well as the other + in the same week. + """ + domain = self.HrLeave._get_hr_leave_summary_weekly_domain(self.env.company.id) + today_time_offs = self.HrLeave.search(domain) + self.assertIn(self.leave_1, today_time_offs) + self.assertIn(self.leave_2, today_time_offs) + self.employee.write( + {"hr_leave_summary_type": "weekly", "last_hr_leave_summary_sent": False} + ) + self.env.company.write( + {"hr_holidays_summary_weekly_dow": str(date.today().weekday())} + ) + self.HrLeave._cron_send_hr_leave_summary_emails() + self.assertEqual(self.employee.last_hr_leave_summary_sent, date.today()) diff --git a/hr_holidays_summary_email/views/hr_employee_views.xml b/hr_holidays_summary_email/views/hr_employee_views.xml new file mode 100644 index 00000000..67f6f2fb --- /dev/null +++ b/hr_holidays_summary_email/views/hr_employee_views.xml @@ -0,0 +1,27 @@ + + + + + hr.employee.view.form - hr_holidays_summary_email + hr.employee + + + + + + + + + hr.employee.public.form - hr_holidays_summary_email + hr.employee.public + + + + + + + + diff --git a/hr_holidays_summary_email/views/res_config_settings.xml b/hr_holidays_summary_email/views/res_config_settings.xml new file mode 100644 index 00000000..e008486f --- /dev/null +++ b/hr_holidays_summary_email/views/res_config_settings.xml @@ -0,0 +1,43 @@ + + + + + res.config.settings.form - hr_holidays_summary_email + res.config.settings + + + +
+
+
+ Weekly Leaves Summary +
+ Day of week when the weekly leaves summary is sent. +
+
+
+
+
+
+
+
+
+
diff --git a/hr_holidays_summary_email/views/res_users_views.xml b/hr_holidays_summary_email/views/res_users_views.xml new file mode 100644 index 00000000..979037a7 --- /dev/null +++ b/hr_holidays_summary_email/views/res_users_views.xml @@ -0,0 +1,18 @@ + + + + res.users.preferences.form.inherit - hr_holidays_summary_email + res.users + + + + + + + + From e9e5e2d3344c8fd6889a426cef387cf282711f04 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 4 Sep 2023 12:22:41 +0000 Subject: [PATCH 02/12] [UPD] Update hr_holidays_summary_email.pot --- .../i18n/hr_holidays_summary_email.pot | 237 ++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 hr_holidays_summary_email/i18n/hr_holidays_summary_email.pot diff --git a/hr_holidays_summary_email/i18n/hr_holidays_summary_email.pot b/hr_holidays_summary_email/i18n/hr_holidays_summary_email.pot new file mode 100644 index 00000000..f26d520b --- /dev/null +++ b/hr_holidays_summary_email/i18n/hr_holidays_summary_email.pot @@ -0,0 +1,237 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_summary_email +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \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_holidays_summary_email +#: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly +msgid "" +"
\n" +"

Dear ${object.name},

\n" +"
\n" +"

This is the leaves summary for this week:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily +msgid "" +"
\n" +"

Dear ${object.name},

\n" +"
\n" +"

This is today's leave summary:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Weekly Leaves Summary" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_hr_employee_base +msgid "Basic Employee" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_company +msgid "Companies" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__daily +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__daily +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__daily +msgid "Daily" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily +msgid "Daily Leaves Summary" +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Day of week when the weekly leaves summary is sent." +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__4 +msgid "Friday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__id +msgid "ID" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__last_hr_leave_summary_sent +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__last_hr_leave_summary_sent +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__last_hr_leave_summary_sent +msgid "Last Leave Summary Email Sent" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__hr_leave_summary_type +msgid "Leave Summary Email" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__hr_holidays_summary_weekly_dow +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__hr_holidays_summary_weekly_dow +msgid "Leave Weekly Summary Day of Week" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.actions.server,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email_ir_actions_server +#: model:ir.cron,cron_name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email +#: model:ir.cron,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email +msgid "Leaves Summary Email" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__0 +msgid "Monday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__no +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__no +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__no +msgid "No" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__5 +msgid "Saturday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Sending Day Of Week" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__6 +msgid "Sunday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__3 +msgid "Thursday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_hr_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__1 +msgid "Tuesday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__2 +msgid "Wednesday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__weekly +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__weekly +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__weekly +msgid "Weekly" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly +msgid "Weekly Leaves Summary" +msgstr "" From d133b1fbfe9b958c49562d0f7d4b87af04ece80e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 4 Sep 2023 12:25:37 +0000 Subject: [PATCH 03/12] [UPD] README.rst --- hr_holidays_summary_email/README.rst | 17 ++-- .../static/description/index.html | 79 ++++++++++--------- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/hr_holidays_summary_email/README.rst b/hr_holidays_summary_email/README.rst index 6a9da1da..50c5dba3 100644 --- a/hr_holidays_summary_email/README.rst +++ b/hr_holidays_summary_email/README.rst @@ -2,10 +2,13 @@ Holidays Summary Email ====================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b059b061e7275ac9595e7bf51c4d3a3e139eea53d3beb76c870af9450291c914 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Holidays Summary Email .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/hr-holidays-14-0/hr-holidays-14-0-hr_holidays_summary_email :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/290/14.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=14.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows sending a daily/weekly email to employees with a summary of the leaves on that period of other employees in the same company. @@ -51,8 +54,8 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. 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 `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/hr_holidays_summary_email/static/description/index.html b/hr_holidays_summary_email/static/description/index.html index e900281b..6696a3c6 100644 --- a/hr_holidays_summary_email/static/description/index.html +++ b/hr_holidays_summary_email/static/description/index.html @@ -1,20 +1,20 @@ - + - -Holidays natural period + +Holidays Summary Email -
-

Holidays natural period

+
+

Holidays Summary Email

-

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runbot

-

This module was written to define natural day option in request unit on holidays type.

+

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

This module allows sending a daily/weekly email to employees with a summary +of the leaves on that period of other employees in the same company.

Table of contents

-

Usage

-

For using natural period on leaves:

-
    -
  1. Go to Leaves > Dashboard.
  2. -
  3. Select dragging on the calendar the days you want to be on leave, or go -to the form view for selecting start and end dates.
  4. -
  5. Select the proper “Leave Type” that has “Natural day” selected in “Request unit”.
  6. -
  7. If no leave type is yet specified, then default configuration is to exclude -public holidays.
  8. -
  9. The number of days will be computed without employee calendar used.
  10. -
+

Usage

+

For each employee, three options can be selected for the Leave Summary Email +configuration:

+
    +
  • No: No email with the leaves summary is sent to the employee.
  • +
  • Daily: A daily email with the leaves summary is sent to the employee.
  • +
  • Weekly: A weekly email with the leaves summary is sent to the employee.
  • +
+

For the weekly email, the setting Leave Weekly Summary Day of Week allows +setting the day of the week in which the email is sent.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. 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.

+If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

    -
  • Tecnativa
  • +
  • ForgeFlow
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

Current maintainer:

-

victoralmau

-

This module is part of the OCA/hr-holidays project on GitHub.

+

JordiMForgeFlow

+

This module is part of the OCA/hr-holidays project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 1ab38a6dcb94ee3fd8d2f1d79174d05168746c8a Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 27 Sep 2023 09:13:41 +0000 Subject: [PATCH 04/12] Added translation using Weblate (Italian) --- hr_holidays_summary_email/i18n/it.po | 238 +++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 hr_holidays_summary_email/i18n/it.po diff --git a/hr_holidays_summary_email/i18n/it.po b/hr_holidays_summary_email/i18n/it.po new file mode 100644 index 00000000..4ef830d8 --- /dev/null +++ b/hr_holidays_summary_email/i18n/it.po @@ -0,0 +1,238 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_summary_email +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: hr_holidays_summary_email +#: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly +msgid "" +"
\n" +"

Dear ${object.name},

\n" +"
\n" +"

This is the leaves summary for this week:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily +msgid "" +"
\n" +"

Dear ${object.name},

\n" +"
\n" +"

This is today's leave summary:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
EmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Weekly Leaves Summary" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_hr_employee_base +msgid "Basic Employee" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_company +msgid "Companies" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__daily +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__daily +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__daily +msgid "Daily" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily +msgid "Daily Leaves Summary" +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Day of week when the weekly leaves summary is sent." +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__display_name +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__4 +msgid "Friday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__id +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__id +msgid "ID" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__last_hr_leave_summary_sent +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__last_hr_leave_summary_sent +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__last_hr_leave_summary_sent +msgid "Last Leave Summary Email Sent" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings____last_update +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__hr_leave_summary_type +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__hr_leave_summary_type +msgid "Leave Summary Email" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__hr_holidays_summary_weekly_dow +#: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__hr_holidays_summary_weekly_dow +msgid "Leave Weekly Summary Day of Week" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.actions.server,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email_ir_actions_server +#: model:ir.cron,cron_name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email +#: model:ir.cron,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email +msgid "Leaves Summary Email" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__0 +msgid "Monday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__no +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__no +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__no +msgid "No" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__5 +msgid "Saturday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form +msgid "Sending Day Of Week" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__6 +msgid "Sunday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__3 +msgid "Thursday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_hr_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__1 +msgid "Tuesday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model,name:hr_holidays_summary_email.model_res_users +msgid "Users" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__2 +msgid "Wednesday" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__weekly +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__weekly +#: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__weekly +msgid "Weekly" +msgstr "" + +#. module: hr_holidays_summary_email +#: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly +msgid "Weekly Leaves Summary" +msgstr "" From b76f7fad3be56530e27cb2812ee83e7420e96dbf Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 27 Sep 2023 09:19:13 +0000 Subject: [PATCH 05/12] Translated using Weblate (Italian) Currently translated at 100.0% (29 of 29 strings) Translation: hr-holidays-14.0/hr-holidays-14.0-hr_holidays_summary_email Translate-URL: https://translation.odoo-community.org/projects/hr-holidays-14-0/hr-holidays-14-0-hr_holidays_summary_email/it/ --- hr_holidays_summary_email/i18n/it.po | 131 +++++++++++++++++++++------ 1 file changed, 104 insertions(+), 27 deletions(-) diff --git a/hr_holidays_summary_email/i18n/it.po b/hr_holidays_summary_email/i18n/it.po index 4ef830d8..2ccd7b97 100644 --- a/hr_holidays_summary_email/i18n/it.po +++ b/hr_holidays_summary_email/i18n/it.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-09-29 08:00+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: hr_holidays_summary_email #: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly @@ -44,6 +46,43 @@ msgid "" "
\n" " " msgstr "" +"
\n" +"

Spettabile ${object.name},

\n" +"
\n" +"

questo è il riepilogo dei permessi di questa " +"settimana:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
DipendenteTempo assenzaDaA
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " #. module: hr_holidays_summary_email #: model:mail.template,body_html:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily @@ -75,43 +114,81 @@ msgid "" "
\n" " " msgstr "" +"
\n" +"

Spetabile ${object.name},

\n" +"
\n" +"

questo è il ripilogo dei permessi odierni:

\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % set timeoffs = ctx.get('time_offs', False)\n" +" % for data in timeoffs\n" +" % set d_from = data.format_hr_leave_summary_date()\n" +" % set d_to = data.format_hr_leave_summary_date(False)" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" % endfor\n" +"
DipndenteTempo assenzaDaA
${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" +"
\n" +" " #. module: hr_holidays_summary_email #: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form msgid "Weekly Leaves Summary" -msgstr "" +msgstr "Riepilogo permessi settimanali" #. module: hr_holidays_summary_email #: model:ir.model,name:hr_holidays_summary_email.model_hr_employee_base msgid "Basic Employee" -msgstr "" +msgstr "Dipendente base" #. module: hr_holidays_summary_email #: model:ir.model,name:hr_holidays_summary_email.model_res_company msgid "Companies" -msgstr "" +msgstr "Aziende" #. module: hr_holidays_summary_email #: model:ir.model,name:hr_holidays_summary_email.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Impostazioni configurazione" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__daily #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__daily #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__daily msgid "Daily" -msgstr "" +msgstr "Giornaliero" #. module: hr_holidays_summary_email #: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_daily msgid "Daily Leaves Summary" -msgstr "" +msgstr "Riepilogo permessi giornaliero" #. module: hr_holidays_summary_email #: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form msgid "Day of week when the weekly leaves summary is sent." msgstr "" +"Girno della settimana in cui viene spedito il riepilogo dei permessi " +"settimanali." #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__display_name @@ -120,12 +197,12 @@ msgstr "" #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__display_name #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__4 msgid "Friday" -msgstr "" +msgstr "Venerdì" #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__id @@ -134,14 +211,14 @@ msgstr "" #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__id #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__id msgid "ID" -msgstr "" +msgstr "ID" #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__last_hr_leave_summary_sent #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base__last_hr_leave_summary_sent #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__last_hr_leave_summary_sent msgid "Last Leave Summary Email Sent" -msgstr "" +msgstr "Ultima e-mail ripilogo permesso inviata" #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_base____last_update @@ -150,7 +227,7 @@ msgstr "" #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings____last_update #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee__hr_leave_summary_type @@ -158,81 +235,81 @@ msgstr "" #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_hr_employee_public__hr_leave_summary_type #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_users__hr_leave_summary_type msgid "Leave Summary Email" -msgstr "" +msgstr "E-mail riepilogo permesso" #. module: hr_holidays_summary_email #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_company__hr_holidays_summary_weekly_dow #: model:ir.model.fields,field_description:hr_holidays_summary_email.field_res_config_settings__hr_holidays_summary_weekly_dow msgid "Leave Weekly Summary Day of Week" -msgstr "" +msgstr "Giorno della settimana riepilogo settimanale permesso" #. module: hr_holidays_summary_email #: model:ir.actions.server,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email_ir_actions_server #: model:ir.cron,cron_name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email #: model:ir.cron,name:hr_holidays_summary_email.ir_cron_hr_holidays_summary_email msgid "Leaves Summary Email" -msgstr "" +msgstr "E-mail riepilogo permessi" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__0 msgid "Monday" -msgstr "" +msgstr "Lunedì" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__no #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__no #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__no msgid "No" -msgstr "" +msgstr "No" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__5 msgid "Saturday" -msgstr "" +msgstr "Sabato" #. module: hr_holidays_summary_email #: model_terms:ir.ui.view,arch_db:hr_holidays_summary_email.res_config_settings_view_form msgid "Sending Day Of Week" -msgstr "" +msgstr "Giorno della settimana spedizione" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__6 msgid "Sunday" -msgstr "" +msgstr "Domenica" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__3 msgid "Thursday" -msgstr "" +msgstr "Giovedì" #. module: hr_holidays_summary_email #: model:ir.model,name:hr_holidays_summary_email.model_hr_leave msgid "Time Off" -msgstr "" +msgstr "Ferie" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__1 msgid "Tuesday" -msgstr "" +msgstr "Martedì" #. module: hr_holidays_summary_email #: model:ir.model,name:hr_holidays_summary_email.model_res_users msgid "Users" -msgstr "" +msgstr "Utenti" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__res_company__hr_holidays_summary_weekly_dow__2 msgid "Wednesday" -msgstr "" +msgstr "Mercoledì" #. module: hr_holidays_summary_email #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee__hr_leave_summary_type__weekly #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_base__hr_leave_summary_type__weekly #: model:ir.model.fields.selection,name:hr_holidays_summary_email.selection__hr_employee_public__hr_leave_summary_type__weekly msgid "Weekly" -msgstr "" +msgstr "Settimanale" #. module: hr_holidays_summary_email #: model:mail.template,subject:hr_holidays_summary_email.hr_holidays_summary_mail_template_weekly msgid "Weekly Leaves Summary" -msgstr "" +msgstr "Riepilogo permessi settimanale" From 23c5f1cc21dadd2325b01e03e382a4270168e221 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 10 Oct 2023 01:49:21 +0000 Subject: [PATCH 06/12] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: hr-holidays-14.0/hr-holidays-14.0-hr_holidays_summary_email Translate-URL: https://translation.odoo-community.org/projects/hr-holidays-14-0/hr-holidays-14-0-hr_holidays_summary_email/ --- hr_holidays_summary_email/i18n/it.po | 68 ++++++++++++++++++---------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/hr_holidays_summary_email/i18n/it.po b/hr_holidays_summary_email/i18n/it.po index 2ccd7b97..7ab1bdd4 100644 --- a/hr_holidays_summary_email/i18n/it.po +++ b/hr_holidays_summary_email/i18n/it.po @@ -24,22 +24,32 @@ msgid "" "
\n" "

This is the leaves summary for this week:

\n" "
\n" -" \n" +"
\n" " \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +" \n" " \n" " % set timeoffs = ctx.get('time_offs', False)\n" " % for data in timeoffs\n" " % set d_from = data.format_hr_leave_summary_date()\n" -" % set d_to = data.format_hr_leave_summary_date(False)\n" +" % set d_to = data." +"format_hr_leave_summary_date(False)\n" " \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +" \n" " \n" " % endfor\n" "
EmployeeTime OffFromToEmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" @@ -67,8 +77,8 @@ msgstr "" " % set timeoffs = ctx.get('time_offs', False)\n" " % for data in timeoffs\n" " % set d_from = data.format_hr_leave_summary_date()\n" -" % set d_to = data.format_hr_leave_summary_date(False)" -"\n" +" % set d_to = data." +"format_hr_leave_summary_date(False)\n" " \n" " ${data.employee_id.name}\n" @@ -92,22 +102,32 @@ msgid "" "
\n" "

This is today's leave summary:

\n" "
\n" -" \n" +"
\n" " \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +" \n" " \n" " % set timeoffs = ctx.get('time_offs', False)\n" " % for data in timeoffs\n" " % set d_from = data.format_hr_leave_summary_date()\n" -" % set d_to = data.format_hr_leave_summary_date(False)\n" +" % set d_to = data." +"format_hr_leave_summary_date(False)\n" " \n" -" \n" -" \n" -" \n" -" \n" +" \n" +" \n" +" \n" +" \n" " \n" " % endfor\n" "
EmployeeTime OffFromToEmployeeTime OffFromTo
${data.employee_id.name}${data.name or ''}${d_from}${d_to}${data.employee_id.name}${data.name or ''}${d_from}${d_to}
\n" @@ -134,8 +154,8 @@ msgstr "" " % set timeoffs = ctx.get('time_offs', False)\n" " % for data in timeoffs\n" " % set d_from = data.format_hr_leave_summary_date()\n" -" % set d_to = data.format_hr_leave_summary_date(False)" -"\n" +" % set d_to = data." +"format_hr_leave_summary_date(False)\n" " \n" " ${data.employee_id.name}\n" From e13a8239e576ece765d30d0885e6bcaefb0b6100 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Sat, 28 Oct 2023 08:38:34 +0200 Subject: [PATCH 07/12] *: Fix linters --- .../data/mail_template_data.xml | 68 +++++++++---------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/hr_holidays_summary_email/data/mail_template_data.xml b/hr_holidays_summary_email/data/mail_template_data.xml index 72840431..a5fb8200 100644 --- a/hr_holidays_summary_email/data/mail_template_data.xml +++ b/hr_holidays_summary_email/data/mail_template_data.xml @@ -1,14 +1,13 @@ - - + Leaves Summary: Daily Daily Leaves Summary ${object.work_email | safe} ${object.company_id.partner_id.email_formatted | safe} + name="email_from" + >${object.company_id.partner_id.email_formatted | safe}

Dear ${object.name},

@@ -16,15 +15,15 @@

This is today's leave summary:


+ style="border-spacing: 0; border-collapse: collapse; width: 100%; text-align: center;" + > + style="padding: 5px; border: 1px solid black;" + >Employee + style="padding: 5px; border: 1px solid black;" + >Time Off @@ -34,17 +33,17 @@ % set d_to = data.format_hr_leave_summary_date(False) + style="padding: 5px; border: 1px solid black;" + >${data.employee_id.name} + style="padding: 5px; border: 1px solid black;" + >${data.name or ''} + style="padding: 5px; border: 1px solid black;" + >${d_from} + style="padding: 5px; border: 1px solid black;" + >${d_to} % endfor
Employee Time Off From To
${data.employee_id.name} ${data.name or ''} ${d_from} ${d_to}
@@ -59,8 +58,8 @@ Weekly Leaves Summary ${object.work_email | safe} ${object.company_id.partner_id.email_formatted | safe} + name="email_from" + >${object.company_id.partner_id.email_formatted | safe}

Dear ${object.name},

@@ -68,15 +67,15 @@

This is the leaves summary for this week:


+ style="border-spacing: 0; border-collapse: collapse; width: 100%; text-align: center;" + > + style="padding: 5px; border: 1px solid black;" + >Employee + style="padding: 5px; border: 1px solid black;" + >Time Off @@ -86,17 +85,17 @@ % set d_to = data.format_hr_leave_summary_date(False) + style="padding: 5px; border: 1px solid black;" + >${data.employee_id.name} + style="padding: 5px; border: 1px solid black;" + >${data.name or ''} + style="padding: 5px; border: 1px solid black;" + >${d_from} + style="padding: 5px; border: 1px solid black;" + >${d_to} % endfor
Employee Time Off From To
${data.employee_id.name} ${data.name or ''} ${d_from} ${d_to}
@@ -105,5 +104,4 @@ ${object.lang} - From f09e11b433c31720aeaf3422e2ce649514529e42 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 28 Oct 2023 07:02:03 +0000 Subject: [PATCH 08/12] [BOT] post-merge updates --- hr_holidays_summary_email/README.rst | 2 +- hr_holidays_summary_email/__manifest__.py | 2 +- hr_holidays_summary_email/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hr_holidays_summary_email/README.rst b/hr_holidays_summary_email/README.rst index 50c5dba3..c0b8988e 100644 --- a/hr_holidays_summary_email/README.rst +++ b/hr_holidays_summary_email/README.rst @@ -7,7 +7,7 @@ Holidays Summary Email !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b059b061e7275ac9595e7bf51c4d3a3e139eea53d3beb76c870af9450291c914 + !! source digest: sha256:5b86ab27fe5fce4b3f08db41d6887306ca1857a3fdbf1ee3034d5da210aaf1ea !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/hr_holidays_summary_email/__manifest__.py b/hr_holidays_summary_email/__manifest__.py index 676dcd2f..b647012a 100644 --- a/hr_holidays_summary_email/__manifest__.py +++ b/hr_holidays_summary_email/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Notify employees with daily or weekly leaves summaries of their company. """, - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "category": "Human Resources", "website": "https://github.com/OCA/hr-holidays", "author": "ForgeFlow, Odoo Community Association (OCA)", diff --git a/hr_holidays_summary_email/static/description/index.html b/hr_holidays_summary_email/static/description/index.html index 6696a3c6..85319532 100644 --- a/hr_holidays_summary_email/static/description/index.html +++ b/hr_holidays_summary_email/static/description/index.html @@ -367,7 +367,7 @@

Holidays Summary Email

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b059b061e7275ac9595e7bf51c4d3a3e139eea53d3beb76c870af9450291c914 +!! source digest: sha256:5b86ab27fe5fce4b3f08db41d6887306ca1857a3fdbf1ee3034d5da210aaf1ea !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

This module allows sending a daily/weekly email to employees with a summary From 75692d11ad40043e6ae6e410020c691a83fb7bf0 Mon Sep 17 00:00:00 2001 From: JordiMForgeFlow Date: Tue, 20 Feb 2024 10:22:31 +0100 Subject: [PATCH 09/12] [FIX] hr_holidays_summary_email: allow users to self edit setting --- hr_holidays_summary_email/models/res_users.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hr_holidays_summary_email/models/res_users.py b/hr_holidays_summary_email/models/res_users.py index f44c4998..02854fd2 100644 --- a/hr_holidays_summary_email/models/res_users.py +++ b/hr_holidays_summary_email/models/res_users.py @@ -9,3 +9,17 @@ class ResUser(models.Model): hr_leave_summary_type = fields.Selection( related="employee_id.hr_leave_summary_type", readonly=False, related_sudo=False ) + + def __init__(self, pool, cr): + """Override of __init__ to add access rights. + Access rights are disabled by default, but allowed + on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + super(ResUser, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = type(self).SELF_READABLE_FIELDS + [ + "hr_leave_summary_type" + ] + type(self).SELF_WRITEABLE_FIELDS = type(self).SELF_WRITEABLE_FIELDS + [ + "hr_leave_summary_type" + ] From 98994f811b88cfad24c62c40da8dc6ab91b41a69 Mon Sep 17 00:00:00 2001 From: JordiMForgeFlow Date: Tue, 20 Feb 2024 14:40:58 +0100 Subject: [PATCH 10/12] [MIG] hr_holidays_summary_email: Migration to 15.0 --- hr_holidays_summary_email/README.rst | 12 +- hr_holidays_summary_email/__manifest__.py | 2 +- .../data/mail_template_data.xml | 104 ++++++++++-------- hr_holidays_summary_email/models/res_users.py | 20 ++-- .../static/description/index.html | 8 +- .../tests/test_hr_leave_summary_email.py | 33 +++--- 6 files changed, 93 insertions(+), 86 deletions(-) diff --git a/hr_holidays_summary_email/README.rst b/hr_holidays_summary_email/README.rst index c0b8988e..d7c5f6a9 100644 --- a/hr_holidays_summary_email/README.rst +++ b/hr_holidays_summary_email/README.rst @@ -7,7 +7,7 @@ Holidays Summary Email !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5b86ab27fe5fce4b3f08db41d6887306ca1857a3fdbf1ee3034d5da210aaf1ea + !! source digest: sha256:f1265d7ee3d6a0e55298f1e6c7e6d29492327378e1ebde255497ef87ac4b3dd9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -17,13 +17,13 @@ Holidays Summary Email :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github - :target: https://github.com/OCA/hr-holidays/tree/14.0/hr_holidays_summary_email + :target: https://github.com/OCA/hr-holidays/tree/15.0/hr_holidays_summary_email :alt: OCA/hr-holidays .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/hr-holidays-14-0/hr-holidays-14-0-hr_holidays_summary_email + :target: https://translation.odoo-community.org/projects/hr-holidays-15-0/hr-holidays-15-0-hr_holidays_summary_email :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=15.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -55,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. 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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -95,6 +95,6 @@ Current `maintainer `__: |maintainer-JordiMForgeFlow| -This module is part of the `OCA/hr-holidays `_ project on GitHub. +This module is part of the `OCA/hr-holidays `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_holidays_summary_email/__manifest__.py b/hr_holidays_summary_email/__manifest__.py index b647012a..facc635c 100644 --- a/hr_holidays_summary_email/__manifest__.py +++ b/hr_holidays_summary_email/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Notify employees with daily or weekly leaves summaries of their company. """, - "version": "14.0.1.0.1", + "version": "15.0.1.0.0", "category": "Human Resources", "website": "https://github.com/OCA/hr-holidays", "author": "ForgeFlow, Odoo Community Association (OCA)", diff --git a/hr_holidays_summary_email/data/mail_template_data.xml b/hr_holidays_summary_email/data/mail_template_data.xml index a5fb8200..876da150 100644 --- a/hr_holidays_summary_email/data/mail_template_data.xml +++ b/hr_holidays_summary_email/data/mail_template_data.xml @@ -4,13 +4,13 @@ Leaves Summary: Daily Daily Leaves Summary - ${object.work_email | safe} + {{object.work_email}} ${object.company_id.partner_id.email_formatted | safe} + >{{object.company_id.partner_id.email_formatted}}

-

Dear ${object.name},

+

Dear ,


This is today's leave summary:


@@ -27,42 +27,48 @@ From To - % set timeoffs = ctx.get('time_offs', False) - % for data in timeoffs - % set d_from = data.format_hr_leave_summary_date() - % set d_to = data.format_hr_leave_summary_date(False) - - ${data.employee_id.name} - ${data.name or ''} - ${d_from} - ${d_to} - - % endfor + + + + + + + + + + +
- ${object.lang} + {{object.lang}} Leaves Summary: Weekly Weekly Leaves Summary - ${object.work_email | safe} + {{object.work_email}} ${object.company_id.partner_id.email_formatted | safe} + >{{object.company_id.partner_id.email_formatted}}
-

Dear ${object.name},

+

Dear ,


This is the leaves summary for this week:


@@ -79,29 +85,35 @@ From To - % set timeoffs = ctx.get('time_offs', False) - % for data in timeoffs - % set d_from = data.format_hr_leave_summary_date() - % set d_to = data.format_hr_leave_summary_date(False) - - ${data.employee_id.name} - ${data.name or ''} - ${d_from} - ${d_to} - - % endfor + + + + + + + + + + +
- ${object.lang} + {{object.lang}}
diff --git a/hr_holidays_summary_email/models/res_users.py b/hr_holidays_summary_email/models/res_users.py index 02854fd2..18843d5f 100644 --- a/hr_holidays_summary_email/models/res_users.py +++ b/hr_holidays_summary_email/models/res_users.py @@ -10,16 +10,10 @@ class ResUser(models.Model): related="employee_id.hr_leave_summary_type", readonly=False, related_sudo=False ) - def __init__(self, pool, cr): - """Override of __init__ to add access rights. - Access rights are disabled by default, but allowed - on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. - """ - super(ResUser, self).__init__(pool, cr) - # duplicate list to avoid modifying the original reference - type(self).SELF_READABLE_FIELDS = type(self).SELF_READABLE_FIELDS + [ - "hr_leave_summary_type" - ] - type(self).SELF_WRITEABLE_FIELDS = type(self).SELF_WRITEABLE_FIELDS + [ - "hr_leave_summary_type" - ] + @property + def SELF_READABLE_FIELDS(self): + return super().SELF_READABLE_FIELDS + ["hr_leave_summary_type"] + + @property + def SELF_WRITEABLE_FIELDS(self): + return super().SELF_WRITEABLE_FIELDS + ["hr_leave_summary_type"] diff --git a/hr_holidays_summary_email/static/description/index.html b/hr_holidays_summary_email/static/description/index.html index 85319532..c4ec7e48 100644 --- a/hr_holidays_summary_email/static/description/index.html +++ b/hr_holidays_summary_email/static/description/index.html @@ -367,9 +367,9 @@

Holidays Summary Email

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5b86ab27fe5fce4b3f08db41d6887306ca1857a3fdbf1ee3034d5da210aaf1ea +!! source digest: sha256:f1265d7ee3d6a0e55298f1e6c7e6d29492327378e1ebde255497ef87ac4b3dd9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

This module allows sending a daily/weekly email to employees with a summary of the leaves on that period of other employees in the same company.

Table of contents

@@ -402,7 +402,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. 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 -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -434,7 +434,7 @@

Maintainers

promote its widespread use.

Current maintainer:

JordiMForgeFlow

-

This module is part of the OCA/hr-holidays project on GitHub.

+

This module is part of the OCA/hr-holidays project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py index 68546be8..b1052a65 100644 --- a/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py +++ b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py @@ -7,22 +7,23 @@ from odoo.tests import common -class TestHrLeaveSummaryEmail(common.TransactionCase): - def setUp(self): - super().setUp() - self.HrLeave = self.env["hr.leave"] - leave_type = self.env.ref("hr_holidays.hr_holiday_status_dv") +class TestHrLeaveSummaryEmail(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.HrLeave = cls.env["hr.leave"] + leave_type = cls.env.ref("hr_holidays.hr_holiday_status_dv") # Add allocation days for the test - leave_type.write({"allocation_type": "no"}) - calendar = self.env.ref("resource.resource_calendar_std") - partner = self.env["res.partner"].create( + leave_type.write({"requires_allocation": "no"}) + calendar = cls.env.ref("resource.resource_calendar_std") + partner = cls.env["res.partner"].create( { "name": "Test employee", "type": "private", - "country_id": self.env.ref("base.es").id, + "country_id": cls.env.ref("base.es").id, } ) - self.employee = self.env["hr.employee"].create( + cls.employee = cls.env["hr.employee"].create( { "name": "Test employee", "address_home_id": partner.id, @@ -30,13 +31,13 @@ def setUp(self): } ) # Today leave - self.leave_1 = ( - self.env["hr.leave"] + cls.leave_1 = ( + cls.env["hr.leave"] .with_context(leave_skip_state_check=True) .create( { "name": "Test 1", - "employee_id": self.employee.id, + "employee_id": cls.employee.id, "holiday_status_id": leave_type.id, "date_from": datetime.today(), "date_to": (datetime.today() + relativedelta(days=1)), @@ -47,13 +48,13 @@ def setUp(self): ) # Week leave - self.leave_2 = ( - self.env["hr.leave"] + cls.leave_2 = ( + cls.env["hr.leave"] .with_context(leave_skip_state_check=True) .create( { "name": "Test 2", - "employee_id": self.employee.id, + "employee_id": cls.employee.id, "holiday_status_id": leave_type.id, "date_from": (datetime.today() + relativedelta(days=3)), "date_to": (datetime.today() + relativedelta(days=5)), From 9ce8ca8267245a91223f5b64b890f2aacc748366 Mon Sep 17 00:00:00 2001 From: JasminSForgeFlow Date: Fri, 24 May 2024 15:39:44 +0530 Subject: [PATCH 11/12] [IMP] hr_holidays_summary_email: black, isort, prettier --- .../odoo/addons/hr_holidays_summary_email | 1 + setup/hr_holidays_summary_email/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/hr_holidays_summary_email/odoo/addons/hr_holidays_summary_email create mode 100644 setup/hr_holidays_summary_email/setup.py diff --git a/setup/hr_holidays_summary_email/odoo/addons/hr_holidays_summary_email b/setup/hr_holidays_summary_email/odoo/addons/hr_holidays_summary_email new file mode 120000 index 00000000..b9afd1aa --- /dev/null +++ b/setup/hr_holidays_summary_email/odoo/addons/hr_holidays_summary_email @@ -0,0 +1 @@ +../../../../hr_holidays_summary_email \ No newline at end of file diff --git a/setup/hr_holidays_summary_email/setup.py b/setup/hr_holidays_summary_email/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/hr_holidays_summary_email/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 6a045cc54a6dc34fe66260869eb8ae5ac898eef3 Mon Sep 17 00:00:00 2001 From: JasminSForgeFlow Date: Fri, 24 May 2024 17:32:42 +0530 Subject: [PATCH 12/12] [MIG] hr_holidays_summary_email: Migration to 16.0 --- hr_holidays_summary_email/README.rst | 10 +++++----- hr_holidays_summary_email/__manifest__.py | 2 +- .../static/description/index.html | 18 ++++++++++-------- .../tests/test_hr_leave_summary_email.py | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/hr_holidays_summary_email/README.rst b/hr_holidays_summary_email/README.rst index d7c5f6a9..6e85521b 100644 --- a/hr_holidays_summary_email/README.rst +++ b/hr_holidays_summary_email/README.rst @@ -17,13 +17,13 @@ Holidays Summary Email :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github - :target: https://github.com/OCA/hr-holidays/tree/15.0/hr_holidays_summary_email + :target: https://github.com/OCA/hr-holidays/tree/16.0/hr_holidays_summary_email :alt: OCA/hr-holidays .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/hr-holidays-15-0/hr-holidays-15-0-hr_holidays_summary_email + :target: https://translation.odoo-community.org/projects/hr-holidays-16-0/hr-holidays-16-0-hr_holidays_summary_email :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -55,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. 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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -95,6 +95,6 @@ Current `maintainer `__: |maintainer-JordiMForgeFlow| -This module is part of the `OCA/hr-holidays `_ project on GitHub. +This module is part of the `OCA/hr-holidays `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_holidays_summary_email/__manifest__.py b/hr_holidays_summary_email/__manifest__.py index facc635c..029f1ecb 100644 --- a/hr_holidays_summary_email/__manifest__.py +++ b/hr_holidays_summary_email/__manifest__.py @@ -6,7 +6,7 @@ "summary": """ Notify employees with daily or weekly leaves summaries of their company. """, - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "category": "Human Resources", "website": "https://github.com/OCA/hr-holidays", "author": "ForgeFlow, Odoo Community Association (OCA)", diff --git a/hr_holidays_summary_email/static/description/index.html b/hr_holidays_summary_email/static/description/index.html index c4ec7e48..38e92bee 100644 --- a/hr_holidays_summary_email/static/description/index.html +++ b/hr_holidays_summary_email/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

Holidays Summary Email

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:f1265d7ee3d6a0e55298f1e6c7e6d29492327378e1ebde255497ef87ac4b3dd9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

This module allows sending a daily/weekly email to employees with a summary of the leaves on that period of other employees in the same company.

Table of contents

@@ -402,7 +402,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. 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 -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -428,13 +428,15 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

Current maintainer:

JordiMForgeFlow

-

This module is part of the OCA/hr-holidays project on GitHub.

+

This module is part of the OCA/hr-holidays project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py index b1052a65..d3ed75c2 100644 --- a/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py +++ b/hr_holidays_summary_email/tests/test_hr_leave_summary_email.py @@ -7,7 +7,7 @@ from odoo.tests import common -class TestHrLeaveSummaryEmail(common.SavepointCase): +class TestHrLeaveSummaryEmail(common.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass()