From fbbe8631c9edb2dacedcb99c1cd7c6bea6f42b33 Mon Sep 17 00:00:00 2001
From: "Richard Mathot (OpenERP)"
Date: Tue, 11 Feb 2014 16:35:24 +0100
Subject: [PATCH] [FIX] Partial fix of 'hr_evaluation', which is broken by the
new 'survey' + code cleaning and simplification
bzr revid: rim@openerp.com-20140211153524-kxupg07ns5dny658
---
addons/hr_evaluation/__openerp__.py | 25 ++--
addons/hr_evaluation/hr_evaluation.py | 129 +++++++++---------
addons/hr_evaluation/hr_evaluation_data.xml | 7 +-
addons/hr_evaluation/hr_evaluation_view.xml | 78 ++++++-----
.../report/hr_evaluation_report.py | 40 +++---
.../survey_data_appraisal.xml} | 0
addons/survey/__openerp__.py | 1 -
7 files changed, 139 insertions(+), 141 deletions(-)
rename addons/{survey/data/survey_demo_appraisal.xml => hr_evaluation/survey_data_appraisal.xml} (100%)
diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py
index 711571a2e89..e14e01a6515 100644
--- a/addons/hr_evaluation/__openerp__.py
+++ b/addons/hr_evaluation/__openerp__.py
@@ -20,22 +20,24 @@
##############################################################################
{
- 'name' : 'Employee Appraisals',
+ 'name': 'Employee Appraisals',
'version': '0.1',
'author': 'OpenERP SA',
'category': 'Human Resources',
'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'],
- 'depends': ['hr','calendar','survey'],
+ '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
==============================================
-By using this application you can maintain the motivational process by doing periodical evaluations of your employees' performance. The regular assessment of human resources can benefit your people as well your organization.
+By using this application you can maintain the motivational process by doing periodical evaluations of your employees' performance. The regular assessment of human resources can benefit your people as well your organization.
-An evaluation plan can be assigned to each employee. These plans define the frequency and the way you manage your periodic personal evaluations. You will be able to define steps and attach interview forms to each step.
+An evaluation plan can be assigned to each employee. These plans define the frequency and the way you manage your periodic personal evaluations. You will be able to define steps and attach interview forms to each step.
Manages several types of evaluations: bottom-up, top-down, self-evaluations and the final evaluation by the manager.
@@ -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:
-
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py
index 462154e9e4a..d416b42d5d2 100644
--- a/addons/hr_evaluation/hr_evaluation.py
+++ b/addons/hr_evaluation/hr_evaluation.py
@@ -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 = {
@@ -42,11 +43,11 @@ class hr_evaluation_plan(osv.osv):
'active': True,
'month_first': 6,
'month_next': 12,
- 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'account.account', context=c),
+ 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'account.account', context=c),
}
-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"
@@ -54,13 +55,13 @@ class hr_evaluation_plan_phase(osv.osv):
'name': fields.char("Phase", size=64, required=True),
'sequence': fields.integer("Sequence"),
'company_id': fields.related('plan_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
- 'plan_id': fields.many2one('hr_evaluation.plan','Appraisal Plan', ondelete='cascade'),
+ 'plan_id': fields.many2one('hr_evaluation.plan', 'Appraisal Plan', ondelete='cascade'),
'action': fields.selection([
- ('top-down','Top-Down Appraisal Requests'),
- ('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),
+ ('top-down', 'Top-Down Appraisal Requests'),
+ ('bottom-up', 'Bottom-Up Appraisal Requests'),
+ ('self', 'Self Appraisal Requests'),
+ ('final', 'Final Interview')], 'Action', 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,15 +73,14 @@ 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,
'email_subject': _('''Regarding '''),
- 'mail_body': lambda *a:_('''
+ 'mail_body': lambda *a: _('''
Date: %(date)s
Dear %(employee_name)s,
@@ -98,26 +98,26 @@ Thanks,
}
-class hr_employee(osv.osv):
+class hr_employee(osv.Model):
_name = "hr.employee"
- _inherit="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')
- emp_ids =self.search(cr, uid, [ ('evaluation_plan_id','<>',False), ('evaluation_date','=', False)], context=context)
+ emp_ids = self.search(cr, uid, [('evaluation_plan_id', '<>', False), ('evaluation_date', '=', False)], context=context)
for emp in self.browse(cr, uid, emp_ids, context=context):
- first_date = (now+ relativedelta(months=emp.evaluation_plan_id.month_first)).strftime('%Y-%m-%d')
+ first_date = (now + relativedelta(months=emp.evaluation_plan_id.month_first)).strftime('%Y-%m-%d')
self.write(cr, uid, [emp.id], {'evaluation_date': first_date}, context=context)
- emp_ids =self.search(cr, uid, [
- ('evaluation_plan_id','<>',False), ('evaluation_date','<=', time.strftime("%Y-%m-%d")),
- ], context=context)
+ emp_ids = self.search(cr, uid, [
+ ('evaluation_plan_id', '<>', False), ('evaluation_date', '<=', time.strftime("%Y-%m-%d")),
+ ], context=context)
for emp in self.browse(cr, uid, emp_ids, context=context):
next_date = (now + relativedelta(months=emp.evaluation_plan_id.month_next)).strftime('%Y-%m-%d')
self.write(cr, uid, [emp.id], {'evaluation_date': next_date}, context=context)
@@ -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,24 +135,22 @@ 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'),
- ('2','Meet expectations'),
- ('3','Exceeds expectations'),
- ('4','Significantly exceeds expectations'),
+ ('0', 'Significantly below expectations'),
+ ('1', 'Do not meet expectations'),
+ ('2', 'Meet expectations'),
+ ('3', 'Exceeds expectations'),
+ ('4', 'Significantly exceeds expectations'),
], "Appreciation", help="This is the appreciation on which the evaluation is summarized."),
- 'survey_request_ids': fields.one2many('hr.evaluation.interview','evaluation_id','Appraisal Forms'),
+ 'survey_request_ids': fields.one2many('hr.evaluation.interview', 'evaluation_id', 'Appraisal Forms'),
'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', required=True),
'state': fields.selection([
- ('draft','New'),
- ('cancel','Cancelled'),
- ('wait','Plan In Progress'),
- ('progress','Waiting Appreciation'),
- ('done','Done'),
+ ('draft', 'New'),
+ ('cancel', 'Cancelled'),
+ ('wait', 'Plan In Progress'),
+ ('progress', 'Waiting Appreciation'),
+ ('done', 'Done'),
], 'Status', required=True, readonly=True),
'date_close': fields.date('Ending Date', select=True),
}
@@ -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 = {}
@@ -214,7 +210,7 @@ class hr_evaluation(osv.osv):
if (not wait) and phase.mail_feature:
body = phase.mail_body % {'employee_name': child.name, 'user_signature': child.user_id.signature,
- 'eval_name': phase.survey_id.title, 'date': time.strftime('%Y-%m-%d'), 'time': time }
+ 'eval_name': phase.survey_id.title, 'date': time.strftime('%Y-%m-%d'), 'time': time}
sub = phase.email_subject
if child.work_email:
vals = {'state': 'outgoing',
@@ -224,32 +220,32 @@ class hr_evaluation(osv.osv):
'email_from': evaluation.employee_id.work_email}
self.pool.get('mail.mail').create(cr, uid, vals, context=context)
- self.write(cr, uid, ids, {'state':'wait'}, context=context)
+ self.write(cr, uid, ids, {'state': 'wait'}, context=context)
return True
def button_final_validation(self, cr, uid, ids, context=None):
request_obj = self.pool.get('hr.evaluation.interview')
- self.write(cr, uid, ids, {'state':'progress'}, context=context)
+ self.write(cr, uid, ids, {'state': 'progress'}, context=context)
for evaluation in self.browse(cr, uid, ids, context=context):
if evaluation.employee_id and evaluation.employee_id.parent_id and evaluation.employee_id.parent_id.user_id:
self.message_subscribe_users(cr, uid, [evaluation.id], user_ids=[evaluation.employee_id.parent_id.user_id.id], context=context)
- if len(evaluation.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', evaluation.id),('state', 'in', ['done','cancel'])], context=context)):
- raise osv.except_osv(_('Warning!'),_("You cannot change state, because some appraisal(s) are in waiting answer or draft state."))
+ if len(evaluation.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', evaluation.id), ('state', 'in', ['done', 'cancel'])], context=context)):
+ raise osv.except_osv(_('Warning!'), _("You cannot change state, because some appraisal(s) are in waiting answer or draft state."))
return True
def button_done(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids,{'state':'done', 'date_close': time.strftime('%Y-%m-%d')}, context=context)
+ self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')}, context=context)
return True
def button_cancel(self, cr, uid, ids, context=None):
- interview_obj=self.pool.get('hr.evaluation.interview')
+ interview_obj = self.pool.get('hr.evaluation.interview')
evaluation = self.browse(cr, uid, ids[0], context)
interview_obj.survey_req_cancel(cr, uid, [r.id for r in evaluation.survey_request_ids])
- self.write(cr, uid, ids,{'state':'cancel'}, context=context)
+ self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
return True
def button_draft(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids,{'state': 'draft'}, context=context)
+ self.write(cr, uid, ids, {'state': 'draft'}, context=context)
return True
def copy(self, cr, uid, id, default=None, context=None):
@@ -260,7 +256,7 @@ class hr_evaluation(osv.osv):
default = default.copy()
default['survey_request_ids'] = []
return super(hr_evaluation, self).copy(cr, uid, id, default, context=context)
-
+
def write(self, cr, uid, ids, vals, context=None):
if vals.get('employee_id'):
employee_id = self.pool.get('hr.employee').browse(cr, uid, vals.get('employee_id'), context=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'
+ _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):
@@ -308,7 +305,7 @@ class hr_evaluation_interview(osv.osv):
return res
def survey_req_waiting_answer(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, { 'state': 'waiting_answer'}, context=context)
+ self.write(cr, uid, ids, {'state': 'waiting_answer'}, context=context)
return True
def survey_req_done(self, cr, uid, ids, context=None):
@@ -317,7 +314,7 @@ class hr_evaluation_interview(osv.osv):
flag = False
wating_id = 0
if not id.evaluation_id.id:
- raise osv.except_osv(_('Warning!'),_("You cannot start evaluation without Appraisal."))
+ raise osv.except_osv(_('Warning!'), _("You cannot start evaluation without Appraisal."))
records = hr_eval_obj.browse(cr, uid, [id.evaluation_id.id], context=context)[0].survey_request_ids
for child in records:
if child.state == "draft":
@@ -327,15 +324,15 @@ class hr_evaluation_interview(osv.osv):
flag = True
if not flag and wating_id:
self.survey_req_waiting_answer(cr, uid, [wating_id], context=context)
- self.write(cr, uid, ids, { 'state': 'done'}, context=context)
+ self.write(cr, uid, ids, {'state': 'done'}, context=context)
return True
def survey_req_draft(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, { 'state': 'draft'}, context=context)
+ self.write(cr, uid, ids, {'state': 'draft'}, context=context)
return True
def survey_req_cancel(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, { 'state': 'cancel'}, context=context)
+ self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
return True
def action_print_survey(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
diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml
index 2afb5200091..74a8373b7e5 100644
--- a/addons/hr_evaluation/hr_evaluation_data.xml
+++ b/addons/hr_evaluation/hr_evaluation_data.xml
@@ -16,7 +16,7 @@
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.
]]>
-
+
@@ -1175,8 +1176,8 @@ Once the form had been filled, the employee send it to his supervisor.
self
-
-
+
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index 28bc4a6c96e..6103f3d525c 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -21,24 +21,26 @@
hr_evaluation.plan
-
+
hr_evaluation.plan.form
@@ -58,9 +60,9 @@
form
tree,form
-
+
-
+
hr.evaluation.interview
form
@@ -165,11 +167,9 @@
- ,
-
+
+
+
@@ -183,8 +183,8 @@
-
+
hr_evaluation.interview.tree
hr.evaluation.interview
-
+
-
-
+
+
@@ -351,7 +350,7 @@
hr.evaluation.interview
-
+
@@ -368,7 +367,7 @@
Interview Requests
hr.evaluation.interview
-
+
@@ -379,12 +378,11 @@
hr.evaluation.interview
form
- [('is_evaluation' ,'=', True)]
- {'default_is_evaluation': True, "search_default_todo":1,"search_default_user_id":uid}
+ {"search_default_todo":1,"search_default_user_id":uid}
- Click to create a new interview request related to a personal evaluation.
+ Click to create a new interview request related to a personal evaluation.
Interview requests are usually generated automatically by
OpenERP according to an employee's appraisal plan. Each user
diff --git a/addons/hr_evaluation/report/hr_evaluation_report.py b/addons/hr_evaluation/report/hr_evaluation_report.py
index 36353b65dfb..ce6f381fb60 100644
--- a/addons/hr_evaluation/report/hr_evaluation_report.py
+++ b/addons/hr_evaluation/report/hr_evaluation_report.py
@@ -22,41 +22,43 @@
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
_columns = {
'create_date': fields.date('Create Date', readonly=True),
- 'delay_date':fields.float('Delay to Start', digits=(16,2),readonly=True),
- 'overpass_delay':fields.float('Overpassed Deadline', digits=(16,2), readonly=True),
+ 'delay_date': fields.float('Delay to Start', digits=(16, 2), readonly=True),
+ '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'),
- ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
- ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'month': fields.selection([('01', 'January'), ('02', 'February'), ('03', 'March'), ('04', 'April'),
+ ('05', 'May'), ('06', 'June'), ('07', 'July'), ('08', 'August'), ('09', 'September'),
+ ('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', readonly=True),
'employee_id': fields.many2one('hr.employee', "Employee", readonly=True),
'rating': fields.selection([
- ('0','Significantly bellow expectations'),
- ('1','Did not meet expectations'),
- ('2','Meet expectations'),
- ('3','Exceeds expectations'),
- ('4','Significantly exceeds expectations'),
+ ('0', 'Significantly bellow expectations'),
+ ('1', 'Did not meet expectations'),
+ ('2', 'Meet expectations'),
+ ('3', 'Exceeds expectations'),
+ ('4', 'Significantly exceeds expectations'),
], "Overall Rating", readonly=True),
- 'nbr':fields.integer('# of Requests', readonly=True),
+ 'nbr': fields.integer('# of Requests', readonly=True),
'state': fields.selection([
- ('draft','Draft'),
- ('wait','Plan In Progress'),
- ('progress','Final Validation'),
- ('done','Done'),
- ('cancel','Cancelled'),
- ], 'Status',readonly=True),
+ ('draft', 'Draft'),
+ ('wait', 'Plan In Progress'),
+ ('progress', 'Final Validation'),
+ ('done', 'Done'),
+ ('cancel', 'Cancelled'),
+ ], 'Status', readonly=True),
}
_order = 'create_date desc'
+
def init(self, cr):
tools.drop_view_if_exists(cr, 'hr_evaluation_report')
cr.execute("""
diff --git a/addons/survey/data/survey_demo_appraisal.xml b/addons/hr_evaluation/survey_data_appraisal.xml
similarity index 100%
rename from addons/survey/data/survey_demo_appraisal.xml
rename to addons/hr_evaluation/survey_data_appraisal.xml
diff --git a/addons/survey/__openerp__.py b/addons/survey/__openerp__.py
index f80dc7c872b..7208c21ab32 100644
--- a/addons/survey/__openerp__.py
+++ b/addons/survey/__openerp__.py
@@ -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,