Browse Source

[ADD] Initial Commit

pull/78/head
Sreejith 7 years ago
parent
commit
39b38f7e54
  1. 38
      hr_appraisal/README.rst
  2. 6
      hr_appraisal/RELEASE_NOTES.md
  3. 24
      hr_appraisal/__init__.py
  4. 46
      hr_appraisal/__manifest__.py
  5. 24
      hr_appraisal/data/hr_appraisal_stages.xml
  6. 24
      hr_appraisal/models/__init__.py
  7. 192
      hr_appraisal/models/hr_appraisal_form.py
  8. 30
      hr_appraisal/models/hr_appraisal_survey.py
  9. 56
      hr_appraisal/security/hr_appraisal_security.xml
  10. 3
      hr_appraisal/security/ir.model.access.csv
  11. BIN
      hr_appraisal/static/description/HRMS-BUTTON.png
  12. BIN
      hr_appraisal/static/description/answers.png
  13. BIN
      hr_appraisal/static/description/appraisal.png
  14. BIN
      hr_appraisal/static/description/banner.jpg
  15. BIN
      hr_appraisal/static/description/cybro-service.png
  16. BIN
      hr_appraisal/static/description/cybro_logo.png
  17. BIN
      hr_appraisal/static/description/email.png
  18. BIN
      hr_appraisal/static/description/icon.png
  19. 147
      hr_appraisal/static/description/index.html
  20. BIN
      hr_appraisal/static/description/settings.png
  21. BIN
      hr_appraisal/static/description/view_answers.png
  22. 181
      hr_appraisal/views/hr_appraisal_form_view.xml
  23. 16
      hr_appraisal/views/hr_appraisal_survey_views.xml

38
hr_appraisal/README.rst

@ -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.

6
hr_appraisal/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module hr_appraisal
#### 30.03.2018
#### Version 10.0.1.0.0
##### ADD
- Initial commit for OpenHrms Project

24
hr_appraisal/__init__.py

@ -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

46
hr_appraisal/__manifest__.py

@ -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,
}

24
hr_appraisal/data/hr_appraisal_stages.xml

@ -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>

24
hr_appraisal/models/__init__.py

@ -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

192
hr_appraisal/models/hr_appraisal_form.py

@ -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.')

30
hr_appraisal/models/hr_appraisal_survey.py

@ -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")

56
hr_appraisal/security/hr_appraisal_security.xml

@ -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>

3
hr_appraisal/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hr_appraisal_hr_appraisal,hr_appraisal.hr_appraisal,model_hr_appraisal,,1,1,1,1
access_hr_appraisal_hr_appraisal1,hr_appraisal.hr_appraisal_stages,model_hr_appraisal_stages,,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_appraisal_hr_appraisal hr_appraisal.hr_appraisal model_hr_appraisal 1 1 1 1
3 access_hr_appraisal_hr_appraisal1 hr_appraisal.hr_appraisal_stages model_hr_appraisal_stages 1 1 1 1

BIN
hr_appraisal/static/description/HRMS-BUTTON.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
hr_appraisal/static/description/answers.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
hr_appraisal/static/description/appraisal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
hr_appraisal/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
hr_appraisal/static/description/cybro-service.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
hr_appraisal/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
hr_appraisal/static/description/email.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
hr_appraisal/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

147
hr_appraisal/static/description/index.html

@ -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;"> &#9733;</span>&nbsp;&nbsp;Create appraisal plans using interviews, questionnaires and feedback forms.</li>
<li style="list-style:none !important;"><span style="color:green;"> &#9733;</span>&nbsp;&nbsp; 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>

BIN
hr_appraisal/static/description/settings.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
hr_appraisal/static/description/view_answers.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

181
hr_appraisal/views/hr_appraisal_form_view.xml

@ -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 &lt; (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 &lt; (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>

16
hr_appraisal/views/hr_appraisal_survey_views.xml

@ -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>
Loading…
Cancel
Save