[FIX] Partial fix of 'hr_evaluation', which is broken by the new 'survey' + code cleaning and simplification

bzr revid: rim@openerp.com-20140211153524-kxupg07ns5dny658
This commit is contained in:
Richard Mathot (OpenERP) 2014-02-11 16:35:24 +01:00
parent 60e4340cee
commit fbbe8631c9
7 changed files with 139 additions and 141 deletions

View File

@ -27,7 +27,9 @@
'sequence': 31,
'website': 'http://www.openerp.com',
'summary': 'Periodical Evaluations, Appraisals, Surveys',
'images': ['images/hr_evaluation_analysis.jpeg','images/hr_evaluation.jpeg','images/hr_interview_requests.jpeg'],
'images': ['images/hr_evaluation_analysis.jpeg',
'images/hr_evaluation.jpeg',
'images/hr_interview_requests.jpeg'],
'depends': ['hr', 'calendar', 'survey'],
'description': """
Periodical Employees evaluation and appraisals
@ -47,16 +49,17 @@ Key Features
* Every evaluation filled by employees can be viewed in a PDF form.
* Interview Requests are generated automatically by OpenERP according to employees evaluation plans. Each user receives automatic emails and requests to perform a periodical evaluation of their colleagues.
""",
"demo": ["hr_evaluation_demo.xml"],
"data": [
'security/ir.model.access.csv',
'security/hr_evaluation_security.xml',
#'security/ir.model.access.csv',
#'security/hr_evaluation_security.xml',
'hr_evaluation_view.xml',
'report/hr_evaluation_report_view.xml',
'board_hr_evaluation_view.xml',
'hr_evaluation_data.xml',
'hr_evaluation_installer.xml',
'survey_data_appraisal.xml',
# 'hr_evaluation_data.xml',
# 'hr_evaluation_installer.xml',
],
# "demo": ["hr_evaluation_demo.xml"],
'test': [
'test/test_hr_evaluation.yml',
'test/hr_evalution_demo.yml',
@ -65,5 +68,3 @@ Key Features
'installable': True,
'application': True,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -27,7 +27,8 @@ import time
from openerp.osv import fields, osv
from openerp.tools.translate import _
class hr_evaluation_plan(osv.osv):
class hr_evaluation_plan(osv.Model):
_name = "hr_evaluation.plan"
_description = "Appraisal Plan"
_columns = {
@ -46,7 +47,7 @@ class hr_evaluation_plan(osv.osv):
}
class hr_evaluation_plan_phase(osv.osv):
class hr_evaluation_plan_phase(osv.Model):
_name = "hr_evaluation.plan.phase"
_description = "Appraisal Plan Phase"
_order = "sequence"
@ -60,7 +61,7 @@ class hr_evaluation_plan_phase(osv.osv):
('bottom-up', 'Bottom-Up Appraisal Requests'),
('self', 'Self Appraisal Requests'),
('final', 'Final Interview')], 'Action', required=True),
'survey_id': fields.many2one('survey','Appraisal Form',required=True),
'survey_id': fields.many2one('survey.survey', 'Appraisal Form', required=True),
'send_answer_manager': fields.boolean('All Answers',
help="Send all answers to the manager"),
'send_answer_employee': fields.boolean('All Answers',
@ -72,10 +73,9 @@ class hr_evaluation_plan_phase(osv.osv):
'wait': fields.boolean('Wait Previous Phases',
help="Check this box if you want to wait that all preceding phases " +
"are finished before launching this phase."),
'mail_feature': fields.boolean('Send mail for this phase', help="Check this box if you want to send mail to employees"+
" coming under this phase"),
'mail_feature': fields.boolean('Send mail for this phase', help="Check this box if you want to send mail to employees coming under this phase"),
'mail_body': fields.text('Email'),
'email_subject':fields.text('char')
'email_subject': fields.text('Subject')
}
_defaults = {
'sequence': 1,
@ -98,15 +98,15 @@ Thanks,
}
class hr_employee(osv.osv):
class hr_employee(osv.Model):
_name = "hr.employee"
_inherit = "hr.employee"
_columns = {
'evaluation_plan_id': fields.many2one('hr_evaluation.plan', 'Appraisal Plan'),
'evaluation_date': fields.date('Next Appraisal Date', help="The date of the next appraisal is computed by the appraisal plan's dates (first appraisal + periodicity)."),
}
def run_employee_evaluation(self, cr, uid, automatic=False, use_new_cursor=False, context=None):
now = parser.parse(datetime.now().strftime('%Y-%m-%d'))
obj_evaluation = self.pool.get('hr_evaluation.evaluation')
@ -126,8 +126,7 @@ class hr_employee(osv.osv):
return True
class hr_evaluation(osv.osv):
class hr_evaluation(osv.Model):
_name = "hr_evaluation.evaluation"
_inherit = "mail.thread"
_description = "Employee Appraisal"
@ -136,12 +135,10 @@ class hr_evaluation(osv.osv):
'date': fields.date("Appraisal Deadline", required=True, select=True),
'employee_id': fields.many2one('hr.employee', "Employee", required=True),
'note_summary': fields.text('Appraisal Summary'),
'note_action': fields.text('Action Plan',
help="If the evaluation does not meet the expectations, you can propose"+
"an action plan"),
'note_action': fields.text('Action Plan', help="If the evaluation does not meet the expectations, you can propose an action plan"),
'rating': fields.selection([
('0','Significantly bellow expectations'),
('1','Did not meet expectations'),
('0', 'Significantly below expectations'),
('1', 'Do not meet expectations'),
('2', 'Meet expectations'),
('3', 'Exceeds expectations'),
('4', 'Significantly exceeds expectations'),
@ -183,7 +180,6 @@ class hr_evaluation(osv.osv):
return {'value': vals}
def button_plan_in_progress(self, cr, uid, ids, context=None):
mail_message = self.pool.get('mail.message')
hr_eval_inter_obj = self.pool.get('hr.evaluation.interview')
if context is None:
context = {}
@ -275,26 +271,27 @@ class hr_evaluation(osv.osv):
return super(hr_evaluation, self).write(cr, uid, ids, vals, context=context)
class survey_request(osv.osv):
_inherit = "survey.request"
_columns = {
'is_evaluation': fields.boolean('Is Appraisal?'),
}
class hr_evaluation_interview(osv.osv):
class hr_evaluation_interview(osv.Model):
_name = 'hr.evaluation.interview'
_inherits = {'survey.request': 'request_id'}
_inherit = 'mail.thread'
_rec_name = 'request_id'
_description = 'Appraisal Interview'
_columns = {
'request_id': fields.many2one('survey.request','Request_id', ondelete='cascade', required=True),
'request_id': fields.many2one('survey.user_input', 'Survey Request', ondelete='cascade', required=True),
'user_to_review_id': fields.many2one('hr.employee', 'Employee to Interview'),
'evaluation_id': fields.many2one('hr_evaluation.evaluation', 'Appraisal Form'),
'user_id': fields.many2one('res.users', 'Interviewer'),
'state': fields.selection([('draft', "Draft"),
('waiting_answer', "In progress"),
('done', "Done"),
('cancel', "Cancelled")],
string="State", required=True),
# fields from request_id
'survey_id': fields.related('request_id', 'survey_id', string="Appraisal Form", type="many2one", relation="survey.survey"),
'deadline': fields.related('request_id', 'deadline', string="Deadline"),
}
_defaults = {
'is_evaluation': True,
'state': 'draft'
}
def name_get(self, cr, uid, ids, context=None):
@ -353,7 +350,7 @@ class hr_evaluation_interview(osv.osv):
context = {}
record = self.browse(cr, uid, ids, context=context)
record = record and record[0]
context.update({'survey_id': record.survey_id.id, 'response_id': [record.response.id], 'response_no':0,})
context.update({'survey_id': record.survey_id.id, 'response_id': [record.response.id], 'response_no': 0})
value = self.pool.get("survey").action_print_survey(cr, uid, ids, context=context)
return value

View File

@ -16,7 +16,7 @@
<field name="body"><![CDATA[<p>Manage employee reviews: you can define an appraisal campaign with several steps, with specific evaluation surveys according to hierarchy levels. Evaluations filled by employees may be exported as pdf files.</p>]]></field>
</record>
<record id="survey_2" model="survey">
<!-- <record id="survey_2" model="survey">
<field name="title">Self Appraisal</field>
<field name="max_response_limit">20</field>
<field eval="[(6,0,[])]" name="users"/>
@ -1153,6 +1153,7 @@ Once the form had been filled, the employee send it to his supervisor.
<field name="question_id" ref="survey_question_6"/>
<field eval="5" name="sequence"/>
</record>
-->
</data>
<data noupdate="1">
@ -1175,8 +1176,8 @@ Once the form had been filled, the employee send it to his supervisor.
<field name="action">self</field>
<field eval="0" name="send_anonymous_employee"/>
<field eval="0" name="send_answer_employee"/>
<field name="survey_id" ref="hr_evaluation.survey_2"/>
<field eval="0" name="send_answer_manager"/>
<!-- <field name="survey_id" ref="hr_evaluation.survey_2"/>
--> <field eval="0" name="send_answer_manager"/>
<field eval="0" name="wait"/>
</record>
</data>

View File

@ -21,6 +21,7 @@
<field name="model">hr_evaluation.plan</field>
<field name="arch" type="xml">
<form string="Appraisal Plan" version="7.0">
<sheet>
<group col="4">
<group>
<field name="name"/>
@ -37,6 +38,7 @@
<field name="phase_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
@ -165,11 +167,9 @@
</header>
<sheet>
<label for="employee_id" class="oe_edit_only"/>
<h1><field name="employee_id" class="oe_inline"
attrs="{'readonly': [('state', '=', 'done')]}"
on_change="onchange_employee_id(employee_id)"/>,
<field name="date"
attrs="{'readonly': [('state', '=', 'done')]}"/>
<h1>
<field name="employee_id" class="oe_inline" attrs="{'readonly': [('state', '=', 'done')]}" on_change="onchange_employee_id(employee_id)"/>
<field name="date" attrs="{'readonly': [('state', '=', 'done')]}"/>
</h1>
<label for="plan_id" class="oe_edit_only"/>
<h2><field name="plan_id" attrs="{'readonly': [('state', '=', 'done')]}"/></h2>
@ -183,8 +183,8 @@
<field nolabel="1" name="survey_request_ids" attrs="{'readonly': [('state', '=', 'done')]}">
<form string="Interview Appraisal" version="7.0">
<div class="oe_right oe_button_box">
<button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
<button name="%(survey.survey_browse_response)d" string="Print Interview" type="action" states="done" icon="gtk-print" context="{'survey_id': survey_id, 'response_id' : [response], 'response_no':0,}" attrs="{'readonly':[('response','=',False)]}" />
<button string="Answer Survey" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
<button string="Print Interview" states="done" icon="gtk-print" context="{'survey_id': survey_id, 'response_id' : [response], 'response_no':0,}" attrs="{'readonly':[('response_id','=',False)]}" />
</div>
<group>
<group>
@ -193,8 +193,8 @@
<field name="user_id" string="Interviewer" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'base.group_hr_manager']}"/>
</group>
<group>
<field name="date_deadline"/>
<field name="response" readonly="1"/>
<field name="deadline"/>
<field name="request_id" readonly="1"/>
</group>
</group>
<group col="4" string="Status" invisible="1">
@ -230,7 +230,6 @@
<field name="employee_id"/>
<field name="plan_id"/>
<field name="date"/>
<!--field name="progress" widget="progressbar"/-->
<field name="rating"/>
<field name="state"/>
</tree>
@ -294,7 +293,7 @@
attrs="{'readonly':[('survey_id','=',False)]}" class="oe_highlight"/>
<button string="Send Request" name="survey_req_waiting_answer" type="object"
states="draft" class="oe_highlight"/>
<button string="Answer Survey" name="%(survey.action_view_survey_question_message)d" type="action"
<button string="Answer Survey" name="#" type="action"
states="waiting_answer" class="oe_highlight"
context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}"
attrs="{'readonly':[('survey_id','=',False)]}"/>
@ -316,8 +315,8 @@
<field name="user_id" string="Interviewer" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'base.group_hr_manager']}"/>
</group>
<group>
<field name="date_deadline"/>
<field name="response" readonly="1"/>
<field name="deadline"/>
<field name="request_id" readonly="1"/>
<field name="evaluation_id" string="Appraisal Plan"/>
</group>
</group>
@ -331,12 +330,12 @@
<field name="model">hr.evaluation.interview</field>
<field name="arch" type="xml">
<tree string="Interview Appraisal">
<field name="date_deadline" string="Deadline Date"/>
<field name="deadline" string="Deadline Date"/>
<field name="survey_id"/>
<field name="user_id" string="Interviewer"/>
<field name="user_to_review_id"/>
<field name="response" readonly="1" invisible="True"/>
<button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response, 'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
<field name="request_id" readonly="1" invisible="True"/>
<button name="#" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response, 'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/>
<button name="action_print_survey" string="Print Survey" type="object" icon="gtk-print" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0}" attrs="{'readonly':[('survey_id','=',False)]}"/>
<button name="%(mail.action_email_compose_message_wizard)d" string="Send Reminder Email" icon="terp-mail-message-new" type="action" states="waiting_answer"/>
<field name="state"/>
@ -351,7 +350,7 @@
<field name="model">hr.evaluation.interview</field>
<field name="arch" type="xml">
<search string="Search Appraisal">
<field name="date_deadline"/>
<field name="deadline"/>
<filter icon="terp-gtk-go-back-rtl" string="To Do" name="todo" domain="[('state','=','waiting_answer')]"/>
<field name="user_to_review_id"/>
<field name="user_id" string="Interviewer"/>
@ -368,7 +367,7 @@
<field name="name">Interview Requests</field>
<field name="model">hr.evaluation.interview</field>
<field name="arch" type="xml">
<calendar string="Interview Request" color="user_to_review_id" date_start="date_deadline">
<calendar string="Interview Request" color="user_to_review_id" date_start="deadline">
<field name="request_id"/>
</calendar>
</field>
@ -379,8 +378,7 @@
<field name="res_model">hr.evaluation.interview</field>
<field name="view_type">form</field>
<field name="view_id" eval="False"/>
<field name="domain">[('is_evaluation' ,'=', True)]</field>
<field name="context">{'default_is_evaluation': True, "search_default_todo":1,"search_default_user_id":uid}</field>
<field name="context">{"search_default_todo":1,"search_default_user_id":uid}</field>
<field name="search_view_id" ref="view_hr_evaluation_interview_search"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">

View File

@ -22,7 +22,8 @@
from openerp import tools
from openerp.osv import fields, osv
class hr_evaluation_report(osv.osv):
class hr_evaluation_report(osv.Model):
_name = "hr.evaluation.report"
_description = "Evaluations Statistics"
_auto = False
@ -32,7 +33,7 @@ class hr_evaluation_report(osv.osv):
'overpass_delay': fields.float('Overpassed Deadline', digits=(16, 2), readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'deadline': fields.date("Deadline", readonly=True),
'request_id': fields.many2one('survey.request', 'Request_id', readonly=True),
'request_id': fields.many2one('survey.user_input', 'Request_id', readonly=True),
'closed': fields.date("closed", readonly=True),
'year': fields.char('Year', size=4, readonly=True),
'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'),
@ -57,6 +58,7 @@ class hr_evaluation_report(osv.osv):
], 'Status', readonly=True),
}
_order = 'create_date desc'
def init(self, cr):
tools.drop_view_if_exists(cr, 'hr_evaluation_report')
cr.execute("""

View File

@ -47,7 +47,6 @@ sent mails with personal token for the invitation of the survey.
],
'demo': ['data/survey_demo_user.xml',
'data/survey_demo_feedback.xml',
'data/survey_demo_appraisal.xml',
'data/survey.user_input.csv',
'data/survey.user_input_line.csv'],
'installable': True,