diff --git a/hr_expense_advance_overdue_reminder/README.rst b/hr_expense_advance_overdue_reminder/README.rst new file mode 100644 index 000000000..4711524c3 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/README.rst @@ -0,0 +1,140 @@ +================================= +Employee Advance Overdue Reminder +================================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c96c66abf06db30bcb2a9dd927d308f497b92cb708514c425342b2255185dcd5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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--expense-lightgray.png?logo=github + :target: https://github.com/OCA/hr-expense/tree/18.0/hr_expense_advance_overdue_reminder + :alt: OCA/hr-expense +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/hr-expense-18-0/hr-expense-18-0-hr_expense_advance_overdue_reminder + :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-expense&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allow company to send overdue advance reminders to the +employee. it sends a reminder for an expense advance when it has past +it's *Due Date* An overdue reminder for a employee always include all +the overdue advance an amount of that employee. + +The module supports a clever expense reimbursement reminder counter +mechanism: + +- the reminder counter is a property of an expense advance, +- the reminder counter of each overdue expense advance is incremented + every time when you sending a reminder by email / letter. +- in an email template, you can configure at *Settings > Technical > + Email > Email Templates > Name 'Advance: Overdue Reminder'* + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +1. Go to *Expenses > Configuration > Reminder Definition*. +2. Set reminder definition. +3. Specify the time period for the set due date clearing advance. This + field is Terms Due Date has default 30 days and it will compute due + date by today + Terms Due Date, when you Post Journal Entries on + expense sheet. +4. Specify other fields (if any) + +Usage +===== + +**This module has the following steps to use:** + +1. Create an advance document and submit it to manager for approval. +2. Once approved, post the journal entries. +3. If the due date is not manually selected, it will be auto-generated + from the reminder settings. +4. Register Payment. + +**To check for overdue and uncleared advances:** + +1. Go to Expenses > Expense Reports > Reports to Overdue. +2. Select an advance that needs a reminder. +3. Click on Action > Overdue Reminder. +4. Verify the information and click the "Start" button to create an + overdue reminder. +5. It will generate a reminder only for the selected document. + +**To send a reminder to an employee:** + +1. Go to Expenses > Employee Overdue > Overdue Reminder +2. Select the document for which you need to send a reminder to the + employee. +3. Verify the information and Send or print the reminder to the + employee. + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Ecosoft + +Contributors +------------ + +- `Ecosoft `__: + + - Saran Lim. + - Pimolnat Suntian + +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-Saran440| image:: https://github.com/Saran440.png?size=40px + :target: https://github.com/Saran440 + :alt: Saran440 + +Current `maintainer `__: + +|maintainer-Saran440| + +This module is part of the `OCA/hr-expense `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_expense_advance_overdue_reminder/__init__.py b/hr_expense_advance_overdue_reminder/__init__.py new file mode 100644 index 000000000..69f7babdf --- /dev/null +++ b/hr_expense_advance_overdue_reminder/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/hr_expense_advance_overdue_reminder/__manifest__.py b/hr_expense_advance_overdue_reminder/__manifest__.py new file mode 100644 index 000000000..2494d3c80 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2023 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Employee Advance Overdue Reminder", + "version": "18.0.1.0.0", + "category": "Human Resources", + "author": "Ecosoft, Odoo Community Association (OCA)", + "license": "AGPL-3", + "summary": "Simple mail overdue employee advance reminder", + "website": "https://github.com/OCA/hr-expense", + "depends": [ + "hr_expense_advance_clearing_sequence", + ], + "data": [ + "security/ir.model.access.csv", + "data/mail_template.xml", + "data/sequence_data.xml", + "views/reminder_definition_view.xml", + "views/hr_expense_views.xml", + "views/hr_advance_overdue_view.xml", + ], + "installable": True, + "maintainers": ["Saran440"], +} diff --git a/hr_expense_advance_overdue_reminder/data/mail_template.xml b/hr_expense_advance_overdue_reminder/data/mail_template.xml new file mode 100644 index 000000000..c59a42392 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/data/mail_template.xml @@ -0,0 +1,100 @@ + + + + Advance: Overdue Reminder + + {{ object.company_id.name }} - Overdue advance reminder {{ object.name or 'n/a' }} + {{ (object.user_id.email_formatted or user.email_formatted or '') }} + {{ object.employee_work_email }} + +
+

+ Dear , +

+ According to our books, the following expense advance are overdue: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Expense NumberExpense NameDateDue DateTotal AmountResidual
+ + + + + + + + + + + +
+ + +
+

+

+ If you made a clearing for these advance a few days ago, please ignore this email. +

+ Regards,
+ +

+
+
+
+
diff --git a/hr_expense_advance_overdue_reminder/data/sequence_data.xml b/hr_expense_advance_overdue_reminder/data/sequence_data.xml new file mode 100644 index 000000000..36b941b77 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/data/sequence_data.xml @@ -0,0 +1,9 @@ + + + + Advance Overdue Reminder Sequence + advance.overdue.reminder.sequence + + EXOR + + diff --git a/hr_expense_advance_overdue_reminder/i18n/es.po b/hr_expense_advance_overdue_reminder/i18n/es.po new file mode 100644 index 000000000..af15a1f17 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/i18n/es.po @@ -0,0 +1,710 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_expense_advance_overdue_reminder +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-30 19:36+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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_expense_advance_overdue_reminder +#: model:mail.template,body_html:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"
\n" +"

\n" +" Dear ,\n" +"

\n" +" According to our books, the following expense advance are overdue:\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
Expense NumberExpense NameDateDue DateTotal AmountResidualPast Reminders
\n" +" \n" +"
\n" +" \n" +" \n" +" \n" +"
\n" +"

\n" +" If you made a clearing for these advance a few days ago, please ignore this email.\n" +"

\n" +" Regards,
\n" +" \n" +"

\n" +"
\n" +" " +msgstr "" +"
\n" +"

\n" +" Estimado ,\n" +"

\n" +" Según nuestros libros, los siguientes anticipos de gastos están " +"vencidos\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
Numero de " +"GastoNombre de " +"GastoFechaFecha de " +"VencimientoImporte " +"TotalResidualRecordatorios Pasados
\n" +" \n" +"
\n" +" \n" +" \n" +" \n" +"
\n" +"

\n" +" Si realizó una compensación por estos anticipos hace unos días, ignore " +"este correo electrónico.\n" +"

\n" +" Atentamente,
\n" +" \n" +"

\n" +"
\n" +" " + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Name" +msgstr "Nombre" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid " days" +msgstr " días" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +msgid "Action Needed" +msgstr "Necesita Acción" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Action Reminder" +msgstr "Acción Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__active +msgid "Active" +msgstr "Activo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_type_id +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Activity" +msgstr "Actividad" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_advance_overdue_reminder +msgid "Advance Overdue Reminder" +msgstr "Recordatorio de Vencimiento Anticipado" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,name:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "Advance: Overdue Reminder" +msgstr "Avance: Recordatorio de Vencimiento" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_user_id +msgid "Assigned to" +msgstr "Asignado/a a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_attachment_count +msgid "Attachment Count" +msgstr "Recuento de Archivos Adjuntos" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__cancel +msgid "Cancelled" +msgstr "Cancelado/a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__clearing_date_due +msgid "Clearing Due Date" +msgstr "Fecha de Vencimiento de Compensación" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "Clearing Terms" +msgstr "Términos de Compensación" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__company_id +msgid "Company" +msgstr "Compañía" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Compose Email" +msgstr "Componer Correo Electrónico" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "Create Activity" +msgstr "Crear Actividad" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Current Remind Counter" +msgstr "Contador de Recordatorio Actual" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__date +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Date" +msgstr "Fecha" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__name +msgid "Description" +msgstr "Descripción" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__done +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Done" +msgstr "Hecho" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__draft +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Draft" +msgstr "Borrador" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "E-mail" +msgstr "Correo Electrónico" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_email +msgid "Email" +msgstr "Correo Electrónico" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Asistente de redacción de correo electrónico" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_id +msgid "Employee" +msgstr "Empleado/a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_overdue +msgid "Employee Overdue" +msgstr "Empleado Vencido" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__employee_ids +msgid "Employee(s)" +msgstr "Empleado(s)" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_expense_sheet +msgid "Expense Report" +msgstr "Informe de Gastos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_expense_sheet_all_to_overdue +msgid "Expense Reports to Overdue" +msgstr "Informes de Gastos Vencidos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_follower_ids +msgid "Followers" +msgstr "Seguidores/as" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Socios)" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__has_message +msgid "Has Message" +msgstr "Tiene Mensaje" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder +msgid "Hr Advance Overdue Reminder" +msgstr "Recordatorio de Vencimiento Anticipado Hr" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "If checked, new messages require your attention." +msgstr "Si está marcado hay nuevos mensajes que requieren su atención." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcada, algunos mensajes tienen error de entrega." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "If set, system will be notified reminder next time." +msgstr "Si se establece, el sistema recibirá un recordatorio la próxima vez." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "" +"In case this field is configured, the system will help calculate Clearing " +"Date Due according to the term." +msgstr "" +"En caso de que este campo esté configurado, el sistema ayudará a calcular la " +"Fecha de Compensación Vencida según el plazo." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_is_follower +msgid "Is Follower" +msgstr "Es Seguidor/a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__is_overdue +msgid "Is Overdue" +msgstr "Está Vencido/a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Last Reminder" +msgstr "Último Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_last_date +msgid "Last Reminder Date" +msgstr "Fecha del Último Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_uid +msgid "Last Updated by" +msgstr "Última Actualización por" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "Letter" +msgstr "Carta" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__letter_report +msgid "Letter Report" +msgstr "Informe por Carta" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Letter report is not use in '{}'" +msgstr "El informe de carta no se utiliza en '{}'" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__mail_template_id +msgid "Mail Template" +msgstr "Plantilla de Correo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_main_attachment_id +msgid "Main Attachment" +msgstr "Archivo Adjunto Principal" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "Message Delivery error" +msgstr "Error en Entrega de Mensaje" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_base_reminder_mixin +msgid "Mixin used in base model that reminder" +msgstr "Mezclador utilizado en el modelo base que recuerda" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__name +msgid "Name" +msgstr "Nombre" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "New Advance Overdue" +msgstr "Nuevo Anticipo Vencido" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_next_time +msgid "Next Reminder" +msgstr "Siguiente Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__reminder_next_time +msgid "Next Reminder Date" +msgstr "Fecha del Próximo Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_note +msgid "Note" +msgstr "Nota" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de Acciones" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of errors" +msgstr "Número de errores" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Número de mensajes que requieren una acción" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error de entrega" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Number of unread messages" +msgstr "Número de mensajes sin leer" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Order Ref" +msgstr "Ref. Pedido" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__expense_sheet_ids +msgid "Overdue Expense Advance Sheet" +msgstr "Hoja de Anticipo de Gastos Vencidos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.server,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_server +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_advance_overdue_reminder_view +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.view_hr_expense_sheet_form +msgid "Overdue Reminder" +msgstr "Recordatorio Vencimiento" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_reminder +msgid "Overdue Reminder Action" +msgstr "Acción de Recordatorio de Vencimiento" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_ids +msgid "Overdue Reminder Action History" +msgstr "Historial de acción de Recordatorio de Vencimiento" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "Please configured reminder definition before Post Journal Entries" +msgstr "" +"Configure la definición de recordatorio antes de Publicar Entradas Diarias" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_type +msgid "Reminder" +msgstr "Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "Reminder Count" +msgstr "Conteo de Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.reminder_definition_action +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_reminder_definition +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_definition_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_definition_id +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_advance_overdue_setting +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Reminder Definition" +msgstr "Definición del Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_number +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_number +msgid "Reminder Every" +msgstr "Recordatorio Cada" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_next_time +msgid "Reminder Next Time" +msgstr "Recordatorio Para La Próxima Vez" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder_wizard +msgid "Reminder Overdue Advance" +msgstr "Recordatorio Anticipado de Vencimiento" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_type +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Reminder Type" +msgstr "Tipo de Recordatorio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_sheet_all_to_overdue +msgid "Reports to Overdue" +msgstr "Informes Vencidos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_scheduled_date +msgid "Scheduled Date" +msgstr "Fecha Prevista" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Send or Print" +msgstr "Enviar o Imprimir" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Start" +msgstr "Inicio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__state +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "State" +msgstr "Estado" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_summary +msgid "Summary" +msgstr "Resumen" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "This counter is increased when reminder." +msgstr "Este contador se incrementa al recordarlo." + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_expense_sheet_view_search +msgid "To Overdue" +msgstr "Atrasado" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Total" +msgstr "Total" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "Unread Messages" +msgstr "Mensajes no Leídos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Contador de Mensajes no Leídos" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__user_id +msgid "User" +msgstr "Usuario" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website Messages" +msgstr "Mensajes de la página Web" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website communication history" +msgstr "Historial de la comunicación en el sitio web" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You are attempting to delete a record that has already been sent." +msgstr "Está intentando borrar un registro que ya ha sido enviado." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You can not select clearing due date less than today." +msgstr "" +"No puede seleccionar una fecha de vencimiento de compensación inferior a hoy." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You can not sent email with address private contact." +msgstr "" +"No se puede enviar correo electrónico con la dirección de contacto privado." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You cannot remind this report." +msgstr "No puedes recordar este informe." + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "days" +msgstr "días" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,subject:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"{{ object.company_id.name }} - Overdue advance reminder {{ object.name or " +"'n/a' }}" +msgstr "" +"{{ object.company_id.name }} - Recordatorio anticipado de vencimiento {{ " +"object.name or 'n/a' }}" diff --git a/hr_expense_advance_overdue_reminder/i18n/hr_expense_advance_overdue_reminder.pot b/hr_expense_advance_overdue_reminder/i18n/hr_expense_advance_overdue_reminder.pot new file mode 100644 index 000000000..8892926a9 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/i18n/hr_expense_advance_overdue_reminder.pot @@ -0,0 +1,638 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_expense_advance_overdue_reminder +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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_expense_advance_overdue_reminder +#: model:mail.template,body_html:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"
\n" +"

\n" +" Dear ,\n" +"

\n" +" According to our books, the following expense advance are overdue:\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
Expense NumberExpense NameDateDue DateTotal AmountResidualPast Reminders
\n" +" \n" +"
\n" +" \n" +" \n" +" \n" +"
\n" +"

\n" +" If you made a clearing for these advance a few days ago, please ignore this email.\n" +"

\n" +" Regards,
\n" +" \n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Name" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid " days" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Action Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__active +msgid "Active" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_type_id +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Activity" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_advance_overdue_reminder +msgid "Advance Overdue Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,name:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "Advance: Overdue Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_user_id +msgid "Assigned to" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Cancel" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__clearing_date_due +msgid "Clearing Due Date" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "Clearing Terms" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__company_id +msgid "Company" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Compose Email" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "Create Activity" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_uid +msgid "Created by" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_date +msgid "Created on" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Current Remind Counter" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__date +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Date" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__name +msgid "Description" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__done +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Done" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__draft +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Draft" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "E-mail" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_email +msgid "Email" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_id +msgid "Employee" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_overdue +msgid "Employee Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__employee_ids +msgid "Employee(s)" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_expense_sheet +msgid "Expense Report" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_expense_sheet_all_to_overdue +msgid "Expense Reports to Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__has_message +msgid "Has Message" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder +msgid "Hr Advance Overdue Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__id +msgid "ID" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "If set, system will be notified reminder next time." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "" +"In case this field is configured, the system will help calculate Clearing " +"Date Due according to the term." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__is_overdue +msgid "Is Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Last Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_last_date +msgid "Last Reminder Date" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_date +msgid "Last Updated on" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "Letter" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__letter_report +msgid "Letter Report" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Letter report is not use in '{}'" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__mail_template_id +msgid "Mail Template" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_ids +msgid "Messages" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_base_reminder_mixin +msgid "Mixin used in base model that reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__name +msgid "Name" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "New Advance Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_next_time +msgid "Next Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__reminder_next_time +msgid "Next Reminder Date" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_note +msgid "Note" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Order Ref" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__expense_sheet_ids +msgid "Overdue Expense Advance Sheet" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.server,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_server +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_advance_overdue_reminder_view +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.view_hr_expense_sheet_form +msgid "Overdue Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_reminder +msgid "Overdue Reminder Action" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_ids +msgid "Overdue Reminder Action History" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "Please configured reminder definition before Post Journal Entries" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_type +msgid "Reminder" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "Reminder Count" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.reminder_definition_action +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_reminder_definition +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_definition_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_definition_id +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_advance_overdue_setting +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Reminder Definition" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_number +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_number +msgid "Reminder Every" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_next_time +msgid "Reminder Next Time" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder_wizard +msgid "Reminder Overdue Advance" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_type +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Reminder Type" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_sheet_all_to_overdue +msgid "Reports to Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_scheduled_date +msgid "Scheduled Date" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Send or Print" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Start" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__state +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "State" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_summary +msgid "Summary" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "This counter is increased when reminder." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_expense_sheet_view_search +msgid "To Overdue" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Total" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__user_id +msgid "User" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You are attempting to delete a record that has already been sent." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You can not select clearing due date less than today." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You can not sent email with address private contact." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You cannot remind this report." +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "days" +msgstr "" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,subject:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"{{ object.company_id.name }} - Overdue advance reminder {{ object.name or " +"'n/a' }}" +msgstr "" diff --git a/hr_expense_advance_overdue_reminder/i18n/it.po b/hr_expense_advance_overdue_reminder/i18n/it.po new file mode 100644 index 000000000..ab4295298 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/i18n/it.po @@ -0,0 +1,726 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_expense_advance_overdue_reminder +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-25 16:34+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_expense_advance_overdue_reminder +#: model:mail.template,body_html:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"
\n" +"

\n" +" Dear ,\n" +"

\n" +" According to our books, the following expense advance are overdue:\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
Expense " +"NumberExpense " +"NameDateDue Date\n" +" Total " +"AmountResidual\n" +" Past " +"Reminders
\n" +" \n" +"
\n" +" \n" +" \n" +" \n" +"
\n" +"

\n" +" If you made a clearing for these advance a few days ago, please ignore " +"this email.\n" +"

\n" +" Regards,
\n" +" \n" +"

\n" +"
\n" +" " +msgstr "" +"
\n" +"

\n" +" Spettabile ,\n" +"

\n" +" in base ai nostri registri, i seguenti anticipi spese sono scaduti:\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +"
Spesa " +"numeroNome spesa\n" +" DataScadenza\n" +" Valore " +"totaleResiduo\n" +" Promemoria " +"precedenti
\n" +" \n" +"
\n" +" \n" +" \n" +" \n" +"
\n" +"

\n" +" Se ha saldato questi anticipi qualche giorno fa, ignori questa email.\n" +"

\n" +" Cordialmente,
\n" +" \n" +"

\n" +"
\n" +" " + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Name" +msgstr "Nome" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid " days" +msgstr " giorni" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Action Reminder" +msgstr "Promemoria azione" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__active +msgid "Active" +msgstr "Attivo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_type_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_type_id +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Activity" +msgstr "Attività" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_advance_overdue_reminder +msgid "Advance Overdue Reminder" +msgstr "Promemoria scadenza anticipo" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,name:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "Advance: Overdue Reminder" +msgstr "Avanza: promemoria scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_user_id +msgid "Assigned to" +msgstr "Assegnato a" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_attachment_count +msgid "Attachment Count" +msgstr "Conteggio allegati" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Cancel" +msgstr "Annulla" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__cancel +msgid "Cancelled" +msgstr "Annullato" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__clearing_date_due +msgid "Clearing Due Date" +msgstr "Annullamento data richiesta" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "Clearing Terms" +msgstr "Annullamento termini" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__company_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__company_id +msgid "Company" +msgstr "Azienda" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Compose Email" +msgstr "Componi e-mail" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_activity +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "Create Activity" +msgstr "Crea attività" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__create_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Current Remind Counter" +msgstr "Contatore sollecito corrente" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__date +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Date" +msgstr "Data" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__name +msgid "Description" +msgstr "Descrizione" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__display_name +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__done +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Done" +msgstr "Evaso" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields.selection,name:hr_expense_advance_overdue_reminder.selection__hr_advance_overdue_reminder__state__draft +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Draft" +msgstr "Bozza" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "E-mail" +msgstr "E-mail" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_email +msgid "Email" +msgstr "E-mail" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Procedura guidata creazione e-mail" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__employee_id +msgid "Employee" +msgstr "Dipendente" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_overdue +msgid "Employee Overdue" +msgstr "Scadenza dipendente" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__employee_ids +msgid "Employee(s)" +msgstr "Dipendente(i)" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_expense_sheet +msgid "Expense Report" +msgstr "Nota spese" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_expense_sheet_all_to_overdue +msgid "Expense Reports to Overdue" +msgstr "Nota spese alla scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__has_message +msgid "Has Message" +msgstr "Ha un messaggio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder +msgid "Hr Advance Overdue Reminder" +msgstr "Promemoria scadenza anticipo RU" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__id +msgid "ID" +msgstr "ID" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__create_activity +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__create_activity +msgid "If set, system will be notified reminder next time." +msgstr "Se impostata, il sistema avviserà con un promemoria la prossima volta." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_reminder_definition__clearing_terms_days +msgid "" +"In case this field is configured, the system will help calculate Clearing " +"Date Due according to the term." +msgstr "" +"Nel caso in cui questo campo sia configurato, il sistema aiuterà nel calcolo " +"della data scadenza saldo in accorto al termine." + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_is_follower +msgid "Is Follower" +msgstr "Segue" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__is_overdue +msgid "Is Overdue" +msgstr "È scaduta" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard____last_update +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Last Reminder" +msgstr "Ultimo promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_last_date +msgid "Last Reminder Date" +msgstr "Data ultimo promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_uid +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__write_date +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/base_reminder_mixin.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#: code:addons/hr_expense_advance_overdue_reminder/wizard/hr_advance_overdue_reminder_wizard.py:0 +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +#, python-format +msgid "Letter" +msgstr "Lettera" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__letter_report +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__letter_report +msgid "Letter Report" +msgstr "Resoconto lettera" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "Letter report is not use in '{}'" +msgstr "Il resoconto lettera non è utilizzato in '{}'" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__mail_template_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__mail_template_id +msgid "Mail Template" +msgstr "Modello e-mail" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_main_attachment_id +msgid "Main Attachment" +msgstr "Allegato principale" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_base_reminder_mixin +msgid "Mixin used in base model that reminder" +msgstr "Mixin utilizzato nel modello base del promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__name +msgid "Name" +msgstr "Nome" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "New Advance Overdue" +msgstr "Nuova scadenza anticipo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_next_time +msgid "Next Reminder" +msgstr "Promemoria successivo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__reminder_next_time +msgid "Next Reminder Date" +msgstr "Data promemoria successivo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_note +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_note +msgid "Note" +msgstr "Nota" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Number of unread messages" +msgstr "Numero di messaggi non letti" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Order Ref" +msgstr "Rif. ordine" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__expense_sheet_ids +msgid "Overdue Expense Advance Sheet" +msgstr "Foglio scadenza anticipo spese" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.server,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_server +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_advance_overdue_reminder_view +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.view_hr_expense_sheet_form +msgid "Overdue Reminder" +msgstr "Promemoria scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.action_hr_advance_overdue_reminder +msgid "Overdue Reminder Action" +msgstr "Azione per promemoria scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_ids +msgid "Overdue Reminder Action History" +msgstr "Storico azione promemoria scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "Please configured reminder definition before Post Journal Entries" +msgstr "" +"Configurare la definizione del promemoria prima di inserire registrazioni " +"contabili" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_type +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_type +msgid "Reminder" +msgstr "Promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "Reminder Count" +msgstr "Conteggio promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.actions.act_window,name:hr_expense_advance_overdue_reminder.reminder_definition_action +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_reminder_definition +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_definition_id +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_definition_id +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_advance_overdue_setting +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.reminder_definition_view_form +msgid "Reminder Definition" +msgstr "Definizione promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_number +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__reminder_number +msgid "Reminder Every" +msgstr "Promemoria ogni" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__reminder_next_time +msgid "Reminder Next Time" +msgstr "Prossima data promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model,name:hr_expense_advance_overdue_reminder.model_hr_advance_overdue_reminder_wizard +msgid "Reminder Overdue Advance" +msgstr "Promemoria scadenza anticipo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__reminder_type +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "Reminder Type" +msgstr "Tipo promemoria" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.ui.menu,name:hr_expense_advance_overdue_reminder.menu_hr_expense_sheet_all_to_overdue +msgid "Reports to Overdue" +msgstr "Resoconti alla scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_scheduled_date +msgid "Scheduled Date" +msgstr "Data schedulata" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Send or Print" +msgstr "Invia alla stampante" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "Start" +msgstr "Avvia" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__state +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_search +msgid "State" +msgstr "Stato" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_base_reminder_mixin__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder_wizard__activity_summary +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_reminder_definition__activity_summary +msgid "Summary" +msgstr "Riepilogo" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_expense_sheet__overdue_reminder_counter +msgid "This counter is increased when reminder." +msgstr "Questo contatore viene incrementato con il promemoria." + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_expense_sheet_view_search +msgid "To Overdue" +msgstr "Alla scadenza" + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.hr_advance_overdue_reminder_form +msgid "Total" +msgstr "Totale" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread +msgid "Unread Messages" +msgstr "Messaggi non letti" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Contatore messaggi non letti" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__user_id +msgid "User" +msgstr "Utente" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,field_description:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: hr_expense_advance_overdue_reminder +#: model:ir.model.fields,help:hr_expense_advance_overdue_reminder.field_hr_advance_overdue_reminder__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You are attempting to delete a record that has already been sent." +msgstr "Si sta cercando di eleiminare un record già inviato." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You can not select clearing due date less than today." +msgstr "Non si può selezionare una data richiesta saldo inferiore a oggi." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py:0 +#, python-format +msgid "You can not sent email with address private contact." +msgstr "Non si può inviare una e-mail con l'indirizzo privato del contatto." + +#. module: hr_expense_advance_overdue_reminder +#: code:addons/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py:0 +#, python-format +msgid "You cannot remind this report." +msgstr "Non si può associare il resoconto ad un promemoria." + +#. module: hr_expense_advance_overdue_reminder +#: model_terms:ir.ui.view,arch_db:hr_expense_advance_overdue_reminder.wizard_advance_overdue_reminder_form +msgid "days" +msgstr "giorni" + +#. module: hr_expense_advance_overdue_reminder +#: model:mail.template,subject:hr_expense_advance_overdue_reminder.email_template_overdue_reminder +msgid "" +"{{ object.company_id.name }} - Overdue advance reminder {{ object.name or 'n/" +"a' }}" +msgstr "" +"{{ object.company_id.name }} - Promemoria anticipo scadenza {{ object.name " +"or 'n/a' }}" + +#~ msgid "SMS Delivery error" +#~ msgstr "Errore consegna SMS" diff --git a/hr_expense_advance_overdue_reminder/models/__init__.py b/hr_expense_advance_overdue_reminder/models/__init__.py new file mode 100644 index 000000000..b9e152adc --- /dev/null +++ b/hr_expense_advance_overdue_reminder/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import reminder_definition +from . import hr_expense_sheet +from . import hr_advance_overdue_reminder diff --git a/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py b/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py new file mode 100644 index 000000000..a01f7843f --- /dev/null +++ b/hr_expense_advance_overdue_reminder/models/hr_advance_overdue_reminder.py @@ -0,0 +1,166 @@ +# Copyright 2023 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + + +from odoo import api, fields, models +from odoo.exceptions import UserError + + +class HrAdvanceOverdueReminder(models.Model): + _name = "hr.advance.overdue.reminder" + _inherit = ["mail.thread", "mail.activity.mixin"] + _description = "Hr Advance Overdue Reminder" + _order = "name desc" + + name = fields.Char(required=True, default="/", readonly=True, copy=False) + expense_sheet_ids = fields.Many2many( + comodel_name="hr.expense.sheet", + relation="expense_sheet_overdue_reminder_rel", + column1="overdue_reminder_id", + column2="expense_sheet_id", + string="Overdue Expense Advance Sheet", + ) + employee_id = fields.Many2one( + comodel_name="hr.employee", + required=True, + tracking=True, + ) + employee_work_email = fields.Char( + compute="_compute_employee_work_email", + store=True, + ) + user_id = fields.Many2one( + comodel_name="res.users", + default=lambda self: self.env.user, + tracking=True, + string="Responsible", + ) + date = fields.Date(default=fields.Date.context_today) + reminder_definition_id = fields.Many2one( + comodel_name="reminder.definition", + required=True, + ) + action_type = fields.Selection( + related="reminder_definition_id.action_type", + store=True, + ) + mail_template_id = fields.Many2one( + comodel_name="mail.template", + compute="_compute_mail_template", + store=True, + ) + is_warning_duplicate = fields.Boolean( + compute="_compute_is_warning_duplicate", + store=True, + ) + company_id = fields.Many2one( + comodel_name="res.company", + readonly=True, + required=True, + default=lambda self: self.env.company, + ) + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("submit", "Submit"), + ("done", "Done"), + ("cancel", "Cancelled"), + ], + default="draft", + readonly=True, + tracking=True, + ) + + @api.depends("employee_id") + def _compute_employee_work_email(self): + for rec in self: + rec.employee_work_email = rec.employee_id.work_email + + @api.depends("reminder_definition_id") + def _compute_mail_template(self): + for rec in self: + rec.mail_template_id = rec.reminder_definition_id.mail_template_id + + @api.depends("employee_id", "expense_sheet_ids", "reminder_definition_id") + def _compute_is_warning_duplicate(self): + Reminder = self.env["hr.advance.overdue.reminder"] + for rec in self: + rec.is_warning_duplicate = False + if not rec.expense_sheet_ids: + continue + + domain = [ + ("state", "!=", "draft"), + ("reminder_definition_id", "=", rec.reminder_definition_id.id), + ("employee_id", "=", rec.employee_id.id), + ("expense_sheet_ids", "in", rec.expense_sheet_ids.ids), + ] + if rec._origin: + domain.append(("id", "!=", rec._origin.id)) + + if Reminder.search(domain, limit=1): + rec.is_warning_duplicate = True + + def unlink(self): + """Not allow delete document when sent already.""" + if any(rec.state != "draft" for rec in self): + raise UserError( + self.env._("You can't delete document when state is not draft") + ) + return super().unlink() + + def validate_mail(self): + self.ensure_one() + template = self.mail_template_id + compose_form = self.env.ref("mail.email_compose_message_wizard_form", False) + related_partners = self.employee_id._get_related_partners() + ctx = dict( + default_model="hr.advance.overdue.reminder", + default_res_ids=self.ids, + default_use_template=bool(template), + default_template_id=template.id, + default_partner_ids=related_partners.ids, + default_composition_mode="comment", + mark_overdue_as_sent=1, + ) + return { + "name": self.env._("Compose Email"), + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "mail.compose.message", + "views": [(compose_form.id, "form")], + "view_id": compose_form.id, + "target": "new", + "context": ctx, + } + + def action_submit(self): + ir_sequence = self.env["ir.sequence"] + for rec in self: + if rec.name == "/": + number = ( + ir_sequence.next_by_code("advance.overdue.reminder.sequence") or "/" + ) + rec.name = number + return self.write({"state": "submit"}) + + def action_validate(self): + self.ensure_one() + if self.action_type == "mail": + return self.validate_mail() + return + + def action_draft(self): + return self.write({"state": "draft"}) + + def action_cancel(self): + return self.write({"state": "cancel"}) + + @api.returns("mail.message", lambda value: value.id) + def message_post(self, **kwargs): + """Auto change state to done when send mail""" + if self.env.context.get("mark_overdue_as_sent"): + self.filtered(lambda o: o.state == "submit").with_context( + tracking_disable=True + ).write({"state": "done"}) + return super().message_post(**kwargs) diff --git a/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py b/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py new file mode 100644 index 000000000..d9fdd1b23 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/models/hr_expense_sheet.py @@ -0,0 +1,137 @@ +# Copyright 2020 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from collections import defaultdict + +from dateutil.relativedelta import relativedelta + +from odoo import Command, api, fields, models +from odoo.exceptions import UserError + + +class HrExpenseSheet(models.Model): + _inherit = "hr.expense.sheet" + + overdue_reminder_ids = fields.Many2many( + comodel_name="hr.advance.overdue.reminder", + relation="expense_sheet_overdue_reminder_rel", + column1="expense_sheet_id", + column2="overdue_reminder_id", + string="Overdue Reminder Action History", + ) + is_overdue = fields.Boolean( + compute="_compute_overdue", + search="_search_is_overdue", + string="Overdue", + ) + overdue_days = fields.Integer( + compute="_compute_overdue", + string="Overdue (Days)", + ) + clearing_date_due = fields.Date( + string="Clearing Due Date", + tracking=True, + help="Estimated date for the expense to be cleared.", + ) + + @api.onchange("clearing_date_due") + def _onchange_clearing_date_due(self): + today = fields.Date.context_today(self) + if self.clearing_date_due and self.clearing_date_due < today: + raise UserError( + self.env._("You can not select clearing due date less than today.") + ) + + def _get_date_overdue(self): + """Hook for manual_date""" + return fields.Date.context_today(self) + + @api.depends("state", "clearing_date_due", "clearing_residual") + def _compute_overdue(self): + date = self._get_date_overdue() + for sheet in self: + sheet.is_overdue = False + sheet.overdue_days = 0 + + # Check if the sheet is an advance, + # has a clearing date due, and is not yet cleared + if ( + sheet.clearing_date_due + and sheet.clearing_date_due < date + and sheet.clearing_residual > 0.0 + ): + sheet.is_overdue = True + sheet.overdue_days = (date - sheet.clearing_date_due).days + + def _search_is_overdue(self, operator, value): + assert operator == "=" and value, "Operation not supported" + return [ + ("clearing_date_due", "<", fields.Date.context_today(self)), + ("clearing_residual", ">", 0.0), + ] + + def action_sheet_move_post(self): + reminder = self.env["reminder.definition"].search( + [], order="overdue_days_min asc", limit=1 + ) + for sheet in self.filtered("advance"): + if not sheet.clearing_date_due and not reminder: + raise UserError( + self.env._( + "Please configured reminder definition before " + "Post Journal Entries" + ) + ) + + res = super().action_sheet_move_post() + + for sheet in self.filtered( + lambda sheet: sheet.advance and not sheet.clearing_date_due + ): + base_date = sheet.accounting_date or fields.Date.context_today(self) + sheet.clearing_date_due = base_date + relativedelta( + days=reminder.clearing_terms_days or 0 + ) + return res + + def _get_reminder(self, sheet, reminder_defs): + return reminder_defs.filtered( + lambda r: r.overdue_days_min <= sheet.overdue_days + )[:1] + + def action_overdue_reminder(self): + overdue_sheets = self.filtered("is_overdue") + if len(overdue_sheets) != len(self): + raise UserError(self.env._("You cannot remind non-overdue documents.")) + + groups = defaultdict(lambda: self.env[self._name]) + reminder_defs = self.env["reminder.definition"].search( + [], order="overdue_days_min desc" + ) + + for sheet in overdue_sheets: + reminder = self._get_reminder(sheet, reminder_defs) + if not reminder: + continue + + key = (sheet.employee_id.id, reminder.id) + groups[key] |= sheet + + vals = [] + for (employee_id, reminder_id), sheets in groups.items(): + vals.append( + { + "employee_id": employee_id, + "reminder_definition_id": reminder_id, + "expense_sheet_ids": [Command.set(sheets.ids)], + } + ) + reminders = self.env["hr.advance.overdue.reminder"].create(vals) + return { + "name": self.env._("Advance Overdue Reminder"), + "type": "ir.actions.act_window", + "res_model": "hr.advance.overdue.reminder", + "view_mode": "list,form", + "domain": [("id", "in", reminders.ids)], + "target": "current", + } diff --git a/hr_expense_advance_overdue_reminder/models/reminder_definition.py b/hr_expense_advance_overdue_reminder/models/reminder_definition.py new file mode 100644 index 000000000..798337835 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/models/reminder_definition.py @@ -0,0 +1,44 @@ +# Copyright 2023 Ecosoft Co., Ltd. (http://ecosoft.co.th) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ReminderDefinition(models.Model): + _name = "reminder.definition" + _inherit = ["mail.thread", "mail.activity.mixin"] + _description = "Reminder Definition" + + name = fields.Char( + string="Description", + required=True, + ) + clearing_terms_days = fields.Integer( + string="Clearing Due Terms", + default=7, + help="Number of days used to calculate the Clearing Due Date " + "when the user does not specify one manually.", + ) + overdue_days_min = fields.Integer( + help="Minimum overdue days to apply this reminder rule.", + ) + active = fields.Boolean(default=True) + company_id = fields.Many2one( + comodel_name="res.company", + default=lambda self: self.env.company, + ) + action_type = fields.Selection( + selection=[("mail", "E-mail")], + default="mail", + required=True, + ) + mail_template_id = fields.Many2one( + comodel_name="mail.template", + default=lambda self: self._get_default_mail_template_id(), + ) + + def _get_default_mail_template_id(self): + return self.env.ref( + "hr_expense_advance_overdue_reminder.mail_template_hr_expense_advance_overdue_reminder", + raise_if_not_found=False, + ) diff --git a/hr_expense_advance_overdue_reminder/pyproject.toml b/hr_expense_advance_overdue_reminder/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/hr_expense_advance_overdue_reminder/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/hr_expense_advance_overdue_reminder/readme/CONFIGURE.md b/hr_expense_advance_overdue_reminder/readme/CONFIGURE.md new file mode 100644 index 000000000..4a8b670b0 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/readme/CONFIGURE.md @@ -0,0 +1,9 @@ +To configure this module, you need to: + +1. Go to *Expenses \> Configuration \> Reminder Definition*. +2. Set reminder definition. +3. Specify the time period for the set due date clearing advance. This + field is Terms Due Date has default 30 days and it will compute due + date by today + Terms Due Date, when you Post Journal Entries on + expense sheet. +4. Specify other fields (if any) diff --git a/hr_expense_advance_overdue_reminder/readme/CONTRIBUTORS.md b/hr_expense_advance_overdue_reminder/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..1ac4c2577 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Ecosoft](http://ecosoft.co.th): + - Saran Lim. \ + - Pimolnat Suntian \ diff --git a/hr_expense_advance_overdue_reminder/readme/DESCRIPTION.md b/hr_expense_advance_overdue_reminder/readme/DESCRIPTION.md new file mode 100644 index 000000000..c9ebd6823 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/readme/DESCRIPTION.md @@ -0,0 +1,13 @@ +This module allow company to send overdue advance reminders to the +employee. it sends a reminder for an expense advance when it has past +it's *Due Date* An overdue reminder for a employee always include all +the overdue advance an amount of that employee. + +The module supports a clever expense reimbursement reminder counter +mechanism: + +- the reminder counter is a property of an expense advance, +- the reminder counter of each overdue expense advance is incremented + every time when you sending a reminder by email / letter. +- in an email template, you can configure at *Settings \> Technical \> + Email \> Email Templates \> Name 'Advance: Overdue Reminder'* diff --git a/hr_expense_advance_overdue_reminder/readme/USAGE.md b/hr_expense_advance_overdue_reminder/readme/USAGE.md new file mode 100644 index 000000000..aff9732a4 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/readme/USAGE.md @@ -0,0 +1,24 @@ +**This module has the following steps to use:** + +1. Create an advance document and submit it to manager for approval. +2. Once approved, post the journal entries. +3. If the due date is not manually selected, it will be auto-generated + from the reminder settings. +4. Register Payment. + +**To check for overdue and uncleared advances:** + +1. Go to Expenses \> Expense Reports \> Reports to Overdue. +2. Select an advance that needs a reminder. +3. Click on Action \> Overdue Reminder. +4. Verify the information and click the "Start" button to create an + overdue reminder. +5. It will generate a reminder only for the selected document. + +**To send a reminder to an employee:** + +1. Go to Expenses \> Employee Overdue \> Overdue Reminder +2. Select the document for which you need to send a reminder to the + employee. +3. Verify the information and Send or print the reminder to the + employee. diff --git a/hr_expense_advance_overdue_reminder/security/ir.model.access.csv b/hr_expense_advance_overdue_reminder/security/ir.model.access.csv new file mode 100644 index 000000000..77ac94dc8 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_reminder_definition_user,access_reminder_definition_user,model_reminder_definition,hr_expense.group_hr_expense_user,1,0,0,0 +access_reminder_definition_manager,access_reminder_definition_manager,model_reminder_definition,hr_expense.group_hr_expense_manager,1,1,1,1 +access_hr_advance_overdue_reminder_manager,access_hr_advance_overdue_reminder_manager,model_hr_advance_overdue_reminder,hr_expense.group_hr_expense_manager,1,1,1,1 +access_hr_advance_overdue_reminder_accountant,access_hr_advance_overdue_reminder_accountant,model_hr_advance_overdue_reminder,account.group_account_user,1,1,1,1 +access_hr_advance_overdue_reminder_user,access_hr_advance_overdue_reminder_user,model_hr_advance_overdue_reminder,hr_expense.group_hr_expense_user,1,0,0,0 diff --git a/hr_expense_advance_overdue_reminder/static/description/icon.png b/hr_expense_advance_overdue_reminder/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/hr_expense_advance_overdue_reminder/static/description/icon.png differ diff --git a/hr_expense_advance_overdue_reminder/static/description/index.html b/hr_expense_advance_overdue_reminder/static/description/index.html new file mode 100644 index 000000000..c3e98696c --- /dev/null +++ b/hr_expense_advance_overdue_reminder/static/description/index.html @@ -0,0 +1,484 @@ + + + + + +Employee Advance Overdue Reminder + + + +
+

Employee Advance Overdue Reminder

+ + +

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

+

This module allow company to send overdue advance reminders to the +employee. it sends a reminder for an expense advance when it has past +it’s Due Date An overdue reminder for a employee always include all +the overdue advance an amount of that employee.

+

The module supports a clever expense reimbursement reminder counter +mechanism:

+
    +
  • the reminder counter is a property of an expense advance,
  • +
  • the reminder counter of each overdue expense advance is incremented +every time when you sending a reminder by email / letter.
  • +
  • in an email template, you can configure at Settings > Technical > +Email > Email Templates > Name ‘Advance: Overdue Reminder’
  • +
+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Expenses > Configuration > Reminder Definition.
  2. +
  3. Set reminder definition.
  4. +
  5. Specify the time period for the set due date clearing advance. This +field is Terms Due Date has default 30 days and it will compute due +date by today + Terms Due Date, when you Post Journal Entries on +expense sheet.
  6. +
  7. Specify other fields (if any)
  8. +
+
+
+

Usage

+

This module has the following steps to use:

+
    +
  1. Create an advance document and submit it to manager for approval.
  2. +
  3. Once approved, post the journal entries.
  4. +
  5. If the due date is not manually selected, it will be auto-generated +from the reminder settings.
  6. +
  7. Register Payment.
  8. +
+

To check for overdue and uncleared advances:

+
    +
  1. Go to Expenses > Expense Reports > Reports to Overdue.
  2. +
  3. Select an advance that needs a reminder.
  4. +
  5. Click on Action > Overdue Reminder.
  6. +
  7. Verify the information and click the “Start” button to create an +overdue reminder.
  8. +
  9. It will generate a reminder only for the selected document.
  10. +
+

To send a reminder to an employee:

+
    +
  1. Go to Expenses > Employee Overdue > Overdue Reminder
  2. +
  3. Select the document for which you need to send a reminder to the +employee.
  4. +
  5. Verify the information and Send or print the reminder to the +employee.
  6. +
+
+
+

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.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Ecosoft
  • +
+
+
+

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:

+

Saran440

+

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

+

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

+
+
+
+ + diff --git a/hr_expense_advance_overdue_reminder/tests/__init__.py b/hr_expense_advance_overdue_reminder/tests/__init__.py new file mode 100644 index 000000000..0649b1937 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/tests/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_hr_expense_advance_overdue_reminder_automation +from . import test_multi_stage_reminder diff --git a/hr_expense_advance_overdue_reminder/tests/test_hr_expense_advance_overdue_reminder.py b/hr_expense_advance_overdue_reminder/tests/test_hr_expense_advance_overdue_reminder.py new file mode 100644 index 000000000..a710e5b40 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/tests/test_hr_expense_advance_overdue_reminder.py @@ -0,0 +1,237 @@ +# Copyright 2023 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from freezegun import freeze_time + +from odoo import fields +from odoo.exceptions import UserError +from odoo.tests.common import Form, TransactionCase + + +class TestHrExpenseAdvanceOverdueReminder(TransactionCase): + @classmethod + @freeze_time("2001-01-01") + def setUpClass(cls): + super().setUpClass() + cls.reminder_config = cls.env["reminder.definition"] + cls.overdue_wizard = cls.env["hr.advance.overdue.reminder.wizard"] + cls.mail_compose = cls.env["mail.compose.message"] + cls.journal_bank = cls.env["account.journal"].search( + [("type", "=", "bank")], limit=1 + ) + cls.letter_report = cls.env["ir.actions.report"].search([], limit=1) + employee_home = cls.env["res.partner"].create({"name": "Employee Home Address"}) + cls.employee = cls.env["hr.employee"].create( + {"name": "Employee A", "address_home_id": employee_home.id} + ) + # Advance product + advance_account = cls.env["account.account"].create( + { + "code": "154000", + "name": "Employee Advance", + "account_type": "asset_current", + "reconcile": True, + } + ) + cls.emp_advance = cls.env.ref("hr_expense_advance_clearing.product_emp_advance") + cls.emp_advance.property_account_expense_id = advance_account + # Create advance expense 1,000 + cls.advance = cls._create_expense_sheet( + cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True + ) + + def _create_expense( + self, + description, + employee, + product, + amount, + advance=False, + payment_mode="own_account", + account=False, + ): + with Form( + self.env["hr.expense"].with_context(default_advance=advance) + ) as expense: + expense.name = description + expense.employee_id = employee + expense.total_amount = amount + expense.payment_mode = payment_mode + expense = expense.save() + expense.tax_ids = False # Test no vat + return expense + + def _create_expense_sheet( + self, description, employee, product, amount, advance=False + ): + expense = self._create_expense( + self, description, employee, product, amount, advance + ) + # Add expense to expense sheet + expense_sheet = self.env["hr.expense.sheet"].create( + { + "name": description, + "advance": advance, + "employee_id": expense.employee_id.id, + "expense_line_ids": [(6, 0, [expense.id])], + } + ) + return expense_sheet + + def _register_payment(self, move_id, amount, ctx=False, hr_return_advance=False): + ctx = ctx or { + "active_ids": [move_id.id], + "active_id": move_id.id, + "active_model": "account.move", + } + ctx["hr_return_advance"] = hr_return_advance + PaymentWizard = self.env["account.payment.register"] + with Form(PaymentWizard.with_context(**ctx)) as f: + f.journal_id = self.journal_bank + f.payment_date = fields.Date.today() + f.amount = amount + payment_wizard = f.save() + payment_wizard.action_create_payments() + + @freeze_time("2001-01-01") + def test_01_reminder_advance(self): + # Overdue date configured due date < today 1 day + self.assertFalse(self.advance.clearing_date_due) + self.assertEqual(self.advance.state, "draft") + # Change clearing due date less than today, it should error + with self.assertRaises(UserError): + with Form(self.advance) as av: + av.clearing_date_due = "2000-01-01" + self.advance.clearing_date_due = False + self.advance.action_submit_sheet() + self.advance.approve_expense_sheets() + # Clearing Due Date is not selected, it will default from reminder config + with self.assertRaises(UserError): + self.advance.action_sheet_move_create() + reminder = self.reminder_config.create({"name": "Overdue Reminder"}) + self.assertEqual(reminder.clearing_terms_days, 30) + self.advance.action_sheet_move_create() + self.assertEqual( + self.advance.clearing_date_due.strftime("%Y-%m-%d"), "2001-01-31" + ) + self.assertFalse(self.advance.is_overdue) + self.assertEqual(self.advance.clearing_residual, 1000.0) + self._register_payment(self.advance.account_move_id, 1000.0) + self.assertEqual(self.advance.state, "done") + # Check Overdue Advance + with self.assertRaises(UserError): + self.advance.action_overdue_reminder() + self.advance.clearing_date_due = "2000-12-31" + self.assertTrue(self.advance.is_overdue) + result = self.advance.action_overdue_reminder() + # Open wizard overdue reminder + self.assertEqual(result["res_model"], "hr.advance.overdue.reminder.wizard") + with Form( + self.overdue_wizard.with_context( + active_ids=self.advance.ids, + default_employee_ids=self.advance.employee_id.ids, + default_reminder_definition_id=reminder.id, + ) + ) as wiz: + wiz.reminder_number = 5 + wizard_reminder = wiz.save() + self.assertTrue(wizard_reminder.employee_ids) + action = wizard_reminder.with_context(active_ids=False).run() + self.assertFalse(action["domain"][0][2]) + action = wizard_reminder.run() + self.assertTrue(action["domain"][0][2]) + advance_overdue_reminder = self.env["hr.advance.overdue.reminder"].browse( + action["domain"][0][2] + ) + self.assertEqual(advance_overdue_reminder.state, "draft") + # Test reminder by letter + with Form(advance_overdue_reminder) as av_overdue: + av_overdue.create_activity = True + av_overdue.reminder_definition_id = reminder + av_overdue.reminder_type = "letter" + self.assertFalse(av_overdue.letter_report) + with self.assertRaises(UserError): + advance_overdue_reminder.action_validate() + self.letter_report.model = "hr.advance.overdue.reminder" + with Form(advance_overdue_reminder) as av_overdue: + av_overdue.letter_report = self.letter_report + advance_overdue_reminder.action_validate() + self.assertEqual(advance_overdue_reminder.state, "done") + # Check name report + name_report = advance_overdue_reminder._get_report_base_filename() + self.assertEqual(name_report, "overdue_letter-Employee_A") + # Test reminder by email + advance_overdue_reminder.state = "draft" + with Form(advance_overdue_reminder) as av_overdue: + av_overdue.reminder_type = "mail" + mail_compose = advance_overdue_reminder.action_validate() + with Form( + self.mail_compose.with_context( + active_ids=mail_compose["context"].get("active_ids"), + default_model=mail_compose["context"].get("default_model"), + default_res_id=mail_compose["context"].get("default_res_id"), + default_template_id=mail_compose["context"].get("default_template_id"), + ) + ) as wiz: + wiz.body = "Test" + mail_wizard = wiz.save() + mail_wizard._action_send_mail() + self.assertEqual(advance_overdue_reminder.state, "done") + with self.assertRaises(UserError): + advance_overdue_reminder.unlink() + advance_overdue_reminder.action_cancel() + self.assertEqual(advance_overdue_reminder.state, "cancel") + advance_overdue_reminder.state = "draft" + advance_overdue_reminder.create_activity = True + advance_overdue_reminder.activity_scheduled_date = "2001-01-15" + advance_overdue_reminder.activity_user_id = self.env.user.id + mail_compose = advance_overdue_reminder.action_validate() + with Form( + self.mail_compose.with_context( + active_ids=mail_compose["context"].get("active_ids"), + default_model=mail_compose["context"].get("default_model"), + default_res_id=mail_compose["context"].get("default_res_id"), + default_template_id=mail_compose["context"].get("default_template_id"), + ) + ) as wiz: + wiz.body = "Test" + mail_wizard = wiz.save() + mail_wizard._action_send_mail() + self.assertEqual(advance_overdue_reminder.state, "done") + # Check reminder < today + self.advance.reminder_next_time = "2000-12-31" + self.assertTrue(self.advance.is_overdue) + + def test_02_duplicate_warning(self): + reminder_config = self.reminder_config.create({"name": "Overdue Reminder"}) + + # Create first reminder with the expense sheet and set to done + reminder1 = self.env["hr.advance.overdue.reminder"].create( + { + "employee_id": self.employee.id, + "reminder_definition_id": reminder_config.id, + "expense_sheet_ids": [(6, 0, self.advance.ids)], + "state": "done", + } + ) + + # Create second reminder with the same expense sheet + reminder2 = self.env["hr.advance.overdue.reminder"].create( + { + "employee_id": self.employee.id, + "reminder_definition_id": reminder_config.id, + "expense_sheet_ids": [(6, 0, self.advance.ids)], + } + ) + + # Check warning is True because reminder1 is done + self.assertTrue(reminder2.is_warning_duplicate) + + # Remove expense sheet from reminder2 + reminder2.expense_sheet_ids = [(5, 0, 0)] + self.assertFalse(reminder2.is_warning_duplicate) + + # Set reminder1 back to draft, should not trigger warning + reminder1.state = "draft" + reminder2.expense_sheet_ids = [(6, 0, self.advance.ids)] + self.assertFalse(reminder2.is_warning_duplicate) diff --git a/hr_expense_advance_overdue_reminder/views/hr_advance_overdue_view.xml b/hr_expense_advance_overdue_reminder/views/hr_advance_overdue_view.xml new file mode 100644 index 000000000..573963ae5 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/views/hr_advance_overdue_view.xml @@ -0,0 +1,208 @@ + + + + + hr.advance.overdue.reminder.form + hr.advance.overdue.reminder + +
+
+
+ + +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + hr.advance.overdue.reminder.list + hr.advance.overdue.reminder + + + + + + + + + + + + + + + hr.advance.overdue.reminder.search + hr.advance.overdue.reminder + + + + + + + + + + + + + + + + + + + Overdue Reminder Action + hr.advance.overdue.reminder + list,form + + + + + + +
diff --git a/hr_expense_advance_overdue_reminder/views/hr_expense_views.xml b/hr_expense_advance_overdue_reminder/views/hr_expense_views.xml new file mode 100644 index 000000000..daf5a621d --- /dev/null +++ b/hr_expense_advance_overdue_reminder/views/hr_expense_views.xml @@ -0,0 +1,80 @@ + + + + + hr.expense.sheet.view.search + hr.expense.sheet + + + + + + + + + + + view.hr.expense.sheet.form + hr.expense.sheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hr.expense.sheet.list + hr.expense.sheet + + + + + + + + + + Overdue Reminder + ir.actions.server + + + code + +if records: + action = records.action_overdue_reminder() + + + diff --git a/hr_expense_advance_overdue_reminder/views/reminder_definition_view.xml b/hr_expense_advance_overdue_reminder/views/reminder_definition_view.xml new file mode 100644 index 000000000..4fd1b2bd4 --- /dev/null +++ b/hr_expense_advance_overdue_reminder/views/reminder_definition_view.xml @@ -0,0 +1,92 @@ + + + + reminder.definition.list + reminder.definition + + + + + + + + + + reminder.definition.form + reminder.definition + +
+ +
+ +
+ Name +

+ +

+
+ + + + + + + + + + + + + + + + + + + Reminder Definition + reminder.definition + list,form + + +