odoo-addon-hr-appraisal-oca 16.0.1.0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. odoo/addons/hr_appraisal_oca/README.rst +218 -0
  2. odoo/addons/hr_appraisal_oca/__init__.py +2 -0
  3. odoo/addons/hr_appraisal_oca/__manifest__.py +28 -0
  4. odoo/addons/hr_appraisal_oca/data/mail_activity_type_data.xml +9 -0
  5. odoo/addons/hr_appraisal_oca/data/mail_template_data.xml +167 -0
  6. odoo/addons/hr_appraisal_oca/i18n/es.po +1201 -0
  7. odoo/addons/hr_appraisal_oca/i18n/hr_appraisal_oca.pot +1086 -0
  8. odoo/addons/hr_appraisal_oca/models/__init__.py +5 -0
  9. odoo/addons/hr_appraisal_oca/models/hr_appraisal.py +444 -0
  10. odoo/addons/hr_appraisal_oca/models/hr_appraisal_tag.py +21 -0
  11. odoo/addons/hr_appraisal_oca/models/hr_appraisal_template.py +31 -0
  12. odoo/addons/hr_appraisal_oca/models/hr_employee.py +125 -0
  13. odoo/addons/hr_appraisal_oca/models/res_config_settings.py +16 -0
  14. odoo/addons/hr_appraisal_oca/readme/CONTRIBUTORS.md +6 -0
  15. odoo/addons/hr_appraisal_oca/readme/DESCRIPTION.md +5 -0
  16. odoo/addons/hr_appraisal_oca/readme/USAGE.md +95 -0
  17. odoo/addons/hr_appraisal_oca/security/hr_appraisal_security.xml +58 -0
  18. odoo/addons/hr_appraisal_oca/security/ir.model.access.csv +10 -0
  19. odoo/addons/hr_appraisal_oca/static/description/banner.png +0 -0
  20. odoo/addons/hr_appraisal_oca/static/description/icon.png +0 -0
  21. odoo/addons/hr_appraisal_oca/static/description/index.html +535 -0
  22. odoo/addons/hr_appraisal_oca/tests/__init__.py +1 -0
  23. odoo/addons/hr_appraisal_oca/tests/test_hr_appraisal.py +120 -0
  24. odoo/addons/hr_appraisal_oca/views/hr_appraisal_form_view.xml +465 -0
  25. odoo/addons/hr_appraisal_oca/views/hr_appraisal_tag_form_view.xml +47 -0
  26. odoo/addons/hr_appraisal_oca/views/hr_appraisal_template_form_view.xml +106 -0
  27. odoo/addons/hr_appraisal_oca/views/hr_employee_form_view.xml +42 -0
  28. odoo/addons/hr_appraisal_oca/views/res_config_settings_views.xml +59 -0
  29. odoo/addons/hr_appraisal_oca/wizard/__init__.py +2 -0
  30. odoo/addons/hr_appraisal_oca/wizard/hr_appraisal_request_wizard_view.xml +40 -0
  31. odoo/addons/hr_appraisal_oca/wizard/hr_appraisal_wizard.py +159 -0
  32. odoo/addons/hr_appraisal_oca/wizard/hr_appraisal_wizard_form_view.xml +32 -0
  33. odoo/addons/hr_appraisal_oca/wizard/send_mail_with_template_wizard.py +52 -0
  34. odoo_addon_hr_appraisal_oca-16.0.1.0.0.3.dist-info/METADATA +233 -0
  35. odoo_addon_hr_appraisal_oca-16.0.1.0.0.3.dist-info/RECORD +37 -0
  36. odoo_addon_hr_appraisal_oca-16.0.1.0.0.3.dist-info/WHEEL +5 -0
  37. odoo_addon_hr_appraisal_oca-16.0.1.0.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,218 @@
1
+ .. image:: https://odoo-community.org/readme-banner-image
2
+ :target: https://odoo-community.org/get-involved?utm_source=readme
3
+ :alt: Odoo Community Association
4
+
5
+ =============
6
+ Appraisal Oca
7
+ =============
8
+
9
+ ..
10
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11
+ !! This file is generated by oca-gen-addon-readme !!
12
+ !! changes will be overwritten. !!
13
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
+ !! source digest: sha256:d1946002660b919f664e9679611e20cec90d54dcf506f5ee30a69d6bb3ac031d
15
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
+
17
+ .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
18
+ :target: https://odoo-community.org/page/development-status
19
+ :alt: Beta
20
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
21
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
22
+ :alt: License: AGPL-3
23
+ .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github
24
+ :target: https://github.com/OCA/hr/tree/16.0/hr_appraisal_oca
25
+ :alt: OCA/hr
26
+ .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
27
+ :target: https://translation.odoo-community.org/projects/hr-16-0/hr-16-0-hr_appraisal_oca
28
+ :alt: Translate me on Weblate
29
+ .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
30
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/hr&target_branch=16.0
31
+ :alt: Try me on Runboat
32
+
33
+ |badge1| |badge2| |badge3| |badge4| |badge5|
34
+
35
+ This module helps maintain the employee motivation process through
36
+ periodic performance appraisals.
37
+
38
+ Managers can evaluate employee performance and enable employees to
39
+ perform self-assessments. Review forms can be customized according to
40
+ organizational needs.
41
+
42
+ **Table of contents**
43
+
44
+ .. contents::
45
+ :local:
46
+
47
+ Usage
48
+ =====
49
+
50
+ To create a new appraisal for an employee, first navigate to the main
51
+ Appraisals dashboard by opening the Appraisals app. The Appraisals
52
+ dashboard is the default view.
53
+
54
+ All appraisals are displayed on the dashboard in a default Kanban view.
55
+ To view the details of any appraisal, click on the card to open the
56
+ appraisal form.
57
+
58
+ 1. Create an appraisal: To create a new appraisal, click the New button
59
+ in the upper-left corner of the Appraisals dashboard. Doing so reveals a
60
+ blank appraisal form. After entering a name in the first blank field,
61
+ proceed to enter the following information on the form: \* Employee:
62
+ Select the employee for whom you are creating the appraisal. \*
63
+ Managers: Select the managers who will be involved in the appraisal
64
+ process. \* Date Close: Select the date when the appraisal is expected
65
+ to be completed. \* Appraisal Template: Select the template that will be
66
+ used for this appraisal. \* Appraisal Tags: Add any relevant tags to
67
+ categorize the appraisal.
68
+
69
+ Once the form is complete, click the Confirm button to confirm the
70
+ appraisal request.
71
+
72
+ Once confirmed, the employee receives an email stating that an appraisal
73
+ was requested, and is then prompted to schedule an appraisal date. The
74
+ next steps require the employee to fill out the self-assessment, after
75
+ which the manager completes their assessment.
76
+
77
+ The status changes to Confirmed, and the Employee’s Feedback section of
78
+ the Appraisal tab is grayed out. The information in that section only
79
+ appears after the self-assessment is published by the employee.
80
+
81
+ If there are any existing appraisals for the employee, an Appraisal
82
+ smart button appears at the top of the page, listing the total number of
83
+ appraisals there are for the employee.
84
+
85
+ 2. Employee’s feedback To complete their portion of feedback, employees
86
+ should navigate to the main Appraisals application dashboard, where the
87
+ only entries visible are appraisals for the employee, themselves, and/or
88
+ anyone they manage and have to provide manager feedback for.
89
+
90
+ Click on the appraisal to open the appraisal form. Enter responses in
91
+ the Employee’s Feedback section, under the Appraisal tab.
92
+
93
+ When completed, click the Not Visible to Manager toggle (the default
94
+ setting once an appraisal is confirmed). When clicked, the toggle
95
+ changes to Visible to Manager.
96
+
97
+ 3. Manager’s feedback After the employee has completed the Employee’s
98
+ Feedback section, under the Appraisal tab, it is time for the manager to
99
+ fill out the Manager’s Feedback section.
100
+
101
+ The manager enters their responses in the fields in the same manner as
102
+ the employee.
103
+
104
+ When the feedback section is completed, click the Not Visible to
105
+ Employee toggle (the default setting once an appraisal is confirmed).
106
+ When clicked, the toggle changes to Visible to Employee.
107
+
108
+ 4. Private Note tab If managers want to leave notes that are only
109
+ visible to other managers, they can be entered in the Private Note tab.
110
+ This can be done before or after meeting with the employee to discuss
111
+ the appraisal.
112
+
113
+ The employee being evaluated does not have access to this tab, and the
114
+ tab does not appear on their appraisal.
115
+
116
+ 5. Complete an appraisal After the appraisal is complete, and both the
117
+ manager and employee have met to discuss the appraisal, the appraisal
118
+ can be marked as Done. When completed, click the Mark as Done button on
119
+ the appraisal form, located in the top-left corner.
120
+
121
+ Once the appraisal is marked as Done, the Mark as Done button
122
+ disappears, and a Reopen button appears.
123
+
124
+ 6. Permissions and User Types To manage access permissions to the
125
+ Appraisals app, go to Settings > Users & Companies > Users and select
126
+ the desired user. In the Access tab, you will find the Appraisal
127
+ Permissions section. The following user types are available:
128
+
129
+ - User: Can access their own appraisals and complete evaluations of
130
+ their direct and indirect reporting employees.
131
+ - Human resources officer: Has full access to all appraisals and
132
+ settings, and can manage templates, tags, permissions, and all
133
+ records.
134
+
135
+ Make sure to assign the appropriate access type based on the user's role
136
+ in the organization. Permissions determine what actions each user can
137
+ perform within the Appraisals module.
138
+
139
+ 7. Archive and Restore Appraisals To archive an appraisal, open the
140
+ record and select Archive from the Action menu. Archived appraisals are
141
+ hidden from the main views.
142
+
143
+ To view archived appraisals, use the Archived filter in the search bar.
144
+
145
+ To restore an appraisal, open it (with the Archived filter active) and
146
+ click Restore.
147
+
148
+ Archiving does not delete the record; you can archive or restore
149
+ appraisals at any time.
150
+
151
+ - Tip
152
+
153
+ Modifications are not possible once the appraisal is marked as done.
154
+
155
+ To make any changes to an appraisal that is marked as Done, click the
156
+ Reopen button.
157
+
158
+ Then, click the Confirm button that appears, and make any modifications
159
+ needed. Once all modifications are complete, click the Mark as Done
160
+ button again.
161
+
162
+ Bug Tracker
163
+ ===========
164
+
165
+ Bugs are tracked on `GitHub Issues <https://github.com/OCA/hr/issues>`_.
166
+ In case of trouble, please check there if your issue has already been reported.
167
+ If you spotted it first, help us to smash it by providing a detailed and welcomed
168
+ `feedback <https://github.com/OCA/hr/issues/new?body=module:%20hr_appraisal_oca%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
169
+
170
+ Do not contact contributors directly about support or help with technical issues.
171
+
172
+ Credits
173
+ =======
174
+
175
+ Authors
176
+ -------
177
+
178
+ * Fundación Esment
179
+
180
+ Contributors
181
+ ------------
182
+
183
+ - `Fundación Esment <https://esment.org/>`__:
184
+
185
+ - Estefanía Bauzá
186
+
187
+ - `Tecnativa <https://www.tecnativa.com/>`__:
188
+
189
+ - Pedro M. Baeza
190
+ - Christian Ramos
191
+
192
+ Maintainers
193
+ -----------
194
+
195
+ This module is maintained by the OCA.
196
+
197
+ .. image:: https://odoo-community.org/logo.png
198
+ :alt: Odoo Community Association
199
+ :target: https://odoo-community.org
200
+
201
+ OCA, or the Odoo Community Association, is a nonprofit organization whose
202
+ mission is to support the collaborative development of Odoo features and
203
+ promote its widespread use.
204
+
205
+ .. |maintainer-ebauza| image:: https://github.com/ebauza.png?size=40px
206
+ :target: https://github.com/ebauza
207
+ :alt: ebauza
208
+ .. |maintainer-pedrobaeza| image:: https://github.com/pedrobaeza.png?size=40px
209
+ :target: https://github.com/pedrobaeza
210
+ :alt: pedrobaeza
211
+
212
+ Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
213
+
214
+ |maintainer-ebauza| |maintainer-pedrobaeza|
215
+
216
+ This module is part of the `OCA/hr <https://github.com/OCA/hr/tree/16.0/hr_appraisal_oca>`_ project on GitHub.
217
+
218
+ You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -0,0 +1,2 @@
1
+ from . import models
2
+ from . import wizard
@@ -0,0 +1,28 @@
1
+ # Copyright 2025 Fundacion Esment - Estefanía Bauzá
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ {
4
+ "name": "Appraisal Oca",
5
+ "version": "16.0.1.0.0",
6
+ "category": "Human Resources/Employees",
7
+ "website": "https://github.com/OCA/hr",
8
+ "author": "Fundación Esment, Odoo Community Association (OCA)",
9
+ "maintainers": ["ebauza", "pedrobaeza"],
10
+ "images": ["static/description/banner.png"],
11
+ "summary": "Module for managing employee appraisals",
12
+ "license": "AGPL-3",
13
+ "depends": ["base", "hr", "mail"],
14
+ "installable": True,
15
+ "data": [
16
+ "security/hr_appraisal_security.xml",
17
+ "security/ir.model.access.csv",
18
+ "data/mail_template_data.xml",
19
+ "data/mail_activity_type_data.xml",
20
+ "views/hr_appraisal_form_view.xml",
21
+ "views/res_config_settings_views.xml",
22
+ "views/hr_employee_form_view.xml",
23
+ "views/hr_appraisal_template_form_view.xml",
24
+ "views/hr_appraisal_tag_form_view.xml",
25
+ "wizard/hr_appraisal_wizard_form_view.xml",
26
+ "wizard/hr_appraisal_request_wizard_view.xml",
27
+ ],
28
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <odoo noupdate="1">
3
+ <record id="mail_act_hr_appraisal_cfr" model="mail.activity.type">
4
+ <field name="name">CFR</field>
5
+ <field name="icon">fa-comments-o</field>
6
+ <field name="summary">Appraisals</field>
7
+ <field name="res_model">hr.appraisal</field>
8
+ </record>
9
+ </odoo>
@@ -0,0 +1,167 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <odoo noupdate="1">
3
+ <record id="mail_template_appraisal_request" model="mail.template">
4
+ <field name="name">HR: Manager appraisal request</field>
5
+ <field name="model_id" ref="hr_appraisal_oca.model_hr_appraisal" />
6
+ <field name="subject">Appraisal Requested</field>
7
+ <field name="email_from">{{user.email_formatted}}</field>
8
+ <field name="reply_to">{{user.email_formatted}}</field>
9
+ <field
10
+ name="description"
11
+ >Sent manually to the employee by the manager who wants to do an appraisal</field>
12
+ <field name="auto_delete" eval="True" />
13
+ <field name="body_html" type="html">
14
+ <div style="margin: 0px; padding: 0px;">
15
+ <p style="margin: 0px; padding: 0px; font-size: 13px;">
16
+ Dear
17
+ <t t-if="object.employee_id.work_email">
18
+ <t t-out="object.employee_id.name or ''" />,
19
+ </t>
20
+ <t t-foreach="object.manager_ids" t-as="manager">
21
+ <t t-if="user.id not in object.manager_user_ids.ids">
22
+ <t t-out="manager.name or ''" />,
23
+ </t>
24
+ </t>
25
+ <br />
26
+ An appraisal has been requested by <t
27
+ t-out="user.name or ''"
28
+ />.<br />
29
+ <br />
30
+ <t t-if="ctx.get('user_body')">
31
+ <div
32
+ style="margin: 16px 0px 16px 0px; padding: 8px 16px 8px 16px; background-color: #F1F1F1;"
33
+ >
34
+ <t t-out="ctx.get('user_body')"> </t>
35
+ </div>
36
+ </t>
37
+ <t t-if="ctx.get('recipient_users')">
38
+ <p
39
+ style="margin: 16px 0px 16px 0px; padding: 8px 16px 8px 16px; text-align: center;"
40
+ >
41
+ <t
42
+ t-set="link"
43
+ t-value="'/mail/view?model=hr.appraisal&amp;res_id=%s' % object.id"
44
+ />
45
+ <a
46
+ style="margin: auto; background-color:#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px;"
47
+ t-att-href="link"
48
+ >View Appraisal</a>
49
+ </p>
50
+ </t>
51
+ <br />
52
+ </p>
53
+ </div>
54
+ </field>
55
+ </record>
56
+ <record id="mail_template_appraisal_request_from_employee" model="mail.template">
57
+ <field name="name">HR: Employee Appraisal Request</field>
58
+ <field name="model_id" ref="hr_appraisal_oca.model_hr_appraisal" />
59
+ <field name="subject">{{ user.name or ''}} requests an Appraisal</field>
60
+ <field name="email_from">{{user.email_formatted}}</field>
61
+ <field name="reply_to">{{user.email_formatted}}</field>
62
+ <field
63
+ name="description"
64
+ >Sent manually to the manager by the employee who wants an appraisal</field>
65
+ <field name="auto_delete" eval="True" />
66
+ <field name="body_html" type="html">
67
+ <div style="margin: 0px; padding: 0px;">
68
+ <p style="margin: 0px; padding: 0px; font-size: 13px;">
69
+ Dear
70
+ <t t-foreach="object.manager_ids" t-as="manager">
71
+ <t t-if="manager.work_email">
72
+ <t t-out="manager.name or ''" />,
73
+ </t>
74
+ </t>
75
+ <br />
76
+ <t t-out="user.name or ''" /> wishes an appraisal.<br />
77
+ <br />
78
+ <t t-if="ctx.get('user_body')">
79
+ <div
80
+ style="margin: 16px 0px 16px 0px; padding: 8px 16px 8px 16px; background-color: #F1F1F1;"
81
+ >
82
+ <t t-out="ctx.get('user_body')"> </t>
83
+ </div>
84
+ </t>
85
+ <t t-if="ctx.get('recipient_users')">
86
+ <p
87
+ style="margin: 16px 0px 16px 0px; padding: 8px 16px 8px 16px; text-align: center;"
88
+ >
89
+ <t
90
+ t-set="link"
91
+ t-value="'/mail/view?model=hr.appraisal&amp;res_id=%s' % object.id"
92
+ />
93
+ <a
94
+ style="margin: auto; background-color:#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px;"
95
+ t-att-href="link"
96
+ >View Appraisal</a>
97
+ </p>
98
+ </t>
99
+ </p>
100
+ </div>
101
+ </field>
102
+ </record>
103
+ <record id="mail_template_appraisal_confirmation" model="mail.template">
104
+ <field name="name">HR: Appraisal Confirmation</field>
105
+ <field name="model_id" ref="hr_appraisal_oca.model_hr_appraisal" />
106
+ <field name="subject">{{object.employee_id.name}}: Appraisal Confirmed</field>
107
+ <field name="email_from">{{user.email_formatted}}</field>
108
+ <field
109
+ name="description"
110
+ >Sent automatically to both employee and manager when appraisal is confirmed</field>
111
+ <field name="auto_delete" eval="True" />
112
+ <field name="body_html" type="html">
113
+ <div style="margin: 0px; padding: 0px;">
114
+ <p style="margin: 0px; padding: 0px; font-size: 13px;">
115
+ An appraisal of <t
116
+ t-out="object.employee_id.name or 'employee'"
117
+ /> has been confirmed.<br />
118
+ <br /><br />
119
+ Please schedule an appraisal date together.
120
+ <br /><br />
121
+ <t t-if="ctx.get('recipient_users')">
122
+ <p style="margin: 16px 0px 16px 0px; text-align: center;">
123
+ <t
124
+ t-set="link"
125
+ t-value="'/mail/view?model=hr.appraisal&amp;res_id=%s' % object.id"
126
+ />
127
+ <a
128
+ style="background-color:#875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px;"
129
+ t-att-href="link"
130
+ >View Appraisal</a>
131
+ </p>
132
+ </t>
133
+ </p>
134
+ </div>
135
+ </field>
136
+ </record>
137
+ <record id="mail_template_appraisal_completed" model="mail.template">
138
+ <field name="name">HR: Appraisal Completed</field>
139
+ <field name="model_id" ref="hr_appraisal_oca.model_hr_appraisal" />
140
+ <field name="subject">Your Appraisal has been completed</field>
141
+ <field name="email_from">{{user.email_formatted}}</field>
142
+ <field
143
+ name="description"
144
+ >Sent automatically to both employee and manager when appraisal is completed</field>
145
+ <field name="auto_delete" eval="True" />
146
+ <field name="body_html" type="html">
147
+ <div>
148
+ The appraisal's status has been set to <strong
149
+ style="box-sizing:border-box;font-weight:bold;"
150
+ >Done</strong> by <t t-out="user.name or ''" />.<br />
151
+ <br />
152
+ <t t-if="ctx.get('recipient_users')">
153
+ <p style="box-sizing:border-box;margin-top:24px;margin-bottom:16px">
154
+ <t
155
+ t-set="link"
156
+ t-value="'/mail/view?model=hr.appraisal&amp;res_id=%s' % object.id"
157
+ />
158
+ <a
159
+ style="box-sizing:border-box;text-decoration:none;color:#7c7bad;background-color:#875A7B;padding:10px; color:#fff; border-radius:5px;"
160
+ t-att-href="link"
161
+ >View Employee Appraisal</a>
162
+ </p>
163
+ </t>
164
+ </div>
165
+ </field>
166
+ </record>
167
+ </odoo>