| @ -0,0 +1,38 @@ | |||||
|  | OHRMS Employee Appraisal v10 | ||||
|  | ============================ | ||||
|  | 
 | ||||
|  | Roll out appraisal plans and get the best of your workforce | ||||
|  | 
 | ||||
|  | Depends | ||||
|  | ======= | ||||
|  | [hr] addon Odoo | ||||
|  | 
 | ||||
|  | Tech | ||||
|  | ==== | ||||
|  | * [Python] - Models | ||||
|  | * [XML] - Odoo views | ||||
|  | 
 | ||||
|  | Installation | ||||
|  | ============ | ||||
|  | - www.odoo.com/documentation/10.0/setup/install.html | ||||
|  | - Install our custom addon | ||||
|  | 
 | ||||
|  | Bug Tracker | ||||
|  | =========== | ||||
|  | Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ======= | ||||
|  | * Cybrosys Techno Solutions <https://www.cybrosys.com> | ||||
|  | 
 | ||||
|  | Author | ||||
|  | ------ | ||||
|  | 
 | ||||
|  | Developer: Saritha Sahadevan @ cybrosys, saritha@cybrosys.in | ||||
|  | 
 | ||||
|  | Maintainer | ||||
|  | ---------- | ||||
|  | 
 | ||||
|  | This module is maintained by Cybrosys Technologies. | ||||
|  | 
 | ||||
|  | For support and more information, please visit https://www.cybrosys.com. | ||||
| @ -0,0 +1,6 @@ | |||||
|  | ## Module hr_appraisal | ||||
|  | 
 | ||||
|  | #### 30.03.2018 | ||||
|  | #### Version 10.0.1.0.0 | ||||
|  | ##### ADD | ||||
|  | - Initial commit for OpenHrms Project | ||||
| @ -0,0 +1,24 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ################################################################################### | ||||
|  | #    A part of OpenHrms Project <https://www.openhrms.com> | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). | ||||
|  | #    Author: Saritha Sahadevan (<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | 
 | ||||
|  | from . import models | ||||
| @ -0,0 +1,46 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ################################################################################### | ||||
|  | #    A part of OpenHrms Project <https://www.openhrms.com> | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). | ||||
|  | #    Author: Saritha Sahadevan (<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | { | ||||
|  |     'name': "OHRMS Employee Appraisal", | ||||
|  |     'version': '10.0.1.0', | ||||
|  |     'summary': """Roll out appraisal plans and get the best of your workforce""", | ||||
|  |     'description': """Roll out appraisal plans and get the best of your workforce""", | ||||
|  |     'category': 'Human Resources', | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     'website': "https://www.openhrms.com", | ||||
|  |     'depends': ['base', 'hr', 'survey'], | ||||
|  |     'data': [ | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |         'security/hr_appraisal_security.xml', | ||||
|  |         'views/hr_appraisal_survey_views.xml', | ||||
|  |         'views/hr_appraisal_form_view.xml', | ||||
|  |         'data/hr_appraisal_stages.xml' | ||||
|  |     ], | ||||
|  |     'images': ["static/description/banner.gif"], | ||||
|  |     'license': "AGPL-3", | ||||
|  |     'installable': True, | ||||
|  |     'application': True, | ||||
|  | 
 | ||||
|  | } | ||||
| @ -0,0 +1,24 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record id="hr_appraisal_start" model="hr.appraisal.stages"> | ||||
|  |             <field name="name">To Start</field> | ||||
|  |             <field name="sequence">1</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="hr_appraisal_sent" model="hr.appraisal.stages"> | ||||
|  |             <field name="name">Sent Mail</field> | ||||
|  |             <field name="sequence">2</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="hr_appraisal_done" model="hr.appraisal.stages"> | ||||
|  |             <field name="name">Done</field> | ||||
|  |             <field name="sequence">3</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="hr_appraisal_cancel" model="hr.appraisal.stages"> | ||||
|  |             <field name="name">Cancel</field> | ||||
|  |             <field name="sequence">4</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,24 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ################################################################################### | ||||
|  | #    A part of OpenHrms Project <https://www.openhrms.com> | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). | ||||
|  | #    Author: Saritha Sahadevan (<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | 
 | ||||
|  | from . import hr_appraisal_survey, hr_appraisal_form | ||||
| @ -0,0 +1,192 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ################################################################################### | ||||
|  | #    A part of OpenHrms Project <https://www.openhrms.com> | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). | ||||
|  | #    Author: Saritha Sahadevan (<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | from odoo import models, fields, api, SUPERUSER_ID | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class HrAppraisalForm(models.Model): | ||||
|  |     _name = 'hr.appraisal' | ||||
|  |     _inherit = 'mail.thread' | ||||
|  |     _rec_name = 'emp_id' | ||||
|  |     _description = 'Appraisal' | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _read_group_stage_ids(self, categories, domain, order): | ||||
|  |         """ Read all the stages and display it in the kanban view, even if it is empty.""" | ||||
|  |         category_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) | ||||
|  |         return categories.browse(category_ids) | ||||
|  | 
 | ||||
|  |     def _default_stage_id(self): | ||||
|  |         """Setting default stage""" | ||||
|  |         rec = self.env['hr.appraisal.stages'].search([], limit=1, order='sequence ASC') | ||||
|  |         return rec.id if rec else None | ||||
|  | 
 | ||||
|  |     emp_id = fields.Many2one('hr.employee', string="Employee", required=True) | ||||
|  |     appraisal_deadline = fields.Date(string="Appraisal Deadline", required=True) | ||||
|  |     final_interview = fields.Date(string="Final Interview") | ||||
|  |     company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id) | ||||
|  |     hr_manager = fields.Boolean(string="Manager", default=False) | ||||
|  |     hr_emp = fields.Boolean(string="Employee", default=False) | ||||
|  |     hr_colloborator = fields.Boolean(string="Collaborators", default=False) | ||||
|  |     hr_colleague = fields.Boolean(string="Colleague", default=False) | ||||
|  |     hr_manager_id = fields.Many2many('hr.employee', 'manager_appraisal_rel', string="Select Appraisal Reviewer") | ||||
|  |     hr_colleague_id = fields.Many2many('hr.employee', 'colleagues_appraisal_rel', | ||||
|  |                                        string="Select Appraisal Reviewer") | ||||
|  |     hr_colloborator_id = fields.Many2many('hr.employee', 'colloborators_appraisal_rel', | ||||
|  |                                           string="Select Appraisal Reviewer") | ||||
|  |     manager_survey_id = fields.Many2one('survey.survey', string="Select Opinion Form") | ||||
|  |     emp_survey_id = fields.Many2one('survey.survey', string="Select Appraisal Form") | ||||
|  |     colloborator_survey_id = fields.Many2one('survey.survey', string="Select Opinion Form") | ||||
|  |     colleague_survey_id = fields.Many2one('survey.survey', string="Select Opinion Form") | ||||
|  |     response_id = fields.Many2one('survey.user_input', "Response", ondelete="set null", oldname="response") | ||||
|  |     final_evaluation = fields.Text(string="Final Evaluation") | ||||
|  |     app_period_from = fields.Date("From", required=True, readonly=True, default=fields.Datetime.now()) | ||||
|  |     tot_comp_survey = fields.Integer(string="Count Answers", compute="_compute_completed_survey") | ||||
|  |     tot_sent_survey = fields.Integer(string="Count Sent Questions") | ||||
|  |     created_by = fields.Many2one('res.users', string="Created By", default=lambda self: self.env.uid) | ||||
|  |     state = fields.Many2one('hr.appraisal.stages', string='Stage', track_visibility='onchange', index=True, | ||||
|  |                             default=lambda self: self._default_stage_id(), | ||||
|  |                             group_expand='_read_group_stage_ids') | ||||
|  |     # for coloring the kanban box | ||||
|  |     color = fields.Integer(string="Color Index") | ||||
|  |     check_sent = fields.Boolean(string="Check Sent Mail", default=False, copy=False) | ||||
|  |     check_draft = fields.Boolean(string="Check Draft", default=True, copy=False) | ||||
|  |     check_cancel = fields.Boolean(string="Check Cancel", default=False, copy=False) | ||||
|  |     check_done = fields.Boolean(string="Check Done", default=False, copy=False) | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def action_done(self): | ||||
|  |         rec = self.env['hr.appraisal.stages'].search([('sequence', '=', 3)]) | ||||
|  |         self.state = rec.id | ||||
|  |         self.check_done = True | ||||
|  |         self.check_draft = False | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def action_set_draft(self): | ||||
|  |         rec = self.env['hr.appraisal.stages'].search([('sequence', '=', 1)]) | ||||
|  |         self.state = rec.id | ||||
|  |         self.check_draft = True | ||||
|  |         self.check_sent = False | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def action_cancel(self): | ||||
|  |         rec = self.env['hr.appraisal.stages'].search([('sequence', '=', 4)]) | ||||
|  |         self.state = rec.id | ||||
|  |         self.check_cancel = True | ||||
|  |         self.check_draft = False | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def fetch_appraisal_reviewer(self): | ||||
|  |         appraisal_reviewers = [] | ||||
|  |         if self.hr_manager and self.hr_manager_id and self.manager_survey_id: | ||||
|  |             appraisal_reviewers.append((self.hr_manager_id, self.manager_survey_id)) | ||||
|  |         if self.hr_emp and self.emp_survey_id: | ||||
|  |             appraisal_reviewers.append((self.emp_id, self.emp_survey_id)) | ||||
|  |         if self.hr_colloborator and self.hr_colloborator_id and self.colloborator_survey_id: | ||||
|  |             appraisal_reviewers.append((self.hr_colloborator_id, self.colloborator_survey_id)) | ||||
|  |         if self.hr_colleague and self.hr_colleague_id and self.colleague_survey_id: | ||||
|  |             appraisal_reviewers.append((self.hr_colleague_id, self.colleague_survey_id)) | ||||
|  |         return appraisal_reviewers | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def action_start_appraisal(self): | ||||
|  |         """ This function will start the appraisal by sending emails to the corresponding employees | ||||
|  |             specified in the appraisal""" | ||||
|  |         send_count = 0 | ||||
|  |         appraisal_reviewers_list = self.fetch_appraisal_reviewer() | ||||
|  |         for appraisal_reviewers, survey_id in appraisal_reviewers_list: | ||||
|  |             for reviewers in appraisal_reviewers: | ||||
|  |                 url = survey_id.public_url | ||||
|  |                 response = self.env['survey.user_input'].create( | ||||
|  |                     {'survey_id': survey_id.id, 'partner_id': reviewers.user_id.partner_id.id, | ||||
|  |                      'appraisal_id': self.ids[0],  'deadline': self.appraisal_deadline, 'email': reviewers.user_id.email}) | ||||
|  |                 token = response.token | ||||
|  |                 if token: | ||||
|  |                     url = url + '/' + token | ||||
|  |                     mail_content = "Dear " + reviewers.name + "," + "<br>Please fill out the following survey " \ | ||||
|  |                                    "related to " + self.emp_id.name + "<br>Click here to access the survey.<br>" + \ | ||||
|  |                                    str(url) + "<br>Post your response for the appraisal till : " + str(self.appraisal_deadline) | ||||
|  |                     values = {'model': 'hr.appraisal', | ||||
|  |                               'res_id': self.ids[0], | ||||
|  |                               'subject': survey_id.title, | ||||
|  |                               'body_html': mail_content, | ||||
|  |                               'parent_id': None, | ||||
|  |                               'email_from': self.env.user.email or None, | ||||
|  |                               'auto_delete': True, | ||||
|  |                              } | ||||
|  |                     values['email_to'] = reviewers.work_email | ||||
|  |                     result = self.env['mail.mail'].create(values).send() | ||||
|  |                     if result is True: | ||||
|  |                         send_count += 1 | ||||
|  |                         self.write({'tot_sent_survey': send_count}) | ||||
|  |                         rec = self.env['hr.appraisal.stages'].search([('sequence', '=', 2)]) | ||||
|  |                         self.state = rec.id | ||||
|  |                         self.check_sent = True | ||||
|  |                         self.check_draft = False | ||||
|  | 
 | ||||
|  |         if self.hr_emp and self.emp_survey_id: | ||||
|  |             self.ensure_one() | ||||
|  |             if not self.response_id: | ||||
|  |                 response = self.env['survey.user_input'].create( | ||||
|  |                     {'survey_id': self.emp_survey_id.id, 'partner_id': self.emp_id.user_id.partner_id.id, | ||||
|  |                      'appraisal_id': self.ids[0], 'deadline': self.appraisal_deadline, 'email': reviewers.user_id.email}) | ||||
|  |                 self.response_id = response.id | ||||
|  |             else: | ||||
|  |                 response = self.response_id | ||||
|  |             return self.emp_survey_id.with_context(survey_token=response.token).action_start_survey() | ||||
|  | 
 | ||||
|  |     @api.multi | ||||
|  |     def action_get_answers(self): | ||||
|  |         """ This function will return all the answers posted related to this appraisal.""" | ||||
|  | 
 | ||||
|  |         tree_res = self.env['ir.model.data'].get_object_reference('survey', 'survey_user_input_tree') | ||||
|  |         tree_id = tree_res and tree_res[1] or False | ||||
|  |         form_res = self.env['ir.model.data'].get_object_reference('survey', 'survey_user_input_form') | ||||
|  |         form_id = form_res and form_res[1] or False | ||||
|  |         return { | ||||
|  |             'model': 'ir.actions.act_window', | ||||
|  |             'name': 'Answers', | ||||
|  |             'type': 'ir.actions.act_window', | ||||
|  |             'view_type': 'form', | ||||
|  |             'view_mode': 'form,tree', | ||||
|  |             'res_model': 'survey.user_input', | ||||
|  |             'views': [(tree_id, 'tree'), (form_id, 'form')], | ||||
|  |             'domain': [('state', '=', 'done'), ('appraisal_id', '=', self.ids[0])], | ||||
|  | 
 | ||||
|  |         } | ||||
|  | 
 | ||||
|  |     @api.one | ||||
|  |     def _compute_completed_survey(self): | ||||
|  | 
 | ||||
|  |         answers = self.env['survey.user_input'].search([('state', '=', 'done'), ('appraisal_id', '=', self.ids[0])]) | ||||
|  |         self.tot_comp_survey = len(answers) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class AppraisalStages(models.Model): | ||||
|  |     _name = 'hr.appraisal.stages' | ||||
|  |     _description = 'Appraisal Stages' | ||||
|  | 
 | ||||
|  |     name = fields.Char(string="Name") | ||||
|  |     sequence = fields.Integer(string="Sequence") | ||||
|  |     fold = fields.Boolean(string='Folded in Appraisal Pipeline', | ||||
|  |                           help='This stage is folded in the kanban view when ' | ||||
|  |                                'there are no records in that stage to display.') | ||||
| @ -0,0 +1,30 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ################################################################################### | ||||
|  | #    A part of OpenHrms Project <https://www.openhrms.com> | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2018-TODAY Cybrosys Technologies (<https://www.cybrosys.com>). | ||||
|  | #    Author: Saritha Sahadevan (<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    This program is free software: you can modify | ||||
|  | #    it under the terms of the GNU Affero General Public License (AGPL) as | ||||
|  | #    published by the Free Software Foundation, either version 3 of the | ||||
|  | #    License, or (at your option) any later version. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU Affero General Public License for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU Affero General Public License | ||||
|  | #    along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ################################################################################### | ||||
|  | 
 | ||||
|  | from odoo import models, fields | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class SurveyInput(models.Model): | ||||
|  |     _inherit = 'survey.user_input' | ||||
|  | 
 | ||||
|  |     appraisal_id = fields.Many2one('hr.appraisal', string="Appriasal id") | ||||
| @ -0,0 +1,56 @@ | |||||
|  | <?xml version="1.0" ?> | ||||
|  | <odoo> | ||||
|  |     <record id="property_rule_hr_appraisal" model="ir.rule"> | ||||
|  |         <field name="name">Hr Appraisal Multi Company</field> | ||||
|  |         <field name="model_id" ref="model_hr_appraisal"/> | ||||
|  |         <field eval="True" name="global"/> | ||||
|  |         <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record model="ir.module.category" id="module_category_hr_appraisal"> | ||||
|  |         <field name="name">Appraisal</field> | ||||
|  |         <field name="description">Helps to evaluate employees...</field> | ||||
|  |         <field name="sequence">3</field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="group_appraisal_employee" model="res.groups"> | ||||
|  |         <field name="name">Employee</field> | ||||
|  |         <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> | ||||
|  |         <field name="category_id" ref="hr_appraisal.module_category_hr_appraisal"/> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="group_appraisal_manager" model="res.groups"> | ||||
|  |         <field name="name">Manager</field> | ||||
|  |         <field name="category_id" ref="hr_appraisal.module_category_hr_appraisal"/> | ||||
|  |         <field name="implied_ids" eval="[(4, ref('group_appraisal_employee'))]"/> | ||||
|  |         <field name="users" eval="[(4, ref('base.user_root'))]"/> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="hr_appraisal_rule" model="ir.rule"> | ||||
|  |         <field name="name">Appraisal Forms</field> | ||||
|  |         <field name="domain_force">[('created_by','=',user.id)]</field> | ||||
|  |         <field name="global" eval="True"/> | ||||
|  |         <field name="model_id" ref="hr_appraisal.model_hr_appraisal"/> | ||||
|  |         <field name="groups" eval="[(4,ref('hr_appraisal.group_appraisal_employee'))]"/> | ||||
|  |         <field name="perm_write" eval="True"/> | ||||
|  |         <field name="perm_read" eval="True"/> | ||||
|  |         <field name="perm_create" eval="True"/> | ||||
|  |         <field name="perm_unlink" eval="True"/> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="hr_appraisal_manager_rule" model="ir.rule"> | ||||
|  |         <field name="name">Appraisal Forms</field> | ||||
|  |         <field name="global" eval="True"/> | ||||
|  |         <field name="model_id" ref="hr_appraisal.model_hr_appraisal"/> | ||||
|  |         <field name="groups" eval="[(4,ref('hr_appraisal.group_appraisal_manager'))]"/> | ||||
|  |         <field name="perm_write" eval="True"/> | ||||
|  |         <field name="perm_read" eval="True"/> | ||||
|  |         <field name="perm_create" eval="True"/> | ||||
|  |         <field name="perm_unlink" eval="True"/> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="survey.survey_input_users_access" model="ir.rule"> | ||||
|  |         <field name="domain_force">[('partner_id', '=', user.partner_id.id)]</field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  | </odoo> | ||||
| 
 | 
| After Width: | Height: | Size: 17 KiB | 
| After Width: | Height: | Size: 92 KiB | 
| After Width: | Height: | Size: 82 KiB | 
| After Width: | Height: | Size: 116 KiB | 
| After Width: | Height: | Size: 221 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 12 KiB | 
| @ -0,0 +1,147 @@ | |||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row"> | ||||
|  |         <h2 class="oe_slogan">OpenHRMS</h2> | ||||
|  |         <h3 class="oe_slogan">Most advanced open source HR management software</h3> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row oe_spaced oe_mt32"> | ||||
|  |         <div class="oe_span"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <a href="https://www.openhrms.com/#request-demo"> | ||||
|  |                     <img src="HRMS-BUTTON.png"> | ||||
|  |                 </a> | ||||
|  |                 <div class="oe_demo_footer oe_centeralign">Online Demo</div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div class="oe_span12"> | ||||
|  |             <h2 class="oe_slogan">Employee Appraisal</h2> | ||||
|  |             <h3 class="oe_slogan">Roll out appraisal plans and get the best of your workforce.</h3> | ||||
|  |             <h3 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h3> | ||||
|  |         </div> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <h4><p style="margin-left: 42px;">Major Features:</p></h4> | ||||
|  |             <ul> | ||||
|  |                 <li style="list-style:none !important;"><span style="color:green;"> ★</span>  Create appraisal plans using interviews, questionnaires and feedback forms.</li> | ||||
|  |                 <li style="list-style:none !important;"><span style="color:green;"> ★</span>   Multiple appraisal methods like self-appraisal, colleague evaluation</li> | ||||
|  |             </ul> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <div class="oe_picture"> | ||||
|  |             <h3 class="oe_slogan">Overview</h3> | ||||
|  |                 <p class="oe_mt32"> | ||||
|  |                     Employee appraisal module is a component of Open HRMS suit, | ||||
|  |                     it helps you to utilize the best of your human resource pool. | ||||
|  |                     Implement appraisal strategies to keep the motivational and performance level | ||||
|  |                     of your employees high. Appraisal module allows you to create Top Down or Bottom-up | ||||
|  |                     evaluation plans and give timely feedbacks and complements for accomplishments. | ||||
|  | 
 | ||||
|  |                 </p> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <p>Appraisal Menu</p> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="appraisal.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <p> | ||||
|  |                 Create a form for evaluating employee.Option to create Top Down or Bottom-up evaluation plans. | ||||
|  |             </p> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <p>Email Notification</p> | ||||
|  |          <div class="oe_span6"> | ||||
|  |             <p> | ||||
|  |                Email notification is sent to the corresponding employee including the link to participate in the survey | ||||
|  | 
 | ||||
|  |             </p> | ||||
|  |         </div> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="email.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <p>View Answers</p> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="view_answers.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |          <div class="oe_span6"> | ||||
|  |             <p>You can view all the answers here </p> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <p>Settings Menu</p> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <p>Set access rights for the employees.</p> | ||||
|  |         </div> | ||||
|  |         <div class="oe_span6"> | ||||
|  |             <div class="oe_demo oe_picture oe_screenshot"> | ||||
|  |                 <img src="appraisal.png"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <div class="row section-content"> | ||||
|  |     <div class="col-md-6 img-content"> | ||||
|  |         <h3>Our Odoo Services</h3> | ||||
|  |     </div> | ||||
|  |     <div class="bc-span col-md-12"> | ||||
|  |         <div class="inner-span"> | ||||
|  |             <a target="_blank" href="https://www.openhrms.com"> | ||||
|  |                 <img class="img-border img-responsive thumbnail" src="cybro-service.png"> | ||||
|  |             </a> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | 
 | ||||
|  | <section class="oe_container oe_dark"> | ||||
|  |     <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | ||||
|  |     <div class="oe_slogan" style="margin-top:10px !important;"> | ||||
|  |         <div> | ||||
|  |             <a  class="btn btn-primary btn-lg mt8" | ||||
|  |             style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i | ||||
|  |             class="fa fa-envelope"></i> Email </a> <a | ||||
|  |             class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | ||||
|  |             href="https://www.cybrosys.com/contact/"><i | ||||
|  |             class="fa fa-phone"></i> Contact Us </a> <a | ||||
|  |             class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | ||||
|  |             href="https://www.cybrosys.com/odoo-customization-and-installation/"><i | ||||
|  |             class="fa fa-check-square"></i> Request Customization </a> | ||||
|  |         </div> | ||||
|  |         <br> | ||||
|  |         <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
| After Width: | Height: | Size: 83 KiB | 
| After Width: | Height: | Size: 75 KiB | 
| @ -0,0 +1,181 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record id="hr_appraisal_form_view" model="ir.ui.view"> | ||||
|  |             <field name="name">hr.appraisal.form</field> | ||||
|  |             <field name="model">hr.appraisal</field> | ||||
|  |             <field name="priority">1</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form> | ||||
|  |                     <header> | ||||
|  |                         <button name="action_start_appraisal" string="Start Appraisal And Send Forms" | ||||
|  |                                 class="oe_highlight" type="object" | ||||
|  |                                 attrs="{'invisible': ['|','|',('check_sent','=', True),('check_done','=', True), | ||||
|  |                                 ('check_cancel','=', True)]}" | ||||
|  |                                 /> | ||||
|  |                         <button name="action_done" string="Done" | ||||
|  |                                 class="oe_highlight" type="object" | ||||
|  |                                 attrs="{'invisible': ['|','|',('check_done','=', True),('check_draft','=', True), | ||||
|  |                                  ('check_cancel','=', True)]}" | ||||
|  |                                 /> | ||||
|  |                         <button name="action_set_draft" string="Set To Draft" | ||||
|  |                                 class="oe_highlight" type="object" | ||||
|  |                                 attrs="{'invisible': ['|','|',('check_draft','=', True), ('check_done','=', True), | ||||
|  |                                 ('check_cancel','=', True)]}" | ||||
|  |                                 /> | ||||
|  |                         <button name="action_cancel" string="Cancel" | ||||
|  |                                 class="oe_highlight" type="object" | ||||
|  |                                 attrs="{'invisible': ['|','|',('check_draft','=', True),('check_done','=', True), | ||||
|  |                                  ('check_cancel', '=', True)]}"/> | ||||
|  |                         <field name="state" widget="statusbar"/> | ||||
|  |                     </header> | ||||
|  |                     <sheet> | ||||
|  |                         <div class="oe_button_box" name="button_box"> | ||||
|  |                             <button name="action_get_answers" | ||||
|  |                                 type="object" | ||||
|  |                                 class="oe_stat_button" | ||||
|  |                                 icon="fa-pencil-square-o"> | ||||
|  |                                 <field string="Answers" name="tot_comp_survey" widget="statinfo"/> | ||||
|  |                             </button> | ||||
|  |                         </div> | ||||
|  |                         <label for="emp_id"/> | ||||
|  |                         <h1> | ||||
|  |                             <field name="emp_id" class="oe_inline" placeholder="Employee's Name" | ||||
|  |                                    attrs="{'readonly':[('check_draft','!=',True)]}"/> | ||||
|  |                         </h1> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="appraisal_deadline" attrs="{'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                 <field name="response_id" invisible="1"/> | ||||
|  |                                 <field name="app_period_from" invisible="1"/> | ||||
|  |                                 <field name="created_by" invisible="1"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="final_interview" attrs="{'invisible':[('check_done','!=',True)]}"/> | ||||
|  |                                 <field name="tot_sent_survey" invisible="1"/> | ||||
|  |                                 <field name="check_draft" invisible="1"/> | ||||
|  |                                 <field name="check_sent" invisible="1"/> | ||||
|  |                                 <field name="check_done" invisible="1"/> | ||||
|  |                                 <field name="check_cancel" invisible="1"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                         <notebook> | ||||
|  |                             <page string="Final Evaluation" attrs="{'invisible':[('check_done','!=',True)]}"> | ||||
|  |                                 <field name="final_evaluation" nolabel="1" attrs="{'invisible':[('check_done','!=',True)]}"/> | ||||
|  |                             </page> | ||||
|  |                             <page string="Plan"> | ||||
|  |                                 <group col="4"> | ||||
|  |                                     <field name="hr_manager"/> | ||||
|  |                                     <field name="hr_manager_id" widget="many2many_tags" | ||||
|  |                                            placeholder="Select Appraisal Reviewer" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_manager','=', False)], 'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="manager_survey_id" | ||||
|  |                                            placeholder="Appraisal Form" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_manager','=', False)], 'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="hr_emp" attrs="{'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <seperator/> | ||||
|  |                                     <field name="emp_survey_id" | ||||
|  |                                            placeholder="Appraisal Form" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_emp','=', False)], | ||||
|  |                                            'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="hr_colloborator" attrs="{'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="hr_colloborator_id"  widget="many2many_tags" | ||||
|  |                                            placeholder="Select Appraisal Reviewer" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_colloborator','=', False)], | ||||
|  |                                            'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="colloborator_survey_id" | ||||
|  |                                            placeholder="Appraisal Form" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_colloborator','=', False)], | ||||
|  |                                            'readonly':[('check_draft','!=',True)]}"/> | ||||
|  |                                     <field name="hr_colleague" attrs="{'readonly':[('check_draft','!=', True)], | ||||
|  |                                            'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="hr_colleague_id"  widget="many2many_tags" | ||||
|  |                                            placeholder="Select Appraisal Reviewer" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_colleague','=', False)], | ||||
|  |                                            'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                     <field name="colleague_survey_id" | ||||
|  |                                            placeholder="Appraisal Form" nolabel="1" | ||||
|  |                                            attrs="{'invisible': [('hr_colleague','=', False)], | ||||
|  |                                            'readonly':[('check_draft','!=', True)]}"/> | ||||
|  |                                 </group> | ||||
|  |                             </page> | ||||
|  |                         </notebook> | ||||
|  |                     </sheet> | ||||
|  |                     <div class="oe_chatter"> | ||||
|  |                         <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> | ||||
|  |                         <field name="message_ids" widget="mail_thread"/> | ||||
|  |                     </div> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | 
 | ||||
|  |     <record model="ir.ui.view" id="hr_appraisal_tree_view"> | ||||
|  |         <field name="name">hr.appraisal.tree</field> | ||||
|  |         <field name="model">hr.appraisal</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <tree> | ||||
|  |                 <field name="emp_id"/> | ||||
|  |                 <field name="app_period_from"/> | ||||
|  |                 <field name="appraisal_deadline"/> | ||||
|  |                 <field name="company_id" invisible="1"/> | ||||
|  |             </tree> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="hr_appraisal_kanban" model="ir.ui.view"> | ||||
|  |         <field name="name">hr.appraisal.kanban</field> | ||||
|  |         <field name="model">hr.appraisal</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <kanban default_group_by="state" quick_create="false"> | ||||
|  |             <field name="color"/> | ||||
|  |             <field name="state"/> | ||||
|  |             <templates> | ||||
|  |                 <t t-name="kanban-box"> | ||||
|  |                     <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click"> | ||||
|  |                         <div class="o_dropdown_kanban dropdown"> | ||||
|  |                             <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" > | ||||
|  |                                 <span class="fa fa-bars fa-lg"/> | ||||
|  |                             </a> | ||||
|  |                             <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> | ||||
|  |                                 <t t-if="widget.editable"><li><a type="edit">Edit</a></li></t> | ||||
|  |                                 <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t> | ||||
|  |                                 <li><ul class="oe_kanban_colorpicker" data-field="color"/></li> | ||||
|  |                             </ul> | ||||
|  |                         </div> | ||||
|  |                         <div class="oe_kanban_content"> | ||||
|  |                             <div><strong><field name="emp_id"/></strong></div> | ||||
|  |                             <t t-if="record.appraisal_deadline.raw_value and record.appraisal_deadline.raw_value < (new Date())" t-set="red">oe_kanban_text_red</t> | ||||
|  |                                 Deadline: <span t-attf-class="#{red}"><i><field name="appraisal_deadline"/></i></span> | ||||
|  |                             <br/> | ||||
|  |                             <div class="text-muted"> | ||||
|  |                                 Sent Questions: <span><i><field name="tot_sent_survey"/></i></span> | ||||
|  |                             </div> | ||||
|  |                             <div class="text-muted"> | ||||
|  |                                 Answers: <span><i><field name="tot_comp_survey"/></i></span> | ||||
|  |                             </div> | ||||
|  |                             <div> | ||||
|  |                                 <t t-if="record.final_interview.raw_value and record.final_interview.raw_value < (new Date())" t-set="red">oe_kanban_text_red</t> | ||||
|  |                                 Final Interview:<span t-attf-class="#{red}"><i><field name="final_interview"/></i></span> | ||||
|  |                             </div> | ||||
|  |                             <div class="oe_clear"></div> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </t> | ||||
|  |             </templates> | ||||
|  |             </kanban> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="hr_appraisal_action_form" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Appraisal</field> | ||||
|  |         <field name="res_model">hr.appraisal</field> | ||||
|  |         <field name='view_type'>form</field> | ||||
|  |         <field name="view_id" ref="hr_appraisal_kanban"/> | ||||
|  |         <field name='view_mode'>kanban,tree,form</field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <menuitem name="Appraisal" id="menu_hr_appraisal_root" parent="hr.menu_hr_root" groups="hr_appraisal.group_appraisal_manager,hr_appraisal.group_appraisal_employee"/> | ||||
|  |     <menuitem name="Appraisal" id="menu_hr_appraisal" parent="menu_hr_appraisal_root"  action="hr_appraisal_action_form" groups="hr_appraisal.group_appraisal_manager,hr_appraisal.group_appraisal_employee"/> | ||||
|  |     <menuitem name="Answers" id="menu_hr_appraisal_answers" parent="menu_hr_appraisal_root" action="survey.action_survey_user_input" groups="hr_appraisal.group_appraisal_employee"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,16 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record model="ir.ui.view" id="hr_appraisal_survey_inherited"> | ||||
|  |             <field name="name">hr_appraisal list</field> | ||||
|  |             <field name="model">survey.user_input</field> | ||||
|  |             <field name="priority">1</field> | ||||
|  |             <field name="inherit_id" ref="survey.survey_user_input_form"/> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <xpath expr="//field[@name='email']" position="after"> | ||||
|  |                      <field name="appraisal_id"/> | ||||
|  |                 </xpath> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||