Add odex25_survey
|
|
@ -1,2 +1,2 @@
|
|||
# odex25-standard-moduless
|
||||
# odex25-standard-modules
|
||||
This Repo contains general standard modules for all projects.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,91 @@
|
|||
=========
|
||||
HR Course
|
||||
=========
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:ddeee0d152c5f7cd6896862fed775d928e76cfa9ab645cc1eb716b3f2a055f10
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |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-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/hr/tree/14.0/hr_course
|
||||
:alt: OCA/hr
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/hr-14-0/hr-14-0-hr_course
|
||||
: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&target_branch=14.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module allows your to manage employee's training courses, course dates and all its
|
||||
validation process.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To create a Course go to Employees -> Courses.
|
||||
|
||||
To create a Training Schedule go to Employees -> Courses Schedule.
|
||||
|
||||
Fill the information and click assign attendees to continue. Assign them and
|
||||
then start the course session.
|
||||
|
||||
One it has finished you must enter the results and finish the course session.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/hr/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 <https://github.com/OCA/hr/issues/new?body=module:%20hr_course%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* Creu Blanca
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Enric Tobella <etobella@creublanca.es>
|
||||
* Jaime Arroyo <jaime.arroyo@creublanca.es>
|
||||
* Anna Janiszewska <anna.janiszewska@camptocamp.com>
|
||||
|
||||
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.
|
||||
|
||||
This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/14.0/hr_course>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
from . import models
|
||||
from . import tests
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "HR Course",
|
||||
"summary": """
|
||||
This module allows your to manage employee's training courses""",
|
||||
"version": "14.0.3.1.1",
|
||||
"license": "AGPL-3",
|
||||
"author": "Creu Blanca,Odoo Community Association (OCA)",
|
||||
"category":"Odex25-Survey/Odex25-Survey",
|
||||
|
||||
"website": "https://github.com/OCA/hr",
|
||||
"depends": ["hr", "mail"],
|
||||
"data": [
|
||||
"security/course_security.xml",
|
||||
"security/ir.model.access.csv",
|
||||
"data/ir_cron_data.xml",
|
||||
"data/mail_template.xml",
|
||||
"data/mail_channel.xml",
|
||||
"views/hr_course_category_views.xml",
|
||||
"views/hr_course_views.xml",
|
||||
"views/hr_course_schedule_views.xml",
|
||||
"views/hr_employee_views.xml",
|
||||
"views/hr_settings.xml",
|
||||
],
|
||||
"demo": ["demo/hr_course.xml"],
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<odoo noupdate="1">
|
||||
<record id="ir_cron_post_wip" model="ir.cron">
|
||||
<field name="name">HR Course: Check validity date</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="active">False</field>
|
||||
<field
|
||||
name="nextcall"
|
||||
eval="(DateTime.now().replace(hour=1, minute=0) + timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')"
|
||||
/>
|
||||
<field name="doall" eval="False" />
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
<field name="code">model._cron_check_validity_date()</field>
|
||||
<field name="state">code</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<odoo noupdate="0">
|
||||
<!-- Channel -->
|
||||
<record id="mail_channel_course_validity" model="mail.channel">
|
||||
<field name="name">Course validity expiration notification</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
<record id="mail_template_validity_reminder" model="mail.template">
|
||||
<field name="name">Course Validity Notification</field>
|
||||
<field name="email_from">${ctx.get('email_from')}</field>
|
||||
<field name="subject">End of validity for a course</field>
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
<field name="body_html" type="html">
|
||||
<div>
|
||||
<p>Hi,</p>
|
||||
<p
|
||||
>The validity time of the course ${object.name} will end up soon. You maybe need to plan a new one. </p>
|
||||
<p>The concerned employees are:</p>
|
||||
% for employee in object.course_attendee_ids.mapped("employee_id.name"):
|
||||
<p>${employee}</p>
|
||||
% endfor
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="hr_course_category_it" model="hr.course.category">
|
||||
<field name="name">Department IT</field>
|
||||
</record>
|
||||
<record id="hr_course_category_language" model="hr.course.category">
|
||||
<field name="name">Languages</field>
|
||||
</record>
|
||||
<record id="hr_course_qsa" model="hr.course">
|
||||
<field name="name">Qualified Security Assessor Training (QSA)</field>
|
||||
<field name="category_id" ref="hr_course_category_it" />
|
||||
</record>
|
||||
<record id="hr_course_isa" model="hr.course">
|
||||
<field name="name">Internal Security Assessor Training (ISA)</field>
|
||||
<field name="category_id" ref="hr_course_category_it" />
|
||||
</record>
|
||||
<record id="hr_course_schedule_qsa_october" model="hr.course.schedule">
|
||||
<field name="name">QSA October</field>
|
||||
<field name="course_id" ref="hr_course_qsa" />
|
||||
<field name="start_date">2021-10-21</field>
|
||||
<field name="end_date">2021-10-21</field>
|
||||
<field name="cost">100</field>
|
||||
<field name="authorized_by" ref="hr.employee_hne" />
|
||||
</record>
|
||||
<record id="hr_course_schedule_qsa_november" model="hr.course.schedule">
|
||||
<field name="name">QSA November</field>
|
||||
<field name="course_id" ref="hr_course_qsa" />
|
||||
<field name="start_date">2021-11-29</field>
|
||||
<field name="end_date">2021-11-29</field>
|
||||
<field name="cost">100</field>
|
||||
<field name="authorized_by" ref="hr.employee_hne" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,711 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,744 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 11.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-03-21 09:30+0000\n"
|
||||
"PO-Revision-Date: 2024-02-18 18:36+0000\n"
|
||||
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.17\n"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div>\n"
|
||||
" <p>Hola,</p>\n"
|
||||
" <p>El tiempo de validez del curso ${object.name} finalizará "
|
||||
"pronto. Quizás necesites planificar uno nuevo. </p>\n"
|
||||
" <p>Los empleados afectados son:</p>\n"
|
||||
" % para empleado en object.course_attendee_ids.mapped("
|
||||
"\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % final para\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr "Ausente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Acción necesaria"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr "Activo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr "Decoración de Excepción de la Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr "Estado de la Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr "Icono de Tipo de Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr "Plazo de alerta antes del fin de validez (días)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr "Asignar asistentes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Recuento de archivos adjuntos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr "Asistente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr "Asistentes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr "Autorizado por"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr "Devolver a borrador"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr "Cancelar curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr "Curso cancelado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr "Categoría"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr "Esta categoría ya existe !"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr "Comentario"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Compañías"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr "Curso finalizado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr "Finalizado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr "Ajustes Config"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr "Contenido"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr "Convocatoria"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr "Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr "Asistente al curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr "Tipos de cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr "Tipo de curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr "Coste del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr "Alerta de Expiración de Curso Enviada"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr "Nombre del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr "Resultado del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr "Calendario de cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr "Tipo del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr "Nombre del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr "Notificación de expiración de validez del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr "Cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr "Calendario de cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creado por"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creado en"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Moneda"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nombre a mostrar"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr "Borrador"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr "Curso en borrador"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr "Empleado"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr "Empleados eliminados de este curso: <br></br>%s"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr "Fecha final"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr "Fin de validez de un curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr "Criterios de evaluación"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr "Criterios de evaluación"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr "Suspendido"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguidores"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Seguidores (Canales)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguidores (Socios)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr "Fuente Iconos Sorprendentes , por ejemplo fa-tasks"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr "Curso de RRHH: Comprobar fecha de validez"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr "Tiene permanencia"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr "Icono"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr "Icono para indicar la excepción de la actividad."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Si está marcado, los nuevos mensajes requieren su atención."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Si está marcado, algunos mensajes tienen un error de entrega."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr "En progreso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr "En corrección"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr "Instructor"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr "Notas internas"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Es Seguidor"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última modificación en"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última actualización de"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última actualización en"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr "Lista de correo para alertar"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Archivo adjunto principal"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Error de entrega de mensajes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr "Fecha Límite de mi Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr "Fecha Límite de la Siguiente Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr "Resumen de Próxima Actividad"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr "Tipo Actividad Siguiente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Número de acciones"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr "Número de cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Número de errores"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Número de mensajes que requieren una acción"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Número de mensajes con error de entrega"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Número de mensajes no leídos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr "Objetivo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr "Todos aprobados"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr "Aprobado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr "Pendiente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr "Tiempo de permanencia"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr "Lugar"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr "Corregir curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr "Usuario Responsable"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr "Resultado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr "Horarios"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr ""
|
||||
"Muestra si se ha enviado el correo electrónico de notificación del curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr "Empezar curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr "Fecha de inicio"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr "Estado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
"Status basado en actividades\n"
|
||||
"Atrasado: La fecha de entrega ya ha pasado\n"
|
||||
"Hoy: Fecha de actividad es hoy\n"
|
||||
"Planeado: Actividades futuras."
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr "La fecha de inicio no puede ser posterior a la de fin."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr "Empresa de formación"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr "Tipo de actividad excepcional registrada."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Mensajes sin leer"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Contador de mensajes no leídos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr "Fecha Fin de Validez"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr "Esperando asistentes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Mensajes del sitio web"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Historial de comunicación del sitio web"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr "No se puede finalizar el curso con resultados pendientes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
"Solo deberías devolver un curso a borrador si se ha cancelado por error o si "
|
||||
"alguna de su información es incorrecta. Quieres continuar?"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Error de entrega de SMS"
|
||||
|
||||
#~ msgid "hr.course"
|
||||
#~ msgstr "hr.course"
|
||||
|
||||
#~ msgid "hr.course.attendee"
|
||||
#~ msgstr "hr.course.attendee"
|
||||
|
||||
#~ msgid "hr.course.result"
|
||||
#~ msgstr "hr.course.result"
|
||||
|
|
@ -0,0 +1,747 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2022-05-30 16:05+0000\n"
|
||||
"Last-Translator: Khalid Hazam <k.hazam@badep.ma>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: fr\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.3.2\n"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr "Absent"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Besoin d'action"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr "Actif"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr "Délai d'alerte avant fin de validité (en jour)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr "Affecter des participants"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Nombre de pièces jointes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr "Participant"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr "Participants"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr "Autorisé par"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr "Retour en Brouillon"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr "Annuler formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr "Annulée"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr "Formation annulée"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr "Catégorie"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr "La catégorie existe déjà !"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr "Commentaire"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Sociétés"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr "Formation terminée"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr "Terminée"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr "Paramètres de config"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr "Contenu"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr "Convocataire"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr "Formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr "Participant à la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr "Catégories de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr "Catégorie de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr "Coût de la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr "Alerte d'expiration de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr "Nom de la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr "Résultats de la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr "Planing de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr "Catégorie de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr "Nom de la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr "Alerte de fin de validité"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr "Formations"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr "Planning de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Créée par"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Créée le"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Devise"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nom affiché"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr "Brouillon"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr "Formation en brouillon"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr "Employé"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr "Employés retirés de cette formation: <br></br>%s"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr "Date de fin"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr "Date de fin de validité"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr "Critères d'évaluation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr "Critères d'évaluation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr "Echec"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Abonnés"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Abonnés (Canals)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Abonnés (Contacts)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr "Formation: Vérification des dates de fin de validité"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr "Permanent"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Si coché, de nouveaux messages doivent être consultés"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Si coché, certains messages n'ont pu être délivré (Erreur)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr "En Cours"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr "En validation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr "Professeur"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Est Abonné"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Dernière modification le"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Dernière mise à jour par"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Dernière mise à jour le"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr "List de personne à alerter"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Pièces jointes principales"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Erreur de livraison Message"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Messages"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Nombre d'actions"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr "Nombre de formations"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Nombre d'erreurs"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Nombre de messages qui doivent être consultés"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Nombre de messages avec une erreur de livraison"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Nombre de messages non lus"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr "But"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr "Valider tout le monde"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr "Validé"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr "En attente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr "temps de permanence"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr "Lieu"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr "Evaluer la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr "Résultat"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr "Planning"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr "Afficher si des mails de notifications ont été envoyés"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr "Démarrer la formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr "Date de début"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr "Etat"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr "La date de début ne peut être après la date de fin"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr "Société de formation"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Messages non lus"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Nombre de messages non lus"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr "Date de fin de validité"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr "En attente des participants"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas terminer la formation tant que des évaluations sont "
|
||||
"manquantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
"Vous devriez repasser une formation à l'état brouillon seulement si vous "
|
||||
"l'avez annulée par erreur ou si certaines des informations entrées sont "
|
||||
"incorrectes. Voulez-vous continuer?"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div>\n"
|
||||
#~ " <p>Hi,</p>\n"
|
||||
#~ " <p>The validity time of the course ${object.name} "
|
||||
#~ "will end up soon. You maybe need to plan a new one. </p>\n"
|
||||
#~ " <p>The concerned employees are:</p>\n"
|
||||
#~ " % for employee in object.course_attendee_ids."
|
||||
#~ "mapped(\"employee_id.name\"):\n"
|
||||
#~ " <p>${employee}</p>\n"
|
||||
#~ " % endfor\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div>\n"
|
||||
#~ " <p>Bonjour</p>\n"
|
||||
#~ " <p>La durée de validité de la formation ${object."
|
||||
#~ "name} arrive à son terme. Vous avez peut-être besoin de la replanifier. </"
|
||||
#~ "p>\n"
|
||||
#~ " <p>Les employés concernés sont:</p>\n"
|
||||
#~ " % for employee in object.course_attendee_ids."
|
||||
#~ "mapped(\"employee_id.name\"):\n"
|
||||
#~ " <p>${employee}</p>\n"
|
||||
#~ " % endfor\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Convocation"
|
||||
#~ msgstr "Convocation"
|
||||
|
|
@ -0,0 +1,733 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-10-13 10:36+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>Il tempo di validità del corso ${object.name} scadrà "
|
||||
"presto. Forse devi pianificarne uno nuovo </p>\n"
|
||||
" <p>I dipendenti interessati sono:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr "Assente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Azione richiesta"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr "Attivo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr "Attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr "Decorazione eccezione attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr "Stato attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr "Icona tipo attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr "Avviso ritardo prima della fine della validità (giorni)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr "Assegna partecipanti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Numero allegati"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr "Partecipante"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr "Partecipanti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr "Autorizzato da"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr "Ritorna a bozza"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr "Annulla corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr "Annullato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr "Corso annullato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr "Categoria già esistente !"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr "Commento"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Aziende"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr "Completa corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr "Completato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr "Impostazioni di configurazione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr "Contenuto"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr "Convocazione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr "Corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr "Partecipante al corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr "Categorie corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr "Categoria corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr "Costo corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr "Avviso di scadenza del corso inviato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr "Nome corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr "Risultati corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr "Calendario corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr "Categoria corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr "Nome corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr "Avviso di scadenza della validità del corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr "Corsi"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr "Calendario corsi"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creato da"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creato il"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr "Bozza"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr "Corso bozza"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr "Dipendente"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr "Dipendenti rimossi da questo corso: <br></br>%s"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr "Data fine"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr "Fine validità per un corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr "Criteri di valutazione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr "Criteri di valutazione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr "Non superato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguito da"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Seguito da (canali)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguito da (partner)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr "Icona Font Awesome es. fa-tasks"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr "Corso HR: verifica la data di validità"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr "Ha frequenza"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr "Icona"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr "Icona per indicare un'attività eccezione."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Se selezionata, nuovi messaggi richiedono attenzione."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr "In corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr "In validazione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr "Docente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr "Note interne"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Segue"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Ultima modifica il"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Ultimo aggiornamento di"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Ultimo aggiornamento il"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr "Mailing list per avvisi"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Allegato principale"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Errore di consegna messaggio"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Messaggi"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr "Scadenza mia attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr "Scadenza prossima attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr "Riepilogo prossima attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr "Tipo prossima attività"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr "Nota"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Numero di azioni"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr "Numero di corsi"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Numero di errori"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Numero di messaggi che richiedono un'azione"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Numero di messaggi con errore di consegna"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Numero di messaggi non letti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr "Obbiettivo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr "Promuovi tutti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr "Superato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr "In attesa"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr "Tempo frequenza"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr "Luogo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr "Valuta il corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr "Utente responsabile"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr "Risultato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr "Calendari"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr "Mostra se è stata inviata un'e-mail di notifica per il corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr "Inizia corso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr "Data inizio"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr "Stato"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
"Stato in base alle attività\n"
|
||||
"Scaduto: la data richiesta è trascorsa\n"
|
||||
"Oggi: la data attività è oggi\n"
|
||||
"Pianificato: attività future."
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr "La data di inizio non può essere successiva alla data di fine."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr "Azienda formatrice"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr "Tipo di attività eccezione sul record."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Messaggi non letti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Contatore messaggi non letti"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr "Data di fine validità"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr "Partecipanti in attesa"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Messaggi sito web"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Cronologia comunicazioni sito web"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr "Non puoi completare il corso con risultati in sospeso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
"Si dovrebbe reimpostare un corso come bozza solo se lo si è cancellato per "
|
||||
"errore o se alcune sue informazioni non sono corrette. Continuare?"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Errore consegna SMS"
|
||||
|
|
@ -0,0 +1,718 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2022-09-14 19:07+0000\n"
|
||||
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: pt\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.3.2\n"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr "Ausente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Ação Necessária"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr "Atribuir participantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Número de Anexos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr "Participante"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr "Participantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr "Autorizado por"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr "Voltar a Rascunho"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr "Cancelar Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr "Curso Cancelado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr "A categoria já existe !"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr "Comentário"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr "Curso Completo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr "Completado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr "Conteúdo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr "Convocatória"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr "Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr "Participante do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr "Categorias de Cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr "Categoria do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr "Custo do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr "Nome do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr "Resultados do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr "Agendamento do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr "Categoria do curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr "Nome do curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr "Cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr "Agendamento dos Cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Criado por"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Criado em"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Moeda"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nome a Apresentar"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr "Rascunho"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr "Rascunho de Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr "Funcionário"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr "Empregados removidos deste curso: <br></br>%s"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr "Data final"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr "Critérios de Avaliação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr "Critérios de avaliação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr "Falhou"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguidores"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr "Seguidores (Canais)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguidores (Parceiros)"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr "Tem Permanência"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Se selecionado, há novas mensagens que requerem a sua atenção."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Se estiver marcado, algumas mensagens têm um erro de entrega."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr "Em andamento"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr "Em validação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr "Instrutor"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "É Seguidor"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última Modificação em"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Última Atualização por"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Última Atualização em"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Anexo Principal"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Erro de Envio de Mensagem"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Mensagens"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Número de Ações"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr "Número de cursos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Número de erros"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Número de mensagens que requerem uma ação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Numero de mensagens com um erro de entrega"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr "Número de mensagens não lidas"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr "Objetivo"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr "Passar todos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr "Aprovado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr "Pendente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr "Tempo de permanência"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr "Local"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr "Classifique o Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr "Resultado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr "Horários"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr "Iniciar Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr "Data inicial"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr "Estado"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr "A data de início não pode ser posterior à data final."
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr "Empresa de formação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr "Mensagens Não Lidas"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr "Contador de Mensagens Não Lidas"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr "Aguardar participantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Mensagens do Website"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Histórico de Comunicação do Website"
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr "Você não pode completar o curso com resultados pendentes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
"Deve retornar um curso ao estado rascunho apenas se o cancelar por engano ou "
|
||||
"se algumas das suas informações estiverem incorretas. Quer continuar?"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Erro de Envio de SMS"
|
||||
|
|
@ -0,0 +1,713 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-06-06 16:09+0000\n"
|
||||
"Last-Translator: Douglas Custódio <douglascstd@yahoo.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: pt_BR\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_course
|
||||
#: model:mail.template,body_html:hr_course.mail_template_validity_reminder
|
||||
msgid ""
|
||||
"<div>\n"
|
||||
" <p>Hi,</p>\n"
|
||||
" <p>The validity time of the course ${object.name} will end "
|
||||
"up soon. You maybe need to plan a new one. </p>\n"
|
||||
" <p>The concerned employees are:</p>\n"
|
||||
" % for employee in object.course_attendee_ids."
|
||||
"mapped(\"employee_id.name\"):\n"
|
||||
" <p>${employee}</p>\n"
|
||||
" % endfor\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__absent
|
||||
msgid "Absent"
|
||||
msgstr "Ausente"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Ação Necessária"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__active
|
||||
msgid "Active"
|
||||
msgstr "Ativa"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_alerting_delay
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_alerting_delay
|
||||
msgid "Alerting delay before end of validity (days)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Assign attendees"
|
||||
msgstr "Designar participantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_attachment_count
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Contagem de anexos"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__attendant_ids
|
||||
msgid "Attendant"
|
||||
msgstr "Participante"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Attendees"
|
||||
msgstr "Participantes"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__authorized_by
|
||||
msgid "Authorized by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Back to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancel Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__cancelled
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Cancelled Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__category_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.constraint,message:hr_course.constraint_hr_course_category_name_uniq
|
||||
msgid "Category already exists !"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__comment
|
||||
msgid "Comment"
|
||||
msgstr "Comentário"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Empresas"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Complete Course"
|
||||
msgstr "Finaliza Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__completed
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__content
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Convocatory"
|
||||
msgstr "Convocação"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_id
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course"
|
||||
msgstr "Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_attendee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_attendee_ids
|
||||
msgid "Course Attendee"
|
||||
msgstr "Participante do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.open_view_course_category_form
|
||||
#: model:ir.ui.menu,name:hr_course.menu_view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_course_category_search
|
||||
msgid "Course Categories"
|
||||
msgstr "Categorias do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_category
|
||||
msgid "Course Category"
|
||||
msgstr "Categoria do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__cost
|
||||
msgid "Course Cost"
|
||||
msgstr "Custo do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__course_expiration_alert_sent
|
||||
msgid "Course Expiration Alert Sent"
|
||||
msgstr "Enviar Aviso de Expiração do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_search_view
|
||||
msgid "Course Name"
|
||||
msgstr "Nome do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Course Results"
|
||||
msgstr "Resultados do Curso"
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_course_schedule
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__course_schedule_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_schedule_id
|
||||
msgid "Course Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__name
|
||||
msgid "Course category"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Course name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.channel,name:hr_course.mail_channel_course_validity
|
||||
msgid "Course validity expiration notification"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_view_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__courses_ids
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_courses
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.res_config_settings_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.view_hr_employee_form
|
||||
msgid "Courses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.act_window,name:hr_course.action_hr_course_schedule
|
||||
#: model:ir.ui.menu,name:hr_course.menu_hr_course_schedule
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Courses Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__create_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__currency_id
|
||||
msgid "Currency"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__draft
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Draft Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model,name:hr_course.model_hr_employee
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__employee_id
|
||||
msgid "Employee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "Employees removed from this course: <br></br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_end
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__end_date
|
||||
msgid "End date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:mail.template,subject:hr_course.mail_template_validity_reminder
|
||||
msgid "End of validity for a course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__evaluation_criteria
|
||||
msgid "Evaluation Criteria"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Evaluation criteria"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__failed
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_follower_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_channel_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_channel_ids
|
||||
msgid "Followers (Channels)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_partner_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_type_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.actions.server,name:hr_course.ir_cron_post_wip_ir_actions_server
|
||||
#: model:ir.cron,cron_name:hr_course.ir_cron_post_wip
|
||||
#: model:ir.cron,name:hr_course.ir_cron_post_wip
|
||||
msgid "HR Course: Check validity date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence
|
||||
msgid "Has Permanence"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_icon
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_progress
|
||||
msgid "In progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__in_validation
|
||||
msgid "In validation"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__instructor_ids
|
||||
msgid "Instructor"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Internal notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_is_follower
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_uid
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_category__write_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_company__course_expiration_channel_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_res_config_settings__course_expiration_channel_id
|
||||
msgid "Mailing list to alert"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_main_attachment_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_ids
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__my_activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__name
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__name
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_date_deadline
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_summary
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_type_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__note
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_employee__count_courses
|
||||
msgid "Number of courses"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_needaction_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_has_error_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Number of unread messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__objective
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Objective"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Pass everybody"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__passed
|
||||
msgid "Passed"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_attendee__result__pending
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__permanence_time
|
||||
msgid "Permanence time"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__place
|
||||
msgid "Place"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Rate Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__activity_user_id
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__result
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_form_view
|
||||
msgid "Schedules"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_attendee__course_expiration_alert_sent
|
||||
msgid "Shows if notification email for course was sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid "Start Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_start
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__start_date
|
||||
msgid "Start date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__state
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__state
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_state
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "The start date cannot be later than the end date."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__training_company_id
|
||||
msgid "Training company"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__activity_exception_decoration
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__message_unread_counter
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__message_unread_counter
|
||||
msgid "Unread Messages Counter"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_attendee__course_validity_end_date
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__validity_end_date
|
||||
msgid "Validity End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields.selection,name:hr_course.selection__hr_course_schedule__state__waiting_attendees
|
||||
msgid "Waiting attendees"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,field_description:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course__website_message_ids
|
||||
#: model:ir.model.fields,help:hr_course.field_hr_course_schedule__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: code:addons/hr_course/models/hr_course_schedule.py:0
|
||||
#, python-format
|
||||
msgid "You cannot complete the course with pending results"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course.hr_course_schedule_form_view
|
||||
msgid ""
|
||||
"You should set a course back to draft only if you cancelled it by mistake or "
|
||||
"if some of its information is incorrect. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record model="ir.rule" id="hr_employee_course_rule">
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
</record>
|
||||
<record model="ir.rule" id="hr_employee_course_manager_rule">
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openupgradelib import openupgrade # pylint: disable=W7936
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
if openupgrade.column_exists(env.cr, "hr_course", "migration_course_id"):
|
||||
return
|
||||
openupgrade.logged_query(
|
||||
env.cr,
|
||||
"""
|
||||
ALTER TABLE hr_course
|
||||
ADD COLUMN migration_course_id integer""",
|
||||
)
|
||||
openupgrade.logged_query(
|
||||
env.cr,
|
||||
"""
|
||||
INSERT INTO hr_course (
|
||||
name,
|
||||
category_id,
|
||||
permanence,
|
||||
permanence_time,
|
||||
migration_course_id
|
||||
)
|
||||
SELECT name, category_id, permanence, permanence_time, id
|
||||
FROM hr_course_schedule
|
||||
""",
|
||||
)
|
||||
openupgrade.logged_query(
|
||||
env.cr,
|
||||
"""
|
||||
UPDATE hr_course_schedule hcs
|
||||
SET course_id = hc.id
|
||||
FROM hr_course hc
|
||||
WHERE hc.migration_course_id = hcs.id
|
||||
""",
|
||||
)
|
||||
openupgrade.load_data(
|
||||
env.cr, "hr_course", "migrations/14.0.2.0.0/noupdate_changes.xml"
|
||||
)
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openupgradelib import openupgrade # pylint: disable=W7936
|
||||
|
||||
_models_renames = [
|
||||
("hr.course", "hr.course.schedule"),
|
||||
]
|
||||
_column_renames = {
|
||||
"hr_course_attendee": [("course_id", "course_schedule_id")],
|
||||
}
|
||||
_table_renames = [("hr_course", "hr_course_schedule")]
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
if openupgrade.table_exists(env.cr, "hr_course_schedule"):
|
||||
return
|
||||
openupgrade.rename_models(env.cr, _models_renames)
|
||||
openupgrade.rename_tables(env.cr, _table_renames)
|
||||
openupgrade.rename_columns(env.cr, _column_renames)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from . import hr_employee
|
||||
from . import hr_course
|
||||
from . import hr_course_schedule
|
||||
from . import res_company
|
||||
from . import res_config_settings
|
||||
from . import hr_course_attendee
|
||||
from . import hr_course_category
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class HrCourse(models.Model):
|
||||
_name = "hr.course"
|
||||
_description = "Course"
|
||||
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||
|
||||
name = fields.Char(string="Name", required=True, tracking=True)
|
||||
category_id = fields.Many2one(
|
||||
"hr.course.category", string="Category", required=True
|
||||
)
|
||||
|
||||
permanence = fields.Boolean(string="Has Permanence", default=False, tracking=True)
|
||||
permanence_time = fields.Char(string="Permanence time", tracking=True)
|
||||
|
||||
content = fields.Html()
|
||||
objective = fields.Html()
|
||||
evaluation_criteria = fields.Html()
|
||||
|
||||
course_schedule_ids = fields.One2many(
|
||||
"hr.course.schedule", inverse_name="course_id"
|
||||
)
|
||||
|
||||
@api.onchange("permanence")
|
||||
def _onchange_permanence(self):
|
||||
self.permanence_time = False
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HRCourseAttendee(models.Model):
|
||||
_name = "hr.course.attendee"
|
||||
_description = "Course Attendee"
|
||||
|
||||
course_schedule_id = fields.Many2one(
|
||||
"hr.course.schedule", ondelete="cascade", readonly=True, required=True
|
||||
)
|
||||
course_id = fields.Many2one(related="course_schedule_id.course_id")
|
||||
course_validity_end_date = fields.Date(
|
||||
related="course_schedule_id.validity_end_date"
|
||||
)
|
||||
|
||||
name = fields.Char(related="course_schedule_id.name", readonly=True)
|
||||
course_expiration_alert_sent = fields.Boolean(
|
||||
help="Shows if notification email for course was sent"
|
||||
)
|
||||
employee_id = fields.Many2one("hr.employee", readonly=True)
|
||||
course_start = fields.Date(related="course_schedule_id.start_date", readonly=True)
|
||||
course_end = fields.Date(related="course_schedule_id.end_date", readonly=True)
|
||||
state = fields.Selection(related="course_schedule_id.state", readonly=True)
|
||||
result = fields.Selection(
|
||||
[
|
||||
("passed", "Passed"),
|
||||
("failed", "Failed"),
|
||||
("absent", "Absent"),
|
||||
("pending", "Pending"),
|
||||
],
|
||||
string="Result",
|
||||
default="pending",
|
||||
)
|
||||
active = fields.Boolean(default=True, readonly=True)
|
||||
|
||||
def _remove_from_course(self):
|
||||
return [(1, self.id, {"active": False})]
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HRCourseCategory(models.Model):
|
||||
_name = "hr.course.category"
|
||||
_description = "Course Category"
|
||||
|
||||
name = fields.Char(string="Course category", required=True)
|
||||
|
||||
_sql_constraints = [("name_uniq", "unique (name)", "Category already exists !")]
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class HrCourseSchedule(models.Model):
|
||||
_name = "hr.course.schedule"
|
||||
_description = "Course Schedule"
|
||||
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||
|
||||
name = fields.Char(string="Name", required=True, tracking=True)
|
||||
course_id = fields.Many2one("hr.course", string="Course", required=True)
|
||||
validity_end_date = fields.Date()
|
||||
start_date = fields.Date(
|
||||
string="Start date",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
tracking=True,
|
||||
)
|
||||
end_date = fields.Date(
|
||||
string="End date",
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
tracking=True,
|
||||
)
|
||||
currency_id = fields.Many2one(
|
||||
"res.currency",
|
||||
string="Currency",
|
||||
default=lambda self: self.env.user.company_id.currency_id,
|
||||
)
|
||||
cost = fields.Monetary(string="Course Cost", required=True, tracking=True)
|
||||
authorized_by = fields.Many2one(
|
||||
string="Authorized by",
|
||||
comodel_name="hr.employee",
|
||||
required=True,
|
||||
readonly=True,
|
||||
states={"draft": [("readonly", False)]},
|
||||
tracking=True,
|
||||
)
|
||||
state = fields.Selection(
|
||||
[
|
||||
("draft", "Draft"),
|
||||
("waiting_attendees", "Waiting attendees"),
|
||||
("in_progress", "In progress"),
|
||||
("in_validation", "In validation"),
|
||||
("completed", "Completed"),
|
||||
("cancelled", "Cancelled"),
|
||||
],
|
||||
required=True,
|
||||
readonly=True,
|
||||
default="draft",
|
||||
tracking=True,
|
||||
)
|
||||
|
||||
comment = fields.Text("Comment")
|
||||
training_company_id = fields.Many2one("res.partner", string="Training company")
|
||||
instructor_ids = fields.Many2many("res.partner", string="Instructor")
|
||||
place = fields.Char("Place")
|
||||
|
||||
attendant_ids = fields.Many2many(
|
||||
"hr.employee",
|
||||
readonly=True,
|
||||
states={"waiting_attendees": [("readonly", False)]},
|
||||
)
|
||||
course_attendee_ids = fields.One2many(
|
||||
"hr.course.attendee",
|
||||
inverse_name="course_schedule_id",
|
||||
readonly=True,
|
||||
states={"in_validation": [("readonly", False)]},
|
||||
)
|
||||
|
||||
course_expiration_alert_sent = fields.Boolean()
|
||||
note = fields.Text()
|
||||
|
||||
@api.model
|
||||
def send_course_expiration_notification_email(self):
|
||||
company_id = self.env.context.get("company_id") or self.env.company.id
|
||||
channel = (
|
||||
self.env["res.company"].browse(company_id).course_expiration_channel_id
|
||||
)
|
||||
|
||||
if not channel:
|
||||
_logger.info("no channel found for course expiration alerts")
|
||||
return False
|
||||
|
||||
email_template = self.env.ref(
|
||||
"hr_course.mail_template_validity_reminder"
|
||||
).with_context(lang=self.env.company.partner_id.lang)
|
||||
email_values = email_template.generate_email(self.ids, ["body_html", "subject"])
|
||||
|
||||
values = email_values[self.id]
|
||||
self.with_context(email_from=channel.alias_id.display_name,).message_post(
|
||||
body=values["body_html"],
|
||||
channel_ids=channel.ids,
|
||||
message_type="email",
|
||||
subject=values["subject"],
|
||||
)
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def process_validity(self):
|
||||
company_id = self.env.context.get("company_id") or self.env.company.id
|
||||
course_expiration_alerting_delay = (
|
||||
self.env["res.company"].browse(company_id).course_expiration_alerting_delay
|
||||
)
|
||||
|
||||
for course_schedule in self:
|
||||
if course_schedule.validity_end_date:
|
||||
if (
|
||||
course_schedule.validity_end_date
|
||||
- timedelta(days=course_expiration_alerting_delay)
|
||||
<= fields.Date.today()
|
||||
):
|
||||
course_schedule.course_expiration_alert_sent = True
|
||||
course_schedule.send_course_expiration_notification_email()
|
||||
|
||||
def _cron_check_validity_date(self):
|
||||
items = self.search([("course_expiration_alert_sent", "=", False)])
|
||||
items.process_validity()
|
||||
|
||||
@api.constrains("start_date", "end_date")
|
||||
def _check_start_end_dates(self):
|
||||
self.ensure_one()
|
||||
if self.start_date and self.end_date and (self.start_date > self.end_date):
|
||||
raise ValidationError(
|
||||
_("The start date cannot be later than the end date.")
|
||||
)
|
||||
|
||||
def all_passed(self):
|
||||
for attendee in self.course_attendee_ids:
|
||||
attendee.result = "passed"
|
||||
|
||||
def _draft2waiting_values(self):
|
||||
return {"state": "waiting_attendees"}
|
||||
|
||||
def _attendee_values(self, attendee):
|
||||
return {"employee_id": attendee.id, "course_schedule_id": self.id}
|
||||
|
||||
def _waiting2inprogress_values(self):
|
||||
attendants = []
|
||||
employee_attendants = self.course_attendee_ids.mapped("employee_id")
|
||||
for attendee in self.attendant_ids.filtered(
|
||||
lambda r: r not in employee_attendants
|
||||
):
|
||||
attendants.append((0, 0, self._attendee_values(attendee)))
|
||||
deleted_attendees = ""
|
||||
for course_attendee in self.course_attendee_ids.filtered(
|
||||
lambda r: r.employee_id not in self.attendant_ids
|
||||
):
|
||||
attendants += course_attendee._remove_from_course()
|
||||
deleted_attendees += "- %s <br></br>" % course_attendee.employee_id.name
|
||||
if deleted_attendees != "":
|
||||
message = (
|
||||
_("Employees removed from this course: <br></br>%s") % deleted_attendees
|
||||
)
|
||||
self.message_post(body=message)
|
||||
return {"state": "in_progress", "course_attendee_ids": attendants}
|
||||
|
||||
def _inprogress2validation_values(self):
|
||||
return {"state": "in_validation"}
|
||||
|
||||
def _validation2complete_values(self):
|
||||
return {"state": "completed"}
|
||||
|
||||
def _back2draft_values(self):
|
||||
return {"state": "draft"}
|
||||
|
||||
def _cancel_course_values(self):
|
||||
return {"state": "cancelled"}
|
||||
|
||||
def draft2waiting(self):
|
||||
for record in self:
|
||||
record.write(record._draft2waiting_values())
|
||||
|
||||
def waiting2inprogress(self):
|
||||
for record in self:
|
||||
record.write(record._waiting2inprogress_values())
|
||||
|
||||
def inprogress2validation(self):
|
||||
for record in self:
|
||||
record.write(record._inprogress2validation_values())
|
||||
|
||||
def validation2complete(self):
|
||||
for record in self:
|
||||
if self.course_attendee_ids.filtered(
|
||||
lambda r: r.result == "pending" and r.active
|
||||
):
|
||||
raise ValidationError(
|
||||
_("You cannot complete the course with pending results")
|
||||
)
|
||||
else:
|
||||
record.write(record._validation2complete_values())
|
||||
|
||||
def back2draft(self):
|
||||
for record in self:
|
||||
record.write(record._back2draft_values())
|
||||
|
||||
def cancel_course(self):
|
||||
for record in self:
|
||||
record.write(record._cancel_course_values())
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class HrEmployee(models.Model):
|
||||
_inherit = "hr.employee"
|
||||
|
||||
count_courses = fields.Integer(
|
||||
"Number of courses", compute="_compute_count_courses"
|
||||
)
|
||||
|
||||
courses_ids = fields.One2many(
|
||||
"hr.course.attendee",
|
||||
"employee_id",
|
||||
string="Courses",
|
||||
readonly=True,
|
||||
)
|
||||
|
||||
@api.depends("courses_ids")
|
||||
def _compute_count_courses(self):
|
||||
for r in self:
|
||||
r.count_courses = len(r.courses_ids)
|
||||
|
||||
def action_view_course(self):
|
||||
result = self.env["ir.actions.act_window"]._for_xml_id(
|
||||
"hr_course.action_view_course"
|
||||
)
|
||||
result["domain"] = [("employee_id", "=", self.id)]
|
||||
return result
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Copyright 2021 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResCompany(models.Model):
|
||||
_inherit = "res.company"
|
||||
|
||||
course_expiration_channel_id = fields.Many2one(
|
||||
"mail.channel",
|
||||
string="Mailing list to alert",
|
||||
default=lambda self: self.env.ref(
|
||||
"hr_course.mail_channel_course_validity", raise_if_not_found=False
|
||||
),
|
||||
)
|
||||
course_expiration_alerting_delay = fields.Integer(
|
||||
string="Alerting delay before end of validity (days)"
|
||||
)
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# Copyright 2021 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
course_expiration_channel_id = fields.Many2one(
|
||||
related="company_id.course_expiration_channel_id", readonly=False
|
||||
)
|
||||
course_expiration_alerting_delay = fields.Integer(
|
||||
related="company_id.course_expiration_alerting_delay", readonly=False
|
||||
)
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
* Enric Tobella <etobella@creublanca.es>
|
||||
* Jaime Arroyo <jaime.arroyo@creublanca.es>
|
||||
* Anna Janiszewska <anna.janiszewska@camptocamp.com>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
This module allows your to manage employee's training courses, course dates and all its
|
||||
validation process.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
To create a Course go to Employees -> Courses.
|
||||
|
||||
To create a Training Schedule go to Employees -> Courses Schedule.
|
||||
|
||||
Fill the information and click assign attendees to continue. Assign them and
|
||||
then start the course session.
|
||||
|
||||
One it has finished you must enter the results and finish the course session.
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" ?>
|
||||
<odoo noupdate="1">
|
||||
<record model="ir.rule" id="hr_employee_course_rule">
|
||||
<field name="name">hr.employee.course.rule</field>
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>[('attendant_ids', 'in', user.employee_ids.ids)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_user'))]" />
|
||||
<field name="global" eval="False" />
|
||||
</record>
|
||||
<record model="ir.rule" id="hr_employee_course_manager_rule">
|
||||
<field name="name">hr.employee.course.rule</field>
|
||||
<field name="model_id" ref="model_hr_course_schedule" />
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('hr.group_hr_manager'))]" />
|
||||
<field name="global" eval="False" />
|
||||
</record>
|
||||
<record model="ir.rule" id="hr_employee_course_attendee_rule">
|
||||
<field name="name">hr.employee.attendee.course.rule</field>
|
||||
<field name="model_id" ref="model_hr_course_attendee" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>[('employee_id', 'in', user.employee_ids.ids)]</field>
|
||||
<field name="groups" eval="[(4, ref('base.group_user'))]" />
|
||||
<field name="global" eval="False" />
|
||||
</record>
|
||||
<record model="ir.rule" id="hr_employee_course_attendee_manager_rule">
|
||||
<field name="name">hr.employee.attendee.course.rule</field>
|
||||
<field name="model_id" ref="model_hr_course_attendee" />
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('hr.group_hr_manager'))]" />
|
||||
<field name="global" eval="False" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_hr_course,access_hr_course,model_hr_course,base.group_user,1,0,0,0
|
||||
access_hr_course_manager,access_hr_course_manager,model_hr_course,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_course_schedule,access_hr_course_schedule,model_hr_course_schedule,base.group_user,1,0,0,0
|
||||
access_hr_course_schedule_manager,access_hr_course_schedule_manager,model_hr_course_schedule,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_course_attendee,access_hr_course_attendee,model_hr_course_attendee,base.group_user,1,0,0,0
|
||||
access_hr_course_attendee_manager,access_hr_course_attendee_manager,model_hr_course_attendee,hr.group_hr_manager,1,1,1,1
|
||||
access_hr_course_category,access_hr_course_category,model_hr_course_category,base.group_user,1,0,0,0
|
||||
access_hr_course_category_manager,access_hr_course_category_manager,model_hr_course_category,hr.group_hr_manager,1,1,1,1
|
||||
|
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,433 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>HR Course</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="hr-course">
|
||||
<h1 class="title">HR Course</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:ddeee0d152c5f7cd6896862fed775d928e76cfa9ab645cc1eb716b3f2a055f10
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/hr/tree/14.0/hr_course"><img alt="OCA/hr" src="https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/hr-14-0/hr-14-0-hr_course"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/hr&target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module allows your to manage employee’s training courses, course dates and all its
|
||||
validation process.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
|
||||
<p>To create a Course go to Employees -> Courses.</p>
|
||||
<p>To create a Training Schedule go to Employees -> Courses Schedule.</p>
|
||||
<p>Fill the information and click assign attendees to continue. Assign them and
|
||||
then start the course session.</p>
|
||||
<p>One it has finished you must enter the results and finish the course session.</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/hr/issues">GitHub Issues</a>.
|
||||
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
|
||||
<a class="reference external" href="https://github.com/OCA/hr/issues/new?body=module:%20hr_course%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Creu Blanca</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Enric Tobella <<a class="reference external" href="mailto:etobella@creublanca.es">etobella@creublanca.es</a>></li>
|
||||
<li>Jaime Arroyo <<a class="reference external" href="mailto:jaime.arroyo@creublanca.es">jaime.arroyo@creublanca.es</a>></li>
|
||||
<li>Anna Janiszewska <<a class="reference external" href="mailto:anna.janiszewska@camptocamp.com">anna.janiszewska@camptocamp.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>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.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr/tree/14.0/hr_course">OCA/hr</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import test_hr_course
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import odoo.tests.common as common
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class TestHrCourse(common.TransactionCase):
|
||||
def setUp(self):
|
||||
super(TestHrCourse, self).setUp()
|
||||
self.course_categ = self.env["hr.course.category"].create(
|
||||
{"name": "Category 1"}
|
||||
)
|
||||
self.employee1 = self.env["hr.employee"].create({"name": "Employee 1"})
|
||||
self.employee2 = self.env["hr.employee"].create({"name": "Employee 2"})
|
||||
self.course_id = self.env["hr.course"].create(
|
||||
{
|
||||
"name": "Course name",
|
||||
"category_id": self.course_categ.id,
|
||||
"permanence": True,
|
||||
"permanence_time": "1 month",
|
||||
}
|
||||
)
|
||||
self.course_schedule_id = self.env["hr.course.schedule"].create(
|
||||
{
|
||||
"name": "Convocatory",
|
||||
"course_id": self.course_id.id,
|
||||
"cost": 100,
|
||||
"authorized_by": self.employee1.id,
|
||||
"start_date": "2019-02-15",
|
||||
"end_date": "2019-02-20",
|
||||
}
|
||||
)
|
||||
|
||||
def test_hr_course(self):
|
||||
self.course_id.permanence = False
|
||||
self.course_id._onchange_permanence()
|
||||
self.assertFalse(self.course_id.permanence_time)
|
||||
|
||||
def test_hr_course_schedule(self):
|
||||
with self.assertRaises(ValidationError):
|
||||
self.course_schedule_id.write({"end_date": "2019-02-10"})
|
||||
|
||||
self.assertEqual(self.course_schedule_id.state, "draft")
|
||||
self.course_schedule_id.cancel_course()
|
||||
self.assertEqual(self.course_schedule_id.state, "cancelled")
|
||||
self.course_schedule_id.back2draft()
|
||||
|
||||
self.course_schedule_id.draft2waiting()
|
||||
self.assertEqual(self.course_schedule_id.state, "waiting_attendees")
|
||||
self.course_schedule_id.attendant_ids = [
|
||||
(6, 0, [self.employee1.id, self.employee2.id])
|
||||
]
|
||||
self.assertTrue(self.course_schedule_id.attendant_ids)
|
||||
self.assertEqual(len(self.course_schedule_id.attendant_ids), 2)
|
||||
|
||||
self.course_schedule_id.waiting2inprogress()
|
||||
self.assertEqual(self.course_schedule_id.state, "in_progress")
|
||||
self.assertEqual(len(self.course_schedule_id.course_attendee_ids), 2)
|
||||
self.course_schedule_id.attendant_ids = [(2, self.employee2.id, 0)]
|
||||
self.course_schedule_id.waiting2inprogress()
|
||||
self.assertEqual(len(self.course_schedule_id.attendant_ids), 1)
|
||||
self.assertEqual(len(self.course_schedule_id.course_attendee_ids), 1)
|
||||
self.employee1._compute_count_courses()
|
||||
self.assertEqual(self.employee1.count_courses, 1)
|
||||
self.employee1.action_view_course()
|
||||
|
||||
self.course_schedule_id.inprogress2validation()
|
||||
self.assertEqual(self.course_schedule_id.state, "in_validation")
|
||||
with self.assertRaises(ValidationError):
|
||||
self.course_schedule_id.validation2complete()
|
||||
self.course_schedule_id.all_passed()
|
||||
self.assertEqual(
|
||||
self.course_schedule_id.course_attendee_ids[0].result, "passed"
|
||||
)
|
||||
self.course_schedule_id.validation2complete()
|
||||
self.assertEqual(self.course_schedule_id.state, "completed")
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="view_course_category_form" model="ir.ui.view">
|
||||
<field name="name">hr.course.category.form</field>
|
||||
<field name="model">hr.course.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Course Categories">
|
||||
<group>
|
||||
<field name="name" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_course_category_search" model="ir.ui.view">
|
||||
<field name="name">hr.course.category.search</field>
|
||||
<field name="model">hr.course.category</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Course Categories">
|
||||
<field name="name" string="Category" />
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_course_category_list" model="ir.ui.view">
|
||||
<field name="name">hr.course.category.list</field>
|
||||
<field name="model">hr.course.category</field>
|
||||
<field eval="8" name="priority" />
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="open_view_course_category_form" model="ir.actions.act_window">
|
||||
<field name="name">Course Categories</field>
|
||||
<field name="res_model">hr.course.category</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="menu_view_course_category_form"
|
||||
action="open_view_course_category_form"
|
||||
parent="hr.menu_human_resources_configuration"
|
||||
sequence="10"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,224 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2019 Creu Blanca
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||
<odoo>
|
||||
<record id="hr_course_schedule_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.schedule.form</field>
|
||||
<field name="model">hr.course.schedule</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Courses Schedule">
|
||||
<header>
|
||||
<button
|
||||
string="Assign attendees"
|
||||
name="draft2waiting"
|
||||
states="draft"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<button
|
||||
string="Start Course"
|
||||
name="waiting2inprogress"
|
||||
states="waiting_attendees"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<button
|
||||
string="Rate Course"
|
||||
name="inprogress2validation"
|
||||
states="in_progress"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<button
|
||||
string="Complete Course"
|
||||
name="validation2complete"
|
||||
states="in_validation"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<button
|
||||
string="Cancel Course"
|
||||
name="cancel_course"
|
||||
states="draft,waiting_attendees,in_progress,in_validation"
|
||||
type="object"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<button
|
||||
name="back2draft"
|
||||
type="object"
|
||||
string="Back to Draft"
|
||||
states="cancelled,waiting_attendees,in_progress,in_validation,completed"
|
||||
groups="hr.group_hr_manager"
|
||||
confirm="You should set a course back to draft only if you cancelled it by mistake or if some of its information is incorrect. Do you want to continue?"
|
||||
/>
|
||||
<field
|
||||
name="state"
|
||||
widget="statusbar"
|
||||
statusbar_visible="draft,waiting_attendees,in_progress,in_validation,completed"
|
||||
/>
|
||||
</header>
|
||||
<sheet string="Course">
|
||||
<label
|
||||
string="Draft Course"
|
||||
for="state"
|
||||
attrs="{'invisible': [('state','!=','draft')]}"
|
||||
>
|
||||
<br />
|
||||
</label>
|
||||
<label
|
||||
string="Cancelled Course"
|
||||
style="color:red"
|
||||
for="state"
|
||||
attrs="{'invisible': [('state','!=','cancelled')]}"
|
||||
>
|
||||
<br />
|
||||
</label>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only" />
|
||||
<h1>
|
||||
<field name="name" placeholder="Convocatory" />
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="course_id" />
|
||||
<field
|
||||
name="cost"
|
||||
widget="monetary"
|
||||
options="{'currency_field': 'currency_id'}"
|
||||
/>
|
||||
<field
|
||||
name="currency_id"
|
||||
groups="base.group_multi_currency"
|
||||
/>
|
||||
<field name="authorized_by" />
|
||||
<field name="training_company_id" />
|
||||
<field name="instructor_ids" widget="many2many_tags" />
|
||||
<field name="place" />
|
||||
<field name="comment" />
|
||||
<field name="validity_end_date" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="start_date" />
|
||||
<field name="end_date" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page
|
||||
string="Attendees"
|
||||
attrs="{'invisible': [('state','not in',['draft', 'waiting_attendees','cancelled'])]}"
|
||||
>
|
||||
<field name="attendant_ids" />
|
||||
</page>
|
||||
<page
|
||||
string="Course Results"
|
||||
attrs="{'invisible': [('state','not in',['in_progress','in_validation','completed'])]}"
|
||||
>
|
||||
<div class="text-right" states="in_validation">
|
||||
<br />
|
||||
<button
|
||||
string="Pass everybody"
|
||||
name="all_passed"
|
||||
type="object"
|
||||
class="btn-primary"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
</div>
|
||||
<field name="course_attendee_ids" widget="one2many_list" />
|
||||
</page>
|
||||
<page
|
||||
name="note"
|
||||
string="Internal notes"
|
||||
groups="hr.group_hr_manager"
|
||||
>
|
||||
<field name="note" />
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="activity_ids" widget="mail_activity" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_course_schedule_search_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.schedule.search</field>
|
||||
<field name="model">hr.course.schedule</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name" string="Course Name" />
|
||||
<field name="course_id" string="Course" />
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_course_schedule_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.schedule.tree</field>
|
||||
<field name="model">hr.course.schedule</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree
|
||||
decoration-success="state=='completed'"
|
||||
decoration-muted="state=='cancelled'"
|
||||
>
|
||||
<field name="name" />
|
||||
<field name="start_date" />
|
||||
<field name="end_date" />
|
||||
<field name="validity_end_date" />
|
||||
<field name="state" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_course_attendee_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.attendee.tree</field>
|
||||
<field name="model">hr.course.attendee</field>
|
||||
<field name="priority">30</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree
|
||||
decoration-success="result=='passed'"
|
||||
decoration-danger="result=='failed' or result=='absent'"
|
||||
editable="bottom"
|
||||
create="false"
|
||||
delete="false"
|
||||
>
|
||||
<field name="employee_id" />
|
||||
<field name="result" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_course_attendee_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.attendee.form</field>
|
||||
<field name="model">hr.course.attendee</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group>
|
||||
<field name="course_schedule_id" />
|
||||
<field name="employee_id" />
|
||||
<field name="state" />
|
||||
<field name="result" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="course_start" />
|
||||
<field name="course_end" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_hr_course_schedule" model="ir.actions.act_window">
|
||||
<field name="name">Courses Schedule</field>
|
||||
<field name="res_model">hr.course.schedule</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="menu_hr_course_schedule"
|
||||
name="Courses Schedule"
|
||||
parent="hr_course.menu_hr_course"
|
||||
sequence="90"
|
||||
groups="hr.group_hr_manager"
|
||||
action="action_hr_course_schedule"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2019 Creu Blanca
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||
<odoo>
|
||||
<record id="hr_course_form_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.form</field>
|
||||
<field name="model">hr.course</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Courses">
|
||||
<sheet string="Course">
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="name" placeholder="Course name" />
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="category_id" />
|
||||
<field name="permanence" />
|
||||
<field
|
||||
name="permanence_time"
|
||||
attrs="{'invisible': [('permanence','=',False)]}"
|
||||
/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="content" string="Content">
|
||||
<field name="content" />
|
||||
</page>
|
||||
<page name="objective" string="Objective">
|
||||
<field name="objective" />
|
||||
</page>
|
||||
<page name="evaluation_criteria" string="Evaluation criteria">
|
||||
<field name="evaluation_criteria" />
|
||||
</page>
|
||||
<page string="Schedules">
|
||||
<field name="course_schedule_ids" nolabel="1">
|
||||
<tree editable="bottom">
|
||||
<field name="name" />
|
||||
<field
|
||||
name="cost"
|
||||
widget="monetary"
|
||||
options="{'currency_field': 'currency_id'}"
|
||||
/>
|
||||
<field
|
||||
name="currency_id"
|
||||
groups="base.group_multi_currency"
|
||||
/>
|
||||
<field name="authorized_by" />
|
||||
<field name="start_date" />
|
||||
<field name="end_date" />
|
||||
<field name="state" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="activity_ids" widget="mail_activity" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_course_tree_view" model="ir.ui.view">
|
||||
<field name="name">hr.course.tree</field>
|
||||
<field name="model">hr.course</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name" />
|
||||
<field name="category_id" />
|
||||
<field name="content" />
|
||||
<field name="objective" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_hr_course" model="ir.actions.act_window">
|
||||
<field name="name">Courses</field>
|
||||
<field name="res_model">hr.course</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="menu_hr_course"
|
||||
name="Courses"
|
||||
parent="hr.menu_hr_root"
|
||||
groups="hr.group_hr_manager"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_hr_course_courses"
|
||||
name="Courses"
|
||||
parent="hr_course.menu_hr_course"
|
||||
groups="hr.group_hr_manager"
|
||||
action="action_hr_course"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="view_hr_employee_form" model="ir.ui.view">
|
||||
<field name="name">hr.employee.course.form</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="inherit_id" ref="hr.view_employee_form" />
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button
|
||||
name="action_view_course"
|
||||
type="object"
|
||||
icon="fa-graduation-cap"
|
||||
class="oe_stat_button"
|
||||
>
|
||||
<field name="count_courses" widget="statinfo" string="Courses" />
|
||||
<field name='courses_ids' invisible="1" />
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="hr_course_attendee_tree_employee_view">
|
||||
<field name="name">hr.course.attendee.tree.employee</field>
|
||||
<field name="model">hr.course.attendee</field>
|
||||
<field name="priority">100</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree
|
||||
create="false"
|
||||
delete="false"
|
||||
decoration-muted="state=='cancelled'"
|
||||
decoration-success="state!='cancelled' and result=='passed'"
|
||||
decoration-danger="state!='cancelled' and (result=='failed' or result=='absent')"
|
||||
>
|
||||
<field name="course_schedule_id" />
|
||||
<field name="state" />
|
||||
<field name="course_start" />
|
||||
<field name="course_end" />
|
||||
<field name="result" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_view_course" model="ir.actions.act_window">
|
||||
<field name="name">Courses</field>
|
||||
<field name="res_model">hr.course.attendee</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field
|
||||
name="view_ids"
|
||||
eval="[(5,0,0),
|
||||
(0,0,{'view_mode':'tree', 'view_id': ref('hr_course_attendee_tree_employee_view')}),
|
||||
(0,0,{'view_mode':'form'})]"
|
||||
/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view">
|
||||
<field name="name">Set course notification</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="hr.res_config_settings_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath
|
||||
expr="//div[@name='employee_rights_setting_container']"
|
||||
position="after"
|
||||
>
|
||||
<h2>Courses</h2>
|
||||
<div
|
||||
class="row mt16 o_settings_container"
|
||||
name="work_organization_setting_container"
|
||||
>
|
||||
<div class="col-12 col-lg-6 o_setting_box">
|
||||
<div>
|
||||
<label for="course_expiration_channel_id" />
|
||||
<field name="course_expiration_channel_id" />
|
||||
<label for="course_expiration_alerting_delay" />
|
||||
<field name="course_expiration_alerting_delay" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
================
|
||||
Hr Course Survey
|
||||
================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:9106aa496f0813d33af06a01289e734c8bc3215a3a3967eeffb414c14713b316
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |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-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/hr/tree/14.0/hr_course_survey
|
||||
:alt: OCA/hr
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/hr-14-0/hr-14-0-hr_course_survey
|
||||
: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&target_branch=14.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module allows you to add a survey to your employee's training courses.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
·Create a Survey: Surveys
|
||||
|
||||
·Create a Course: Employees -> Courses
|
||||
|
||||
·Add the Survey to the Course (Examination Survey field)
|
||||
|
||||
·Create a Training Schedule: Employees -> Courses Schedule
|
||||
|
||||
·Assign attendees to continue
|
||||
|
||||
(If a course is failed, you can select the "retry" option)
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/hr/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 <https://github.com/OCA/hr/issues/new?body=module:%20hr_course_survey%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* Creu Blanca
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Enric Tobella <etobella@creublanca.es>
|
||||
* Olga Marco <olga.marco@creublanca.es>
|
||||
|
||||
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.
|
||||
|
||||
This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/14.0/hr_course_survey>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import models
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Copyright 2021 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "Hr Course Survey",
|
||||
"summary": """
|
||||
Evaluate a course using a Schedule""",
|
||||
"version": "14.0.1.0.2",
|
||||
"license": "AGPL-3",
|
||||
"author": "Creu Blanca,Odoo Community Association (OCA)",
|
||||
"category":"Odex25-Survey/Odex25-Survey",
|
||||
"website": "https://github.com/OCA/hr",
|
||||
"depends": ["hr_course", "survey"],
|
||||
"data": [
|
||||
"data/mail.xml",
|
||||
"views/hr_course_attendee.xml",
|
||||
"views/hr_course.xml",
|
||||
"views/hr_course_schedule.xml",
|
||||
],
|
||||
"demo": [],
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="mail_template_user_input_invite" model="mail.template">
|
||||
<field name="name">Survey: Invite</field>
|
||||
<field name="model_id" ref="survey.model_survey_user_input" />
|
||||
<field name="subject">Participate to ${object.survey_id.title} survey</field>
|
||||
<field
|
||||
name="email_to"
|
||||
>${(object.partner_id.email_formatted or object.email) |safe}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
Dear ${object.partner_id.name or 'participant'}<br /><br />
|
||||
% if object.survey_id.certificate:
|
||||
You have been invited to take a new certification.
|
||||
% else:
|
||||
We are conducting a survey and your response would be appreciated.
|
||||
% endif
|
||||
<div style="margin: 16px 0px 16px 0px;">
|
||||
<a
|
||||
href="${('%s?answer_token=%s' % (object.survey_id.public_url, object.access_token)) | safe}"
|
||||
style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;"
|
||||
>
|
||||
% if object.survey_id.certificate:
|
||||
Start Certification
|
||||
% else:
|
||||
Start Survey
|
||||
% endif
|
||||
</a>
|
||||
</div>
|
||||
% if object.deadline:
|
||||
Please answer the survey for ${format_date(object.deadline)}.<br /><br />
|
||||
% endif
|
||||
Thank you for your participation.
|
||||
</p>
|
||||
</div>
|
||||
</field>
|
||||
<field name="lang">${object.partner_id.lang}</field>
|
||||
<field name="auto_delete" eval="True" />
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course_survey
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ca_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"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,body_html:hr_course_survey.mail_template_user_input_invite
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" You have been invited to take a new certification.\n"
|
||||
" % else:\n"
|
||||
" We are conducting a survey and your response would be "
|
||||
"appreciated.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % (object."
|
||||
"survey_id.public_url, object.access_token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Start Certification\n"
|
||||
" % else:\n"
|
||||
" Start Survey\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Please answer the survey for ${format_date(object.deadline)}.<br/"
|
||||
"><br/>\n"
|
||||
" % endif\n"
|
||||
" Thank you for your participation.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course
|
||||
msgid "Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_attendee
|
||||
msgid "Course Attendee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_schedule
|
||||
msgid "Course Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__examination_survey_id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__examination_survey_id
|
||||
msgid "Examination Survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__hr_course_attendee_ids
|
||||
msgid "Hr Course Attendee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,subject:hr_course_survey.mail_template_user_input_invite
|
||||
msgid "Participate to ${object.survey_id.title} survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course_survey.hr_course_attendee_tree_view
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__survey_answer_id
|
||||
msgid "Survey Answer"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent because the previous survey has not been answered"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent if the user has not failed"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,227 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course_survey
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-02-18 21:33+0000\n"
|
||||
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\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_course_survey
|
||||
#: model:mail.template,body_html:hr_course_survey.mail_template_user_input_invite
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" You have been invited to take a new certification.\n"
|
||||
" % else:\n"
|
||||
" We are conducting a survey and your response would be "
|
||||
"appreciated.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % (object."
|
||||
"survey_id.public_url, object.access_token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Start Certification\n"
|
||||
" % else:\n"
|
||||
" Start Survey\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Please answer the survey for ${format_date(object.deadline)}.<br/"
|
||||
"><br/>\n"
|
||||
" % endif\n"
|
||||
" Thank you for your participation.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Querido ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Has sido invitado a tomar la siguiente certificación.\n"
|
||||
" % else:\n"
|
||||
" Estamos realizanod la siguiente encuesta y nos interesaría saber "
|
||||
"tu opinión.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % ("
|
||||
"object.survey_id.public_url, object.token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Empezar certificación\n"
|
||||
" % else:\n"
|
||||
" Empezar encuesta\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Por favor, responde antes del ${format_date(object.deadline)}.<"
|
||||
"br/><br/>\n"
|
||||
" % endif\n"
|
||||
" Grácias por tu participación.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course
|
||||
msgid "Course"
|
||||
msgstr "Curso"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_attendee
|
||||
msgid "Course Attendee"
|
||||
msgstr "Asistente"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_schedule
|
||||
msgid "Course Schedule"
|
||||
msgstr "Programación del curso"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Mostrar Nombre"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__examination_survey_id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__examination_survey_id
|
||||
msgid "Examination Survey"
|
||||
msgstr "Encuesta de examen"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__hr_course_attendee_ids
|
||||
msgid "Hr Course Attendee"
|
||||
msgstr "Asistente"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última Modificación el"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,subject:hr_course_survey.mail_template_user_input_invite
|
||||
msgid "Participate to ${object.survey_id.title} survey"
|
||||
msgstr "Participa a en la encuesta ${object.surey_id.title}"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course_survey.hr_course_attendee_tree_view
|
||||
msgid "Retry"
|
||||
msgstr "Reintentar"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__survey_answer_id
|
||||
msgid "Survey Answer"
|
||||
msgstr "Respuesta"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr "Entrada de usuario de la encuesta"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent because the previous survey has not been answered"
|
||||
msgstr ""
|
||||
"No se puede enviar la encuesta por que el anterior envío no ha sido "
|
||||
"contestado"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent if the user has not failed"
|
||||
msgstr "La encuesta no puede reenviarse si el usuario no ha suspendido"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
#~ " % if object.survey_id.certificate:\n"
|
||||
#~ " You have been invited to take a new certification.\n"
|
||||
#~ " % else:\n"
|
||||
#~ " We are conducting a survey and your response would be "
|
||||
#~ "appreciated.\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
#~ " <a href=\"${('%s?answer_token=%s' % (object."
|
||||
#~ "survey_id.public_url, object.token)) | safe}\" style=\"background-color: "
|
||||
#~ "#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; "
|
||||
#~ "border-radius: 5px; font-size:13px;\">\n"
|
||||
#~ " % if object.survey_id.certificate:\n"
|
||||
#~ " Start Certification\n"
|
||||
#~ " % else:\n"
|
||||
#~ " Start Survey\n"
|
||||
#~ " % endif\n"
|
||||
#~ " </a>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " % if object.deadline:\n"
|
||||
#~ " Please answer the survey for ${format_date(object.deadline)}."
|
||||
#~ "<br/><br/>\n"
|
||||
#~ " % endif\n"
|
||||
#~ " Thank you for your participation.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Querido ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
#~ " % if object.survey_id.certificate:\n"
|
||||
#~ " Has sido invitado a tomar la siguiente certificación.\n"
|
||||
#~ " % else:\n"
|
||||
#~ " Estamos realizanod la siguiente encuesta y nos interesaría "
|
||||
#~ "saber tu opinión.\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
#~ " <a href=\"${('%s?answer_token=%s' % (object."
|
||||
#~ "survey_id.public_url, object.token)) | safe}\" style=\"background-color: "
|
||||
#~ "#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; "
|
||||
#~ "border-radius: 5px; font-size:13px;\">\n"
|
||||
#~ " % if object.survey_id.certificate:\n"
|
||||
#~ " Empezar certificación\n"
|
||||
#~ " % else:\n"
|
||||
#~ " Empezar encuesta\n"
|
||||
#~ " % endif\n"
|
||||
#~ " </a>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " % if object.deadline:\n"
|
||||
#~ " Por favor, responde antes del ${format_date(object.deadline)}."
|
||||
#~ "<br/><br/>\n"
|
||||
#~ " % endif\n"
|
||||
#~ " Grácias por tu participación.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course_survey
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: es_PA\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,body_html:hr_course_survey.mail_template_user_input_invite
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" You have been invited to take a new certification.\n"
|
||||
" % else:\n"
|
||||
" We are conducting a survey and your response would be "
|
||||
"appreciated.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % (object."
|
||||
"survey_id.public_url, object.access_token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Start Certification\n"
|
||||
" % else:\n"
|
||||
" Start Survey\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Please answer the survey for ${format_date(object.deadline)}.<br/"
|
||||
"><br/>\n"
|
||||
" % endif\n"
|
||||
" Thank you for your participation.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course
|
||||
msgid "Course"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_attendee
|
||||
msgid "Course Attendee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_schedule
|
||||
msgid "Course Schedule"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__examination_survey_id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__examination_survey_id
|
||||
msgid "Examination Survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__hr_course_attendee_ids
|
||||
msgid "Hr Course Attendee"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,subject:hr_course_survey.mail_template_user_input_invite
|
||||
msgid "Participate to ${object.survey_id.title} survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course_survey.hr_course_attendee_tree_view
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__survey_answer_id
|
||||
msgid "Survey Answer"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent because the previous survey has not been answered"
|
||||
msgstr ""
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent if the user has not failed"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * hr_course_survey
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-05-29 15:08+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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_course_survey
|
||||
#: model:mail.template,body_html:hr_course_survey.mail_template_user_input_invite
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" You have been invited to take a new certification.\n"
|
||||
" % else:\n"
|
||||
" We are conducting a survey and your response would be "
|
||||
"appreciated.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % (object."
|
||||
"survey_id.public_url, object.access_token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Start Certification\n"
|
||||
" % else:\n"
|
||||
" Start Survey\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Please answer the survey for ${format_date(object.deadline)}.<br/"
|
||||
"><br/>\n"
|
||||
" % endif\n"
|
||||
" Thank you for your participation.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Spettabile ${object.partner_id.name or 'participant'}<br/><br/>\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Siete invitati ad acquisire una nuova certificazione.\n"
|
||||
" % else:\n"
|
||||
" Stiamo conducendo un sondaggio è apprezzeremmo la vostra "
|
||||
"risposta.\n"
|
||||
" % endif\n"
|
||||
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
|
||||
" <a href=\"${('%s?answer_token=%s' % (object."
|
||||
"survey_id.public_url, object.access_token)) | safe}\" style=\"background-"
|
||||
"color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: "
|
||||
"#fff; border-radius: 5px; font-size:13px;\">\n"
|
||||
" % if object.survey_id.certificate:\n"
|
||||
" Inizio certificazione\n"
|
||||
" % else:\n"
|
||||
" Inizio sondaggio\n"
|
||||
" % endif\n"
|
||||
" </a>\n"
|
||||
" </div>\n"
|
||||
" % if object.deadline:\n"
|
||||
" Si prega di rispondere al sondaggio entro il "
|
||||
"${format_date(object.deadline)}.<br/><br/>\n"
|
||||
" % endif\n"
|
||||
" Ringraziamo per la partecipazione.\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course
|
||||
msgid "Course"
|
||||
msgstr "Corso"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_attendee
|
||||
msgid "Course Attendee"
|
||||
msgstr "Partecipante al corso"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_hr_course_schedule
|
||||
msgid "Course Schedule"
|
||||
msgstr "Calendario corso"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__display_name
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__examination_survey_id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__examination_survey_id
|
||||
msgid "Examination Survey"
|
||||
msgstr "Sondaggio esame"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__hr_course_attendee_ids
|
||||
msgid "Hr Course Attendee"
|
||||
msgstr "Partecipante al corso RU"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule__id
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_schedule____last_update
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_survey_user_input____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Ultima modifica il"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:mail.template,subject:hr_course_survey.mail_template_user_input_invite
|
||||
msgid "Participate to ${object.survey_id.title} survey"
|
||||
msgstr "Partecipa al sondaggio ${object.survey_id.title}"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model_terms:ir.ui.view,arch_db:hr_course_survey.hr_course_attendee_tree_view
|
||||
msgid "Retry"
|
||||
msgstr "Riprova"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model.fields,field_description:hr_course_survey.field_hr_course_attendee__survey_answer_id
|
||||
msgid "Survey Answer"
|
||||
msgstr "Risposta sondaggio"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: model:ir.model,name:hr_course_survey.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr "Risposta utente al sondaggio"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent because the previous survey has not been answered"
|
||||
msgstr ""
|
||||
"Il sondaggio non può essere inviato perché il sondaggio precedente non è "
|
||||
"stato compilato"
|
||||
|
||||
#. module: hr_course_survey
|
||||
#: code:addons/hr_course_survey/models/hr_course_attendee.py:0
|
||||
#, python-format
|
||||
msgid "Survey cannot be sent if the user has not failed"
|
||||
msgstr "Il sondaggio non può essere inviato se l'utente non ha fallito"
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
from . import hr_course_schedule
|
||||
from . import hr_course
|
||||
from . import hr_course_attendee
|
||||
from . import survey_user_input
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
# Copyright 2021 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HrCourse(models.Model):
|
||||
|
||||
_inherit = "hr.course"
|
||||
|
||||
examination_survey_id = fields.Many2one(
|
||||
"survey.survey",
|
||||
domain=[("state", "=", "open"), ("scoring_type", "!=", "no_scoring")],
|
||||
)
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
# Copyright 2021 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import _, fields, models, tools
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class HrCourseAttendee(models.Model):
|
||||
|
||||
_inherit = "hr.course.attendee"
|
||||
|
||||
survey_answer_id = fields.Many2one("survey.user_input", readonly=True)
|
||||
|
||||
def _get_examination_survey_vals(self):
|
||||
vals = {}
|
||||
if self.employee_id.user_id:
|
||||
vals["user"] = self.employee_id.user_id
|
||||
else:
|
||||
vals["partner"] = (
|
||||
self.employee_id.address_id or self.employee_id.address_home_id
|
||||
)
|
||||
return vals
|
||||
|
||||
def _notify_survey(self):
|
||||
template = self.env.ref("hr_course_survey.mail_template_user_input_invite")
|
||||
subject = (
|
||||
self.env["mail.template"]
|
||||
.with_context(safe=True)
|
||||
._render_template(
|
||||
template.subject,
|
||||
"survey.user_input",
|
||||
[self.survey_answer_id.id],
|
||||
post_process=True,
|
||||
)
|
||||
)[self.survey_answer_id.id]
|
||||
body = self.env["mail.template"]._render_template(
|
||||
template.body_html,
|
||||
"survey.user_input",
|
||||
[self.survey_answer_id.id],
|
||||
post_process=True,
|
||||
)[self.survey_answer_id.id]
|
||||
# post the message
|
||||
mail_values = {
|
||||
"email_from": tools.formataddr((self.env.user.name, self.env.user.email)),
|
||||
"author_id": self.env.user.partner_id.id,
|
||||
"model": None,
|
||||
"res_id": None,
|
||||
"subject": subject,
|
||||
"body_html": body,
|
||||
"auto_delete": True,
|
||||
}
|
||||
if self.survey_answer_id.partner_id:
|
||||
mail_values["recipient_ids"] = [(4, self.survey_answer_id.partner_id.id)]
|
||||
else:
|
||||
mail_values["email_to"] = self.survey_answer_id.email
|
||||
return self.env["mail.mail"].sudo().create(mail_values)
|
||||
|
||||
def _send_survey(self):
|
||||
vals = self._get_examination_survey_vals()
|
||||
survey = self.course_schedule_id.examination_survey_id
|
||||
self.survey_answer_id = survey._create_answer(**vals)
|
||||
self._notify_survey()
|
||||
|
||||
def resend_survey(self):
|
||||
self.ensure_one()
|
||||
if self.survey_answer_id.state != "done":
|
||||
raise ValidationError(
|
||||
_(
|
||||
"Survey cannot be sent because the "
|
||||
"previous survey has not been answered"
|
||||
)
|
||||
)
|
||||
if self.result != "failed":
|
||||
raise ValidationError(_("Survey cannot be sent if the user has not failed"))
|
||||
self._send_survey()
|
||||
self.write({"result": "pending"})
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# Copyright 2021 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HrCourseSchedule(models.Model):
|
||||
|
||||
_inherit = "hr.course.schedule"
|
||||
|
||||
examination_survey_id = fields.Many2one(
|
||||
"survey.survey",
|
||||
related="course_id.examination_survey_id",
|
||||
)
|
||||
|
||||
def inprogress2validation(self):
|
||||
result = super().inprogress2validation()
|
||||
for record in self:
|
||||
if record.examination_survey_id:
|
||||
for attendee in record.course_attendee_ids:
|
||||
attendee._send_survey()
|
||||
return result
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Copyright 2021 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class SurveyUserInput(models.Model):
|
||||
|
||||
_inherit = "survey.user_input"
|
||||
|
||||
hr_course_attendee_ids = fields.One2many(
|
||||
"hr.course.attendee", inverse_name="survey_answer_id"
|
||||
)
|
||||
|
||||
def _attendee_write_vals(self):
|
||||
return {
|
||||
"result": "failed"
|
||||
if not self.scoring_success and self.survey_id.scoring_type != "no_scoring"
|
||||
else "passed"
|
||||
}
|
||||
|
||||
def _mark_done(self):
|
||||
result = super()._mark_done()
|
||||
for user_input in self:
|
||||
if user_input.hr_course_attendee_ids:
|
||||
user_input.hr_course_attendee_ids.write(
|
||||
user_input._attendee_write_vals()
|
||||
)
|
||||
return result
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
* Enric Tobella <etobella@creublanca.es>
|
||||
* Olga Marco <olga.marco@creublanca.es>
|
||||
|
|
@ -0,0 +1 @@
|
|||
This module allows you to add a survey to your employee's training courses.
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
To use this module, you need to:
|
||||
|
||||
·Create a Survey: Surveys
|
||||
|
||||
·Create a Course: Employees -> Courses
|
||||
|
||||
·Add the Survey to the Course (Examination Survey field)
|
||||
|
||||
·Create a Training Schedule: Employees -> Courses Schedule
|
||||
|
||||
·Assign attendees to continue
|
||||
|
||||
(If a course is failed, you can select the "retry" option)
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,433 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Hr Course Survey</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="hr-course-survey">
|
||||
<h1 class="title">Hr Course Survey</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:9106aa496f0813d33af06a01289e734c8bc3215a3a3967eeffb414c14713b316
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/hr/tree/14.0/hr_course_survey"><img alt="OCA/hr" src="https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/hr-14-0/hr-14-0-hr_course_survey"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/hr&target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module allows you to add a survey to your employee’s training courses.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
|
||||
<p>To use this module, you need to:</p>
|
||||
<p>·Create a Survey: Surveys</p>
|
||||
<p>·Create a Course: Employees -> Courses</p>
|
||||
<p>·Add the Survey to the Course (Examination Survey field)</p>
|
||||
<p>·Create a Training Schedule: Employees -> Courses Schedule</p>
|
||||
<p>·Assign attendees to continue</p>
|
||||
<p>(If a course is failed, you can select the “retry” option)</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/hr/issues">GitHub Issues</a>.
|
||||
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
|
||||
<a class="reference external" href="https://github.com/OCA/hr/issues/new?body=module:%20hr_course_survey%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Creu Blanca</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Enric Tobella <<a class="reference external" href="mailto:etobella@creublanca.es">etobella@creublanca.es</a>></li>
|
||||
<li>Olga Marco <<a class="reference external" href="mailto:olga.marco@creublanca.es">olga.marco@creublanca.es</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>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.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr/tree/14.0/hr_course_survey">OCA/hr</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import test_hr_course
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
# Copyright 2019 Creu Blanca
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
from odoo.addons.survey.tests import common
|
||||
|
||||
|
||||
class TestHrCourse(common.TestSurveyCommon):
|
||||
def setUp(self):
|
||||
super(TestHrCourse, self).setUp()
|
||||
self.survey = (
|
||||
self.env["survey.survey"]
|
||||
.with_user(self.survey_manager)
|
||||
.create(
|
||||
{
|
||||
"title": "Test Survey",
|
||||
"access_mode": "public",
|
||||
"users_login_required": True,
|
||||
"users_can_go_back": False,
|
||||
"state": "open",
|
||||
"scoring_type": "scoring_without_answers",
|
||||
}
|
||||
)
|
||||
)
|
||||
self.question = self._add_question(
|
||||
self.page_0,
|
||||
"Q0",
|
||||
"simple_choice",
|
||||
survey_id=self.survey.id,
|
||||
labels=[
|
||||
{"value": "Choice0", "is_correct": True, "answer_score": 100},
|
||||
{"value": "Choice1"},
|
||||
],
|
||||
)
|
||||
self.course_categ = self.env["hr.course.category"].create({"name": "Category1"})
|
||||
self.employee1 = self.env["hr.employee"].create({"name": "Employee1"})
|
||||
self.employee2 = self.env["hr.employee"].create({"name": "Employee2"})
|
||||
self.course = self.env["hr.course"].create(
|
||||
{
|
||||
"name": "Test Course",
|
||||
"category_id": self.course_categ.id,
|
||||
"examination_survey_id": self.survey.id,
|
||||
"permanence": False,
|
||||
}
|
||||
)
|
||||
|
||||
def test_hr_schedule(self):
|
||||
self.course_schedule = self.env["hr.course.schedule"].create(
|
||||
{
|
||||
"name": "Test Schedule",
|
||||
"course_id": self.course.id,
|
||||
"cost": 100,
|
||||
"examination_survey_id": self.survey.id,
|
||||
"authorized_by": self.employee1.id,
|
||||
"start_date": "2019-02-15",
|
||||
"end_date": "2019-02-20",
|
||||
}
|
||||
)
|
||||
with self.assertRaises(ValidationError):
|
||||
self.course_schedule.write({"end_date": "2019-02-10"})
|
||||
|
||||
self.assertEqual(self.course_schedule.state, "draft")
|
||||
self.course_schedule.cancel_course()
|
||||
self.assertEqual(self.course_schedule.state, "cancelled")
|
||||
self.course_schedule.back2draft()
|
||||
|
||||
self.course_schedule.draft2waiting()
|
||||
self.assertEqual(self.course_schedule.state, "waiting_attendees")
|
||||
|
||||
self.course_schedule.attendant_ids = [
|
||||
(6, 0, [self.employee1.id, self.employee2.id])
|
||||
]
|
||||
self.assertTrue(self.course_schedule.attendant_ids)
|
||||
self.assertEqual(len(self.course_schedule.attendant_ids), 2)
|
||||
|
||||
self.course_schedule.waiting2inprogress()
|
||||
self.assertEqual(self.course_schedule.state, "in_progress")
|
||||
self.assertEqual(len(self.course_schedule.course_attendee_ids), 2)
|
||||
self.assertFalse(self.course_schedule.course_attendee_ids[0].survey_answer_id)
|
||||
self.course_schedule.attendant_ids = [(2, self.employee2.id, 0)]
|
||||
self.course_schedule.waiting2inprogress()
|
||||
self.assertEqual(len(self.course_schedule.attendant_ids), 1)
|
||||
self.assertEqual(len(self.course_schedule.course_attendee_ids), 1)
|
||||
self.employee1._compute_count_courses()
|
||||
self.assertEqual(self.employee1.count_courses, 1)
|
||||
self.employee1.action_view_course()
|
||||
|
||||
self.course_schedule.inprogress2validation()
|
||||
self.assertEqual(self.course_schedule.state, "in_validation")
|
||||
self.assertEqual(self.course_schedule.course_attendee_ids.result, "pending")
|
||||
with self.assertRaises(ValidationError):
|
||||
self.course_schedule.course_attendee_ids.resend_survey()
|
||||
answer = self.course_schedule.course_attendee_ids.survey_answer_id
|
||||
self.assertTrue(answer.hr_course_attendee_ids)
|
||||
self._add_answer_line(
|
||||
self.question,
|
||||
answer,
|
||||
self.question.suggested_answer_ids.filtered(
|
||||
lambda l: l.value == "Choice1"
|
||||
).id,
|
||||
answer_type="suggestion",
|
||||
answer_fname="suggested_answer_id",
|
||||
)
|
||||
answer._mark_done()
|
||||
self.assertEqual(self.course_schedule.course_attendee_ids.result, "failed")
|
||||
self.course_schedule.course_attendee_ids.resend_survey()
|
||||
self.assertNotEqual(
|
||||
answer, self.course_schedule.course_attendee_ids.survey_answer_id
|
||||
)
|
||||
answer = self.course_schedule.course_attendee_ids.survey_answer_id
|
||||
self.assertTrue(answer.hr_course_attendee_ids)
|
||||
self._add_answer_line(
|
||||
self.question,
|
||||
answer,
|
||||
self.question.suggested_answer_ids.filtered(
|
||||
lambda l: l.value == "Choice0"
|
||||
).id,
|
||||
answer_type="suggestion",
|
||||
answer_fname="suggested_answer_id",
|
||||
)
|
||||
answer._mark_done()
|
||||
self.assertEqual(self.course_schedule.course_attendee_ids.result, "passed")
|
||||
with self.assertRaises(ValidationError):
|
||||
self.course_schedule.course_attendee_ids.resend_survey()
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2021 Creu Blanca
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="hr_course_form_view">
|
||||
<field name="name">hr.course.form (in hr_course_survey)</field>
|
||||
<field name="model">hr.course</field>
|
||||
<field name="inherit_id" ref="hr_course.hr_course_form_view" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="category_id" position="after">
|
||||
<field name="examination_survey_id" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2021 Creu Blanca
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="hr_course_attendee_tree_view">
|
||||
<field name="name">hr.course.attendee.tree</field>
|
||||
<field name="model">hr.course.attendee</field>
|
||||
<field name="inherit_id" ref="hr_course.hr_course_attendee_tree_view" />
|
||||
<field name="groups_id" eval="[(4, ref('hr.group_hr_manager'))]" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="result" position="after">
|
||||
<field
|
||||
name="survey_answer_id"
|
||||
attrs="{'invisible': [('survey_answer_id', '=', False)]}"
|
||||
/>
|
||||
<button
|
||||
name="resend_survey"
|
||||
string="Retry"
|
||||
type="object"
|
||||
icon="fa-repeat text-success"
|
||||
attrs="{'column_invisible': [('parent.state', 'not in', ('in_validation'))], 'invisible': ['|', ('result', '!=', 'failed'), ('survey_answer_id', '=', False)]}"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2021 Creu Blanca
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
|
||||
<odoo>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1 @@
|
|||
README
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import models
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
'name': 'File Question',
|
||||
|
||||
'summary': 'Adds new File Question type, uploaded file stored in answers, '
|
||||
'survey attachment',
|
||||
|
||||
'author': 'Kitworks Systems',
|
||||
"category":"Odex25-Survey/Odex25-Survey",
|
||||
'website': 'https://kitworks.systems/',
|
||||
|
||||
'license': 'OPL-1',
|
||||
'version': '14.0.1.0.5',
|
||||
|
||||
'depends': [
|
||||
'survey', 'mail', 'web_widget_url_advanced',
|
||||
],
|
||||
'data': [
|
||||
'views/survey_template_view.xml',
|
||||
'views/survey_user_input_line_view.xml',
|
||||
'views/survey_view.xml',
|
||||
'views/assets.xml',
|
||||
],
|
||||
'installable': True,
|
||||
|
||||
'images': [
|
||||
'static/description/cover.png',
|
||||
'static/description/icon.png',
|
||||
],
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
import logging
|
||||
|
||||
from odoo import api, SUPERUSER_ID
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def migrate(cr, installed_version):
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
|
||||
user_input_line_ids = env['survey.user_input.line'].search([])
|
||||
for il in user_input_line_ids:
|
||||
if il.value_file:
|
||||
il.write({
|
||||
'value_file_ids': [(6, 0, [il.value_file.id])]})
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import survey
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
import logging
|
||||
|
||||
from odoo import models, fields, api
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SurveyQuestion(models.Model):
|
||||
_inherit = 'survey.question'
|
||||
|
||||
question_type = fields.Selection(
|
||||
selection_add=[('file', 'Upload file')])
|
||||
upload_multiple_file = fields.Boolean()
|
||||
|
||||
|
||||
class SurveyUserInputLine(models.Model):
|
||||
_inherit = 'survey.user_input.line'
|
||||
|
||||
answer_type = fields.Selection(
|
||||
selection_add=[('file', 'Upload file')])
|
||||
value_file_ids = fields.Many2many(
|
||||
comodel_name='ir.attachment', string='Survey file', readonly=True,)
|
||||
value_file = fields.Many2one(
|
||||
comodel_name='ir.attachment', string='Survey file', readonly=True,)
|
||||
filename = fields.Char(
|
||||
compute='_compute_filename', )
|
||||
|
||||
@api.depends('value_file_ids')
|
||||
def _compute_filename(self):
|
||||
for obj in self:
|
||||
if not obj.value_file_ids:
|
||||
obj.filename = ''
|
||||
continue
|
||||
filename = ', '.join(
|
||||
['{}'.format(x.name) for x in obj.value_file_ids])
|
||||
obj.filename = filename
|
||||
|
||||
@api.constrains('skipped', 'answer_type')
|
||||
def _check_answer_type_skipped(self):
|
||||
for line in self:
|
||||
if line.answer_type != 'file':
|
||||
return super(
|
||||
SurveyUserInputLine, line)._check_answer_type_skipped()
|
||||
return None
|
||||
|
||||
|
||||
class SurveyUserInput(models.Model):
|
||||
_inherit = "survey.user_input"
|
||||
|
||||
# pylint: disable=R1710
|
||||
def save_lines(self, question, answer, comment=None):
|
||||
old_answers = self.env['survey.user_input.line'].search([
|
||||
('user_input_id', '=', self.id),
|
||||
('question_id', '=', question.id)])
|
||||
if question.question_type != 'file':
|
||||
return super(SurveyUserInput, self).save_lines(
|
||||
question, answer, comment)
|
||||
self._save_line_files(question, old_answers, answer)
|
||||
|
||||
def _save_line_files(self, question, old_answers, answers):
|
||||
vals = {
|
||||
'user_input_id': self.id, 'question_id': question.id,
|
||||
'skipped': False, 'answer_type': question.question_type, }
|
||||
if answers and answers.get('values') \
|
||||
and answers.get('is_answer_update'):
|
||||
value_file_lines = [(0, 0, {
|
||||
'name': answer.get('file_name'), 'datas': answer.get('data'),
|
||||
'type': 'binary', }) for answer in answers.get('values')]
|
||||
vals.update({'value_file_ids': value_file_lines})
|
||||
if old_answers:
|
||||
old_answers.unlink()
|
||||
old_answers.create(vals)
|
||||
else:
|
||||
vals.update({'answer_type': None, 'skipped': True})
|
||||
return old_answers
|
||||
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,58 @@
|
|||
<section style="max-width: 896px; margin: 0 auto;">
|
||||
<div align="center">
|
||||
<h1>File Question</h1>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p>This module Adds new File Question type,
|
||||
uploaded file stored in answers
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="oe_demo oe_screenshot">
|
||||
<img class="oe_screenshot" src="1.png" title="Example"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Adds possibility upload file as question answer.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="oe_demo oe_screenshot">
|
||||
<img class="oe_screenshot" src="2.png" title="Example"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>Uploaded file stored in answers and can be downloaded and reviewed
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="oe_demo oe_screenshot">
|
||||
<img class="oe_screenshot" src="3.png" title="Example"/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section align="center" style="max-width: 896px; margin: 0 auto; padding-top: 15px;">
|
||||
<div>
|
||||
<h5>Maintainer</h5>
|
||||
<a href="https://kitworks.systems/"><img alt="KitWorks"
|
||||
src="https://kitworks.systems/logo.png?company=1"/></a>
|
||||
<p>Our web site: <a href="https://kitworks.systems">https://kitworks.systems</a>
|
||||
</p>
|
||||
<p>This module is maintained by the
|
||||
<a href="https://kitworks.systems">Kitworks systems</a>
|
||||
company.
|
||||
</p>
|
||||
<p>
|
||||
We can provide you further Odoo Support, Odoo implementation,
|
||||
Odoo customization, Odoo 3rd Party development and integration
|
||||
software, consulting services. Our main goal is to provide the best
|
||||
quality product for you.
|
||||
</p>
|
||||
<p>
|
||||
For any questions
|
||||
<a href="mailto:info@kitworks.systems">contact us</a>.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
odoo.define('cybernet.survey.form', function (require) {
|
||||
'use strict';
|
||||
|
||||
var SurveyFormWidget = require('survey.form');
|
||||
var utils = require('web.utils');
|
||||
|
||||
SurveyFormWidget.include({
|
||||
// Possible add file validation on client side when it mandatory question
|
||||
start: function () {
|
||||
this.fileEncoderPromises = [];
|
||||
var self = this;
|
||||
return this._super.apply(this, arguments)
|
||||
},
|
||||
|
||||
// Rewrite _submitForm to catch promise that converts file to base64 format.
|
||||
_submitForm: function (options) {
|
||||
var self = this;
|
||||
var params = {};
|
||||
if (options.previousPageId) {
|
||||
params.previous_page_id = options.previousPageId;
|
||||
}
|
||||
var route = "/survey/submit";
|
||||
|
||||
if (this.options.isStartScreen) {
|
||||
route = "/survey/begin";
|
||||
// Hide survey title in 'page_per_question' layout: it takes too much space
|
||||
if (this.options.questionsLayout === 'page_per_question') {
|
||||
this.$('.o_survey_main_title').fadeOut(400);
|
||||
}
|
||||
} else {
|
||||
var $form = this.$('form');
|
||||
var formData = new FormData($form[0]);
|
||||
|
||||
if (!options.skipValidation) {
|
||||
// Validation pre submit
|
||||
if (!this._validateForm($form, formData)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.fileEncoderPromises = [];
|
||||
this._prepareSubmitValues(formData, params);
|
||||
}
|
||||
|
||||
// prevent user from submitting more times using enter key
|
||||
this.preventEnterSubmit = true;
|
||||
|
||||
if (this.options.sessionInProgress) {
|
||||
// reset the fadeInOutDelay when attendee is submitting form
|
||||
this.fadeInOutDelay = 400;
|
||||
// prevent user from clicking on matrix options when form is submitted
|
||||
this.readonly = true;
|
||||
}
|
||||
|
||||
var submitPromise = Promise.all(this.fileEncoderPromises).then(() => {
|
||||
return self._rpc({
|
||||
route: _.str.sprintf('%s/%s/%s', route, self.options.surveyToken, self.options.answerToken),
|
||||
params: params,
|
||||
});
|
||||
});
|
||||
|
||||
this._nextScreen(submitPromise, options);
|
||||
},
|
||||
|
||||
_prepareSubmitValues: function (formData, params) {
|
||||
var self = this;
|
||||
|
||||
var result = this._super.apply(this, arguments);
|
||||
this.$('[data-question-type]').each(function () {
|
||||
if ($(this).data('questionType') == 'file') {
|
||||
self._prepareSubmitAnswerFile(params, $(this), this.name);
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
_prepareSubmitAnswerFile: function (params, $parent, questionId) {
|
||||
const file = $parent[0].files[0];
|
||||
if (file) {
|
||||
var fileEncoderPromise = utils.getDataURLFromFile(file).then(function (data) {
|
||||
data = data.split(',')[1];
|
||||
params[questionId] = [file.name, data];
|
||||
});
|
||||
this.fileEncoderPromises.push(fileEncoderPromise);
|
||||
}
|
||||
|
||||
},
|
||||
})
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<odoo>
|
||||
<template id="survey_assets" name="Survey Attachment Survey Results assets"
|
||||
inherit_id="survey.survey_assets">
|
||||
<xpath expr="." position="inside">
|
||||
<script type="text/javascript" src="/kw_survey_attachment/static/src/js/survey_form.js"/>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<odoo>
|
||||
<template id="question_container" name="Kw survey attachment Survey: question container" inherit_id="survey.question_container">
|
||||
<xpath expr="//div[@role='alert']" position="before">
|
||||
<t t-if="question.question_type == 'file'"><t t-call="kw_survey_attachment.question_upload_file"/></t>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="survey_page_print" name="Kw survey attachment Survey: print page" inherit_id="survey.survey_page_print">
|
||||
<xpath expr="//div[@role='alert']" position="before">
|
||||
<t t-if="question.question_type == 'file'"><t t-call="kw_survey_attachment.review_upload_file"/></t>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="review_upload_file" name="Question: file">
|
||||
<div class="o_survey_file_container">
|
||||
<t t-foreach="answer_lines.value_file_ids" t-as="file">
|
||||
<div>
|
||||
<a t-attf-href="/web/binary/download/#{file.id}" aria-label="Download" title="Download">
|
||||
<i class="fa fa-download" />
|
||||
<span><t t-esc="file.name" /></span>
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="question_upload_file" name="Question: Upload File">
|
||||
<div class="o_survey_comment_container p-0">
|
||||
<input type="file" class="form-control o_survey_question_upload_file bg-transparent text-dark rounded-0 p-0" t-att-data-name="question.id" t-att-data-question-type="question.question_type" t-att-id="'file_name_%d' % question.id" t-att-multiple="question.upload_multiple_file" />
|
||||
<t t-foreach="answer_lines.value_file_ids" t-as="file">
|
||||
<div>
|
||||
<a t-attf-href="/web/binary/download/#{file.id}" aria-label="Download" title="Download">
|
||||
<i class="fa fa-download" />
|
||||
<span><t t-esc="file.name" /></span>
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<odoo>
|
||||
<!-- Inherit Form View -->
|
||||
<record id="kw_survey_attachment_inherit_survey_user_input_line_form"
|
||||
model="ir.ui.view">
|
||||
<field name="name">add upload to user input</field>
|
||||
<field name="model">survey.user_input.line</field>
|
||||
<field name="inherit_id" ref="survey.survey_user_input_line_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='answer_type']" position="after">
|
||||
<field name="value_file_ids" attrs="{'invisible': [('answer_type', '!=', 'file')]}">
|
||||
<tree create="0" edit="0">
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="datas" widget="binary" filename="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="kw_survey_attachment_survey_user_input_form"
|
||||
model="ir.ui.view">
|
||||
<field name="name">survey.user_input.form (kw_survey_attachment)</field>
|
||||
<field name="model">survey.user_input</field>
|
||||
<field name="inherit_id" ref="survey.survey_user_input_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='answer_type']" position="after">
|
||||
<field name="filename" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<odoo>
|
||||
<record id="survey_question_validation" model="ir.ui.view">
|
||||
<field name="name">survey.question.validation</field>
|
||||
<field name="model">survey.question</field>
|
||||
<field name="inherit_id" ref="survey.survey_question_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='answers']" position="inside">
|
||||
<group>
|
||||
<div attrs="{'invisible': [('question_type', '!=', 'file')]}">
|
||||
<p class="o_upload_file">Upload Files
|
||||
<i class="fa fa-upload fa-2x"/>
|
||||
</p>
|
||||
</div>
|
||||
</group>
|
||||
</xpath>
|
||||
<field name="constr_error_msg" position="after">
|
||||
<field name="upload_multiple_file" attrs="{'invisible': [('question_type', '!=', 'file')]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
.. |company| replace:: ADHOC SA
|
||||
|
||||
.. |company_logo| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-logo.png
|
||||
:alt: ADHOC SA
|
||||
:target: https://www.adhoc.com.ar
|
||||
|
||||
.. |icon| image:: https://raw.githubusercontent.com/ingadhoc/maintainer-tools/master/resources/adhoc-icon.png
|
||||
|
||||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
||||
:target: https://www.gnu.org/licenses/agpl
|
||||
:alt: License: AGPL-3
|
||||
|
||||
============================
|
||||
Survey Conditional Questions
|
||||
============================
|
||||
|
||||
This module add the Survey Conditional Questions.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
To install this module, you need to:
|
||||
|
||||
#. Only need to install the module
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
#. Nothing to configure
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
#. Go to ...
|
||||
|
||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||
:alt: Try me on Runbot
|
||||
:target: http://runbot.adhoc.com.ar/
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues
|
||||
<https://github.com/ingadhoc/survey/issues>`_. In case of trouble, please
|
||||
check there if your issue has already been reported. If you spotted it first,
|
||||
help us smashing it by providing a detailed and welcomed feedback.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Images
|
||||
------
|
||||
|
||||
* |company| |icon|
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
|company_logo|
|
||||
|
||||
This module is maintained by the |company|.
|
||||
|
||||
To contribute to this module, please visit https://www.adhoc.com.ar.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from . import models
|
||||
from . import controllers
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# © 2015 ADHOC SA (http://www.adhoc.com.ar)
|
||||
# © 2020 Opener B.V. (https://opener.amsterdam)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
{
|
||||
"name": "Survey Conditional Questions",
|
||||
"version": "14.0.1.0.0",
|
||||
"category": "Odex25-Survey/Odex25-Survey",
|
||||
"sequence": 14,
|
||||
"summary": "",
|
||||
"author": "ADHOC SA, Opener B.V., Creu Blanca, Odoo Community Association (OCA)",
|
||||
"website": "https://github.com/OCA/survey",
|
||||
"license": "AGPL-3",
|
||||
"images": [],
|
||||
"depends": ["survey"],
|
||||
"data": ["views/survey_question_views.xml", "views/survey_question_qweb.xml"],
|
||||
"demo": [],
|
||||
"installable": True,
|
||||
"auto_install": False,
|
||||
"application": False,
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from . import main
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
#############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
#############################################################################
|
||||
|
||||
import logging
|
||||
from collections import defaultdict
|
||||
|
||||
from odoo.addons.survey.controllers.main import Survey
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SurveyConditional(Survey):
|
||||
def _prepare_survey_data(self, survey_sudo, answer_sudo, **post):
|
||||
result = super(SurveyConditional, self)._prepare_survey_data(
|
||||
survey_sudo, answer_sudo, **post
|
||||
)
|
||||
if survey_sudo.questions_layout != "page_per_question":
|
||||
(
|
||||
_questions,
|
||||
triggered_questions_by_answer,
|
||||
_answers,
|
||||
) = answer_sudo._get_conditional_values()
|
||||
no_answer_questions = triggered_questions_by_answer.get(
|
||||
answer_sudo.env["survey.question.answer"],
|
||||
answer_sudo.env["survey.question"],
|
||||
)
|
||||
no_answer_questions_by_question = defaultdict(lambda: [])
|
||||
|
||||
for question in no_answer_questions:
|
||||
no_answer_questions_by_question[
|
||||
question.triggering_question_id.id
|
||||
].append(
|
||||
[
|
||||
question.id,
|
||||
question.conditional_minimum_value,
|
||||
question.conditional_maximum_value,
|
||||
]
|
||||
)
|
||||
result.update(
|
||||
{
|
||||
"no_answer_conditional_questions": {
|
||||
question.id: [
|
||||
question.triggering_question_id,
|
||||
question.conditional_minimum_value,
|
||||
question.conditional_maximum_value,
|
||||
]
|
||||
for question in no_answer_questions
|
||||
},
|
||||
"no_answer_conditional_questions_"
|
||||
"by_question": no_answer_questions_by_question,
|
||||
}
|
||||
)
|
||||
return result
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * survey_conditional_question
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-29 08:25+0000\n"
|
||||
"PO-Revision-Date: 2021-09-29 08:25+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "Conditional Maximum Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "Conditional Minimum Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "If the value is higher, it will not be shown"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "If the value is lower, it will not be shown"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid ""
|
||||
"Indicate whether this input's question was hidden on condition of earlier "
|
||||
"questions in the survey."
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid ""
|
||||
"Question containing the triggering answer to display the current question."
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_survey
|
||||
msgid "Survey"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_question
|
||||
msgid "Survey Question"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input_line
|
||||
msgid "Survey User Input Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid "Triggering Question"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_type
|
||||
msgid "Triggering question type"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * survey_conditional_question
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-29 08:27+0000\n"
|
||||
"PO-Revision-Date: 2021-09-29 08:27+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "Conditional Maximum Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "Conditional Minimum Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nombre mostrado"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "If the value is higher, it will not be shown"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "If the value is lower, it will not be shown"
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid ""
|
||||
"Indicate whether this input's question was hidden on condition of earlier "
|
||||
"questions in the survey."
|
||||
msgstr ""
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Última modificación el"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid ""
|
||||
"Question containing the triggering answer to display the current question."
|
||||
msgstr ""
|
||||
"Pregunta que contiene la respuesta desencadenante para mostrar la pregunta "
|
||||
"actual."
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_survey
|
||||
msgid "Survey"
|
||||
msgstr "Encuesta"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_question
|
||||
msgid "Survey Question"
|
||||
msgstr "Pregunta de la encuesta"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr "Entrada de usuario de la encuesta"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input_line
|
||||
msgid "Survey User Input Line"
|
||||
msgstr "Línea de entrada de usuario de la encuesta"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid "Triggering Question"
|
||||
msgstr "Pregunta desencadenante"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_type
|
||||
msgid "Triggering question type"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * survey_conditional_question
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-10-09 09:10+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "Conditional Maximum Value"
|
||||
msgstr "Valore massimo condizionato"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "Conditional Minimum Value"
|
||||
msgstr "Valore minimo condizionato"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__display_name
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid "Hidden"
|
||||
msgstr "Nascosto"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input__id
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_maximum_value
|
||||
msgid "If the value is higher, it will not be shown"
|
||||
msgstr "Se il valore è più alto, non viene mostrato"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__conditional_minimum_value
|
||||
msgid "If the value is lower, it will not be shown"
|
||||
msgstr "Se il valore è più basso, non viene mostrato"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_user_input_line__hidden
|
||||
msgid ""
|
||||
"Indicate whether this input's question was hidden on condition of earlier "
|
||||
"questions in the survey."
|
||||
msgstr ""
|
||||
"Indica se la domanda di questa risposta era nascosta in funzione a domande "
|
||||
"precedenti nel sondaggio."
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_survey____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input____last_update
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_user_input_line____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Ultima modifica il"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,help:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid ""
|
||||
"Question containing the triggering answer to display the current question."
|
||||
msgstr ""
|
||||
"Domanda che contiene la risposta che attiva la visualizzazione della domanda "
|
||||
"corrente."
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_survey
|
||||
msgid "Survey"
|
||||
msgstr "Sondaggio"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_question
|
||||
msgid "Survey Question"
|
||||
msgstr "Domanda sondaggio"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input
|
||||
msgid "Survey User Input"
|
||||
msgstr "Risposta utente al sondaggio"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model,name:survey_conditional_question.model_survey_user_input_line
|
||||
msgid "Survey User Input Line"
|
||||
msgstr "Riga risposta utente al sondaggio"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_id
|
||||
msgid "Triggering Question"
|
||||
msgstr "Domanda attivatrice"
|
||||
|
||||
#. module: survey_conditional_question
|
||||
#: model:ir.model.fields,field_description:survey_conditional_question.field_survey_question__triggering_question_type
|
||||
msgid "Triggering question type"
|
||||
msgstr "Tipo di domanda attivatrice"
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from . import survey_survey
|
||||
from . import survey_question
|
||||
from . import survey_user_input
|
||||
from . import survey_user_input_line
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class SurveyQuestion(models.Model):
|
||||
_inherit = "survey.question"
|
||||
triggering_question_id = fields.Many2one(
|
||||
domain="""[('survey_id', '=', survey_id),
|
||||
('question_type', '!=', False), '|',
|
||||
('sequence', '<', sequence),
|
||||
'&', ('sequence', '=', sequence), ('id', '<', id)]"""
|
||||
)
|
||||
triggering_question_type = fields.Selection(
|
||||
related="triggering_question_id.question_type",
|
||||
string="Triggering question type",
|
||||
)
|
||||
conditional_minimum_value = fields.Float(
|
||||
help="If the value is lower, it will not be shown", copy=False
|
||||
)
|
||||
conditional_maximum_value = fields.Float(
|
||||
help="If the value is higher, it will not be shown", copy=False
|
||||
)
|
||||
|
||||
def _hidden_on_same_page(self, post):
|
||||
"""Indicate that the question was hidden dynamically due to answers
|
||||
to questions on the same page
|
||||
"""
|
||||
self.ensure_one()
|
||||
qkey = "{}_{}_{}".format(
|
||||
self.survey_id.id,
|
||||
self.page_id.id,
|
||||
self.triggering_question_id.id,
|
||||
)
|
||||
if qkey in post:
|
||||
# Compare the simple choice answer to the triggering answer
|
||||
return str(post[qkey]) != str(self.triggering_answer_id.id)
|
||||
akey = "{}_{}".format(qkey, self.triggering_answer_id.id)
|
||||
if any(key.startswith(qkey + "_") for key in post.keys()) and akey not in post:
|
||||
# Multiple choice answers for the triggering question are present,
|
||||
# but not this question's triggering answer
|
||||
return True
|
||||
return False
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
class SurveySurvey(models.Model):
|
||||
_inherit = "survey.survey"
|
||||
|
||||
@api.model
|
||||
def next_page(self, user_input, page_id, go_back=False):
|
||||
"""Skip pages that only have hidden questions on them,
|
||||
except if its the last page or the first page (in which case there
|
||||
is a configuration error in the survey)."""
|
||||
questions_to_hide = user_input.get_hidden_questions()
|
||||
res = super(SurveySurvey, self).next_page(user_input, page_id, go_back=go_back)
|
||||
page, index, last = res
|
||||
if page and not (page.question_ids - questions_to_hide):
|
||||
if (not go_back and not last) or (go_back and index):
|
||||
# Mark every question on this hidden page as hidden.
|
||||
for question in page.question_ids:
|
||||
self.env["survey.user_input_line"].update_hidden(
|
||||
user_input, question
|
||||
)
|
||||
return self.next_page(user_input, page.id, go_back=go_back)
|
||||
return res
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from odoo import models
|
||||
|
||||
|
||||
class SurveyUserInput(models.Model):
|
||||
_inherit = "survey.user_input"
|
||||
|
||||
def _get_inactive_conditional_questions(self):
|
||||
result = super()._get_inactive_conditional_questions()
|
||||
questions_to_hide = self.env["survey.question"]
|
||||
for question in result:
|
||||
if question.triggering_question_type in [
|
||||
"simple_choice",
|
||||
"multiple_choice",
|
||||
]:
|
||||
questions_to_hide |= question
|
||||
continue
|
||||
question2 = question.triggering_question_id
|
||||
input_answer_id = self.user_input_line_ids.filtered(
|
||||
lambda x: x.question_id == question2
|
||||
)
|
||||
if (
|
||||
input_answer_id.value_numerical_box < question.conditional_minimum_value
|
||||
or input_answer_id.value_numerical_box
|
||||
> question.conditional_maximum_value
|
||||
):
|
||||
questions_to_hide |= question
|
||||
return questions_to_hide
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
##############################################################################
|
||||
# For copyright and license notices, see __manifest__.py file in module root
|
||||
# directory
|
||||
##############################################################################
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class SurveyUserInputLine(models.Model):
|
||||
_inherit = "survey.user_input.line"
|
||||
|
||||
hidden = fields.Boolean(
|
||||
help=(
|
||||
"Indicate whether this input's question was hidden on "
|
||||
"condition of earlier questions in the survey."
|
||||
)
|
||||
)
|
||||
|
||||
@api.model
|
||||
def update_hidden(self, user_input, question, hidden=True):
|
||||
"""If hidden, delete all preexisting values and replace by a dummy
|
||||
one marked as hidden. If not hidden, delete any preexisting value
|
||||
marked as hidden."""
|
||||
domain = [
|
||||
("user_input_id", "=", user_input.id),
|
||||
("survey_id", "=", question.survey_id.id),
|
||||
("question_id", "=", question.id),
|
||||
]
|
||||
if not hidden:
|
||||
# Only select hidden values
|
||||
domain.append(("hidden", "=", True))
|
||||
existing = self.search(domain)
|
||||
if not hidden:
|
||||
if existing:
|
||||
# Remove the hidden value
|
||||
existing.unlink()
|
||||
return
|
||||
if existing:
|
||||
if len(existing) == 1 and existing.hidden:
|
||||
# Nothing to do
|
||||
return existing
|
||||
# Else, wipe all values
|
||||
existing.unlink()
|
||||
return self.create(
|
||||
{
|
||||
"user_input_id": user_input.id,
|
||||
"question_id": question.id,
|
||||
"survey_id": question.survey_id.id,
|
||||
"skipped": True,
|
||||
"hidden": True,
|
||||
}
|
||||
)
|
||||
|
||||
@api.model
|
||||
def save_lines(self, user_input_id, question, post, answer_tag):
|
||||
"""Set anwers to hidden and wipe their contents"""
|
||||
user_input = self.env["survey.user_input"].browse(user_input_id)
|
||||
hidden = False
|
||||
if question.is_conditional:
|
||||
if question.page_id == question.triggering_question_id.page_id:
|
||||
hidden = question._hidden_on_same_page(post)
|
||||
else:
|
||||
hidden = question in user_input.get_hidden_questions()
|
||||
self.update_hidden(user_input, question, hidden=hidden)
|
||||
if hidden:
|
||||
return True
|
||||
return super(SurveyUserInputLine, self).save_lines(
|
||||
user_input_id, question, post, answer_tag
|
||||
)
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
|
|
@ -0,0 +1,35 @@
|
|||
odoo.define("survey.conditional_question", function (require) {
|
||||
"use strict";
|
||||
|
||||
var SurveyFormWidget = require("survey.form");
|
||||
SurveyFormWidget.include({
|
||||
events: _.extend({}, SurveyFormWidget.prototype.events, {
|
||||
"change input[type='number']": "_onChangeInputNumber",
|
||||
}),
|
||||
_onChangeInputNumber: function (event) {
|
||||
if (this.options.questionsLayout !== "page_per_question") {
|
||||
var $target = $(event.currentTarget);
|
||||
var questionId = $target[0].name;
|
||||
var result = parseFloat($target[0].value);
|
||||
if (this.options.noAnswerConditionalQuestionsByQuestion[questionId]) {
|
||||
_.forEach(
|
||||
this.options.noAnswerConditionalQuestionsByQuestion[questionId],
|
||||
function (question_data) {
|
||||
var dependingQuestion = $(
|
||||
".js_question-wrapper#" + question_data[0]
|
||||
);
|
||||
if (
|
||||
result < question_data[1] ||
|
||||
question_data[2] < result
|
||||
) {
|
||||
dependingQuestion.addClass("d-none");
|
||||
} else {
|
||||
dependingQuestion.removeClass("d-none");
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import test_survey_conditional_questions
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
from odoo.addons.survey.tests import common
|
||||
|
||||
|
||||
class TestSurveyConditionalQuestions(common.TestSurveyCommon):
|
||||
def setUp(self):
|
||||
super(TestSurveyConditionalQuestions, self).setUp()
|
||||
question = self._add_question(
|
||||
self.page_0,
|
||||
"Q0",
|
||||
"simple_choice",
|
||||
survey_id=self.survey.id,
|
||||
)
|
||||
conditional_question = self._add_question(
|
||||
self.page_0,
|
||||
"Q0",
|
||||
"simple_choice",
|
||||
labels=[{"value": 1}, {"value": 2}],
|
||||
survey_id=self.survey.id,
|
||||
)
|
||||
conditional_values = {
|
||||
"is_conditional": True,
|
||||
"triggering_question_id": question.id,
|
||||
"triggering_answer_id": 1,
|
||||
}
|
||||
conditional_question.write(conditional_values)
|
||||
user_input = self.env["survey.user_input"].create(
|
||||
{
|
||||
"survey_id": question.survey_id.id,
|
||||
"partner_id": self.env.user.partner_id.id,
|
||||
}
|
||||
)
|
||||
# Conditional question is hidden when original question not answered
|
||||
self.assertIn(conditional_question, user_input.get_hidden_questions())
|
||||
tag = "{}_{}".format(question.survey_id.id, question.id)
|
||||
conditional_tag = "{}_{}".format(self.survey.id, conditional_question.id)
|
||||
self.env["survey.user_input_line"].save_lines(
|
||||
user_input.id,
|
||||
question,
|
||||
{
|
||||
"%s_%s"
|
||||
% (tag, question.labels_ids[0]["value"]): question.labels_ids[0][
|
||||
"value"
|
||||
]
|
||||
},
|
||||
tag,
|
||||
)
|
||||
# Conditional question is not hidden if the desired answer was given
|
||||
user_input.refresh()
|
||||
self.assertNotIn(conditional_question, user_input.get_hidden_questions())
|
||||
data = self.url_open(
|
||||
"/survey/hidden/{}/{}/0".format(self.survey.access_token, user_input.token)
|
||||
).json()
|
||||
self.assertNotIn(conditional_tag, data["hidden_questions"])
|
||||
# Conditional question is hidden for any other answer
|
||||
self.env["survey.user_input_line"].save_lines(
|
||||
user_input.id,
|
||||
question,
|
||||
{
|
||||
"%s_%s"
|
||||
% (tag, question.labels_ids[1]["value"]): question.labels_ids[1][
|
||||
"value"
|
||||
]
|
||||
},
|
||||
tag,
|
||||
)
|
||||
user_input.refresh()
|
||||
self.assertIn(conditional_question, user_input.get_hidden_questions())
|
||||
|
||||
data = self.url_open(
|
||||
"/survey/hidden/{}/{}/0".format(self.survey.access_token, user_input.token)
|
||||
).json()
|
||||
self.assertIn(conditional_tag, data["hidden_questions"])
|
||||
self.env["survey.user_input_line"].save_lines(
|
||||
user_input.id,
|
||||
conditional_question,
|
||||
{
|
||||
conditional_tag: conditional_question.labels_ids[1]["value"],
|
||||
"%s_%s"
|
||||
% (tag, question.labels_ids[1]["value"]): question.labels_ids[1][
|
||||
"value"
|
||||
],
|
||||
},
|
||||
conditional_tag,
|
||||
)
|
||||
user_input.refresh()
|
||||
line = user_input.user_input_line_ids.filtered(
|
||||
lambda r: r.question_id == conditional_question
|
||||
)
|
||||
self.assertTrue(line.skipped)
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template
|
||||
id="assets_frontend"
|
||||
inherit_id="survey.survey_assets"
|
||||
name="Survey Conditional Assets"
|
||||
>
|
||||
<xpath expr="." position="inside">
|
||||
<script
|
||||
type="text/javascript"
|
||||
src="/survey_conditional_question/static/src/js/survey_conditional_questions.js"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/survey_conditional_question/static/src/scss/survey_conditional_questions.scss"
|
||||
type="text/scss"
|
||||
/>
|
||||
</xpath>
|
||||
</template>
|
||||
<template id="survey_fill_form" inherit_id="survey.survey_fill_form">
|
||||
<xpath expr="//form" position="attributes">
|
||||
<attribute
|
||||
name="t-att-data-no-answer-conditional-questions-by-question"
|
||||
>json.dumps(no_answer_conditional_questions_by_question)</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
<template id="question_container" inherit_id="survey.question_container">
|
||||
<xpath expr="//t[@t-set='display_question']" position="before">
|
||||
<t
|
||||
t-if="question.is_conditional"
|
||||
t-set="conditional_value"
|
||||
t-value="question.id in no_answer_conditional_questions and answer.user_input_line_ids.filtered(lambda line: line.question_id == no_answer_conditional_questions[question.id][0]).value_numerical_box"
|
||||
/>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-set='display_question']" position="attributes">
|
||||
<attribute
|
||||
name="t-value"
|
||||
>survey.questions_layout == 'page_per_question' or (survey.questions_layout == 'one_page' and not question.is_conditional) or (survey.questions_layout == 'page_per_section' and (not question.is_conditional or (question.id in no_answer_conditional_questions and conditional_value and no_answer_conditional_questions[question.id][1] <= conditional_value and conditional_value <= no_answer_conditional_questions[question.id][2] ) or (question.id not in no_answer_conditional_questions and triggering_answer_by_question[question.id] in selected_answers)))</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="survey_question_form">
|
||||
<field name="name">Form view for survey conditional question</field>
|
||||
<field name="model">survey.question</field>
|
||||
<field name="inherit_id" ref="survey.survey_question_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="question_type" position="before">
|
||||
<field name="survey_id" invisible="1" readonly="1" required="0" />
|
||||
<field name="page_id" invisible="1" required="0" />
|
||||
</field>
|
||||
<field name="triggering_question_id" position="after">
|
||||
<field name="triggering_question_type" invisible="1" />
|
||||
<field
|
||||
name="conditional_minimum_value"
|
||||
options="{'no_create_edit': True,}"
|
||||
attrs="{'invisible':['|', '|', ('is_conditional', '=', False), ('triggering_question_id', '=', False), ('triggering_question_type', 'in', ['simple_choice', 'multiple_choice'])]}"
|
||||
/>
|
||||
<field
|
||||
name="conditional_maximum_value"
|
||||
options="{'no_create_edit': True,}"
|
||||
attrs="{'invisible':['|', '|', ('is_conditional', '=', False), ('triggering_question_id', '=', False), ('triggering_question_type', 'in', ['simple_choice', 'multiple_choice'])]}"
|
||||
/>
|
||||
</field>
|
||||
<field name="triggering_answer_id" position="attributes">
|
||||
<attribute
|
||||
name="attrs"
|
||||
>{'invisible': ['|', '|', ('is_conditional','=', False), ('triggering_question_id','=', False), ('triggering_question_type', 'not in', ['simple_choice', 'multiple_choice'])], 'required': [('is_conditional','=', True), ('triggering_question_type', 'in', ['simple_choice', 'multiple_choice'])]}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
========================
|
||||
Survey description field
|
||||
========================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:be3ddfe839657cfb51a78f4bf548e85439ebf1a89b9572822fd2cf74054788b1
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |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%2Fsurvey-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/survey/tree/14.0/survey_description
|
||||
:alt: OCA/survey
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/survey-14-0/survey-14-0-survey_description
|
||||
: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/survey&target_branch=14.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module displays the description fields on backend for :
|
||||
* surveys
|
||||
* pages
|
||||
* questions
|
||||
|
||||
and thank you field for surveys.
|
||||
|
||||
Note: these fields are present in code, displayed on front-end for survey (when defined) but not displayed on backend for user to fill.
|
||||
A PR has been submitted to Odoo (https://github.com/odoo/odoo/pull/52329) to implement this in Odoo 12.0 code, but since survey module has been refactored in v13.0 it may never be merged, so this module was created.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use this module, you need to:
|
||||
|
||||
#. Go to Surveys
|
||||
#. Create or Edit an existing survey
|
||||
#. On main survey page and on question page you can fill description and thank you message in corresponding notepad pages
|
||||
#. On survey page form, you can add description of the page on top of the form
|
||||
|
||||
Known issues / Roadmap
|
||||
======================
|
||||
|
||||
* This module was created to add some features in Odoo 13.0. In Odoo 14.0 most of these features were already implemented, except being able to edit the description_done field.
|
||||
* For versions >= 15.0 the module is not necessary.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/survey/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 <https://github.com/OCA/survey/issues/new?body=module:%20survey_description%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* Le Filament
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Remi CAZENAVE <https://le-filament.com>
|
||||
|
||||
Other credits
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
[ This file is optional and contains additional credits, other than
|
||||
authors, contributors, and maintainers. ]
|
||||
|
||||
The development of this module has been financially supported by:
|
||||
|
||||
* Ethikis (<https://ethikis.com>)
|
||||
|
||||
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-remi-filament| image:: https://github.com/remi-filament.png?size=40px
|
||||
:target: https://github.com/remi-filament
|
||||
:alt: remi-filament
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-remi-filament|
|
||||
|
||||
This module is part of the `OCA/survey <https://github.com/OCA/survey/tree/14.0/survey_description>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||