summaryrefslogtreecommitdiff
path: root/addons/hr_evaluation
diff options
context:
space:
mode:
authorDharmraj Jhala (OpenERP) <dizzy.zala@gmail.com>2014-02-25 11:02:04 +0530
committerDharmraj Jhala (OpenERP) <dizzy.zala@gmail.com>2014-02-25 11:02:04 +0530
commitc6917b9c074f3f2c19cac1dc3e05c8a3d2cadbed (patch)
tree6a17e259f27e029458207671d10fec50b5c425be /addons/hr_evaluation
parentb2688a37f84a505d8e334f8b0325b4747d440170 (diff)
parent9eb2db4465cefa5dc331123c1b0a4df035545015 (diff)
[MERGE] with trunk-survey2-rim addons branch
bzr revid: dizzy.zala@gmail.com-20140225053204-mra08nfvumkxyixa
Diffstat (limited to 'addons/hr_evaluation')
-rw-r--r--addons/hr_evaluation/__openerp__.py25
-rw-r--r--addons/hr_evaluation/hr_evaluation.py131
-rw-r--r--addons/hr_evaluation/hr_evaluation_data.xml7
-rw-r--r--addons/hr_evaluation/hr_evaluation_view.xml78
-rw-r--r--addons/hr_evaluation/report/hr_evaluation_report.py40
-rw-r--r--addons/hr_evaluation/survey_data_appraisal.xml322
6 files changed, 462 insertions, 141 deletions
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..0784c912172 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):
+
+ def run_employee_evaluation(self, cr, uid, automatic=False, use_new_cursor=False, context=None): # cronjob
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 @@
<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>
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 @@
<field name="model">hr_evaluation.plan</field>
<field name="arch" type="xml">
<form string="Appraisal Plan" version="7.0">
- <group col="4">
- <group>
- <field name="name"/>
- <field name="company_id" widget="selection" groups="base.group_multi_company"/>
- <field name="active"/>
- </group>
- <group>
- <field name="month_first"/>
- <field name="month_next"/>
+ <sheet>
+ <group col="4">
+ <group>
+ <field name="name"/>
+ <field name="company_id" widget="selection" groups="base.group_multi_company"/>
+ <field name="active"/>
+ </group>
+ <group>
+ <field name="month_first"/>
+ <field name="month_next"/>
+ </group>
</group>
- </group>
- <notebook>
- <page string="Appraisal Phases">
+ <notebook>
+ <page string="Appraisal Phases">
<field name="phase_ids"/>
- </page>
- </notebook>
+ </page>
+ </notebook>
+ </sheet>
</form>
- </field>
+ </field>
</record>
<record model="ir.ui.view" id="view_hr_evaluation_plan_tree">
<field name="name">hr_evaluation.plan.form</field>
@@ -58,9 +60,9 @@
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
-
+
<!-- Appraisal Interviews Action -->
-
+
<record id="act_hr_employee_2_hr__evaluation_interview" model="ir.actions.act_window">
<field name="res_model">hr.evaluation.interview</field>
<field name="view_type">form</field>
@@ -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>
@@ -192,9 +192,9 @@
<field name="user_to_review_id"/>
<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"/>
+ <group>
+ <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>
@@ -326,17 +325,17 @@
</field>
</record>
- <record model="ir.ui.view" id="view_hr_evaluation_interview_tree">
+ <record model="ir.ui.view" id="view_hr_evaluation_interview_tree">
<field name="name">hr_evaluation.interview.tree</field>
<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,12 +378,11 @@
<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">
- Click to create a new interview request related to a personal evaluation.
+ Click to create a new interview request related to a personal evaluation.
</p><p>
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/hr_evaluation/survey_data_appraisal.xml b/addons/hr_evaluation/survey_data_appraisal.xml
new file mode 100644
index 00000000000..063c70bab66
--- /dev/null
+++ b/addons/hr_evaluation/survey_data_appraisal.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <!-- Appraisal form -->
+ <record model="survey.survey" id="appraisal_form">
+ <field name="title">Employee Appraisal Form</field>
+ <field name="state">open</field>
+ <field name="date_open" eval="time.strftime('%Y-%m-%d %H:%M:%S')" />
+ <field name="visible_to_user" eval="False"/>
+ <field name="auth_required" eval="True" />
+ <field name="users_can_go_back" eval="True" />
+ <field name="description">&lt;p&gt; &lt;/p&gt;</field>
+ <field name="thank_you_message">&lt;p&gt; &lt;/p&gt;</field>
+ </record>
+ <!-- Page 1 -->
+ <record model="survey.page" id="appraisal_1">
+ <field name="title">Employee Appraisal Form</field>
+ <field name="survey_id" ref="appraisal_form" />
+ <field name="sequence">1</field>
+ <field name="description">&lt;h2&gt;Overall Purpose Of Employee Appraisal&lt;/h2&gt;
+&lt;ul&gt;&lt;li&gt;To initiate a clear and open communication of performance expectations
+&lt;li&gt;To assist employees in their professional growth, through the identification of strengths and opportunities for
+development&lt;/ul&gt;
+&lt;h2&gt;At the outset of the appraisal time period&lt;/h2&gt;
+&lt;ul&gt;&lt;li&gt;It is the joint responsibility of the employee and the supervisor (appraiser) to establish a feasible work plan for the
+coming year, including major employee responsibilities and corresponding benchmarks against which results will be
+evaluated.
+&lt;li&gt;Critical or key elements of performance and professional development needs (if any), should also be noted at this time&lt;/ul&gt;
+&lt;h2&gt;At the conclusion of the appraisal time period&lt;/h2&gt;
+&lt;ul&gt;&lt;li&gt;The employee will be responsible for completing a draft of the Appraisal Form as a tool for self-appraisal and a starting
+point for the supervisor’s evaluation. The employee can add examples of achievements for each criterion.
+Once the form had been filled, the employee send it to his supervisor.
+&lt;li&gt;It is the primary responsibility of the supervisor to gather the necessary input from the appropriate sources of feedback
+(internal and/or external customers, peers). In case of collaboration with OpenERP SA Belgium, the supervisor must
+receive completed evaluation form from the employee's Belgian project manager.
+&lt;li&gt;The supervisor synthesizes and integrates all input into the completed appraisal. He motivates his evaluation in the ad
+hoc fields.
+&lt;li&gt;The employee may choose to offer comments or explanation regarding the completed review.
+&lt;li&gt;The supervisor send the form to the HR department in India and in Belgium&lt;/ul&gt;</field>
+ </record>
+ <record model="survey.question" id="appraisal_1_1">
+ <field name="page_id" ref="appraisal_1" />
+ <field name="sequence">1</field>
+ <field name="question">Name</field>
+ <field name="type">textbox</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_1_2">
+ <field name="page_id" ref="appraisal_1" />
+ <field name="sequence">2</field>
+ <field name="question">Position Title</field>
+ <field name="type">textbox</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_1_3">
+ <field name="page_id" ref="appraisal_1" />
+ <field name="sequence">3</field>
+ <field name="question">Appraisal for Period</field>
+ <field name="type">textbox</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_1_4">
+ <field name="page_id" ref="appraisal_1" />
+ <field name="sequence">4</field>
+ <field name="question">Date of review</field>
+ <field name="type">textbox</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_1_5">
+ <field name="page_id" ref="appraisal_1" />
+ <field name="sequence">5</field>
+ <field name="question">Appraiser</field>
+ <field name="type">textbox</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <!-- Page 2 -->
+ <record model="survey.page" id="appraisal_2">
+ <field name="title">Work Plan</field>
+ <field name="survey_id" ref="appraisal_form" />
+ <field name="sequence">2</field>
+ <field name="description">&lt;p&gt; &lt;/p&gt;</field>
+ </record>
+ <record model="survey.question" id="appraisal_2_1">
+ <field name="page_id" ref="appraisal_2" />
+ <field name="sequence">1</field>
+ <field name="question">Objectives</field>
+ <field name="type">free_text</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_2_2">
+ <field name="page_id" ref="appraisal_2" />
+ <field name="sequence">2</field>
+ <field name="question">Results</field>
+ <field name="type">free_text</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.question" id="appraisal_2_3">
+ <field name="page_id" ref="appraisal_2" />
+ <field name="sequence">3</field>
+ <field name="question">Additional Comments</field>
+ <field name="type">free_text</field>
+ </record>
+ <!-- Page 3 -->
+ <record model="survey.page" id="appraisal_3">
+ <field name="title">Employee Performance in Key Areas</field>
+ <field name="survey_id" ref="appraisal_form" />
+ <field name="sequence">3</field>
+ <field name="description">The appraiser should rate the employee’s major work accomplishments and performance according to the metric provided
+below:&lt;ol&gt;
+&lt;li&gt; Significantly exceeds standards and expectations required of the position
+&lt;li&gt; Exceeds standards and expectations
+&lt;li&gt; Meet standards and expectations
+&lt;li&gt; Did not meet standards and expectations
+&lt;li&gt; Significantly below standards and expectations&lt;/ol&gt;</field>
+ </record>
+ <record model="survey.question" id="appraisal_3_1">
+ <field name="page_id" ref="appraisal_3" />
+ <field name="sequence">1</field>
+ <field name="question">Subject</field>
+ <field name="type">matrix</field>
+ <field name="matrix_subtype">simple</field>
+ <field name="constr_mandatory" eval="True" />
+ <field name="constr_type">all</field>
+ </record>
+ <record model="survey.label" id="acol_3_1_1">
+ <field name="question_id" ref="appraisal_3_1"/>
+ <field name="sequence">1</field>
+ <field name="value">1</field>
+ </record>
+ <record model="survey.label" id="acol_3_1_2">
+ <field name="question_id" ref="appraisal_3_1"/>
+ <field name="sequence">2</field>
+ <field name="value">2</field>
+ </record>
+ <record model="survey.label" id="acol_3_1_3">
+ <field name="question_id" ref="appraisal_3_1"/>
+ <field name="sequence">3</field>
+ <field name="value">3</field>
+ </record>
+ <record model="survey.label" id="acol_3_1_4">
+ <field name="question_id" ref="appraisal_3_1"/>
+ <field name="sequence">4</field>
+ <field name="value">4</field>
+ </record>
+ <record model="survey.label" id="acol_3_1_5">
+ <field name="question_id" ref="appraisal_3_1"/>
+ <field name="sequence">5</field>
+ <field name="value">5</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_1">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">1</field>
+ <field name="value">Ability to cope with multidisciplinarity of team</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_2">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">2</field>
+ <field name="value">Enthusiasm &amp; implication toward projects/assignments</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_3">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">3</field>
+ <field name="value">Compliance to internal rules and processes (timesheets completion, etc.)</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_4">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">4</field>
+ <field name="value">Team spirit: ability to work efficiently with peers, manage the conflicts with diplomacy</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_5">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">5</field>
+ <field name="value">Initiative and self autonomy</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_6">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">6</field>
+ <field name="value">Ability to follow and complete work as instructed</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_7">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">7</field>
+ <field name="value">Decision making</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_8">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">8</field>
+ <field name="value">Customer commitment</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_9">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">9</field>
+ <field name="value">Communication skills (written &amp; verbally): clearness, concision, exactitude</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_10">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">10</field>
+ <field name="value">Technical skills regarding to the job requirements</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_11">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">11</field>
+ <field name="value">Analytical and synthetic mind</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_12">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">12</field>
+ <field name="value">Promptness and attendance record</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_13">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">13</field>
+ <field name="value">Adaptability: Ability to adapt oneself to organizational changes while keeping efficiency</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_14">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">14</field>
+ <field name="value">Creativity and forward looking aptitude</field>
+ </record>
+ <record model="survey.label" id="arow_3_1_15">
+ <field name="question_id_2" ref="appraisal_3_1"/>
+ <field name="sequence">15</field>
+ <field name="value">Time management: projects/tasks are completed on time</field>
+ </record>
+ <record model="survey.question" id="appraisal_3_2">
+ <field name="page_id" ref="appraisal_3" />
+ <field name="sequence">2</field>
+ <field name="question">Supervisors only</field>
+ <field name="type">matrix</field>
+ <field name="matrix_subtype">simple</field>
+ </record>
+ <record model="survey.label" id="acol_3_2_1">
+ <field name="question_id" ref="appraisal_3_2"/>
+ <field name="sequence">1</field>
+ <field name="value">1</field>
+ </record>
+ <record model="survey.label" id="acol_3_2_2">
+ <field name="question_id" ref="appraisal_3_2"/>
+ <field name="sequence">2</field>
+ <field name="value">2</field>
+ </record>
+ <record model="survey.label" id="acol_3_2_3">
+ <field name="question_id" ref="appraisal_3_2"/>
+ <field name="sequence">3</field>
+ <field name="value">3</field>
+ </record>
+ <record model="survey.label" id="acol_3_2_4">
+ <field name="question_id" ref="appraisal_3_2"/>
+ <field name="sequence">4</field>
+ <field name="value">4</field>
+ </record>
+ <record model="survey.label" id="acol_3_2_5">
+ <field name="question_id" ref="appraisal_3_2"/>
+ <field name="sequence">5</field>
+ <field name="value">5</field>
+ </record>
+ <record model="survey.label" id="arow_3_2_1">
+ <field name="question_id_2" ref="appraisal_3_2"/>
+ <field name="sequence">1</field>
+ <field name="value">Results of the bottom-up survey and mitigation actions to face technical, organizational, structural and/or relational issues</field>
+ </record>
+ <record model="survey.label" id="arow_3_2_2">
+ <field name="question_id_2" ref="appraisal_3_2"/>
+ <field name="sequence">2</field>
+ <field name="value">Delegation: Ability to efficiently assign tasks to other people</field>
+ </record>
+ <record model="survey.label" id="arow_3_2_3">
+ <field name="question_id_2" ref="appraisal_3_2"/>
+ <field name="sequence">3</field>
+ <field name="value">Leadership: create a challenging and motivating work environment aligned with the company's strategy</field>
+ </record>
+ <record model="survey.label" id="arow_3_2_4">
+ <field name="question_id_2" ref="appraisal_3_2"/>
+ <field name="sequence">4</field>
+ <field name="value">Leadership: sustain subordinates in their professional growth</field>
+ </record>
+ <record model="survey.label" id="arow_3_2_5">
+ <field name="question_id_2" ref="appraisal_3_2"/>
+ <field name="sequence">5</field>
+ <field name="value">Ability to manage planning resources, risks, budgets and deadlines</field>
+ </record>
+ <!-- Page 4 -->
+ <record model="survey.page" id="appraisal_4">
+ <field name="title">Professional Development and Performance Plan</field>
+ <field name="survey_id" ref="appraisal_form" />
+ <field name="sequence">4</field>
+ <field name="description">&lt;p&gt;Identify professional, performance, or project objectives you recommend for employee’s continued career development
+over the coming year.&lt;/p&gt;</field>
+ </record>
+ <record model="survey.question" id="appraisal_4_1">
+ <field name="page_id" ref="appraisal_4" />
+ <field name="sequence">1</field>
+ <field name="question">Professional Development Objectives</field>
+ <field name="type">free_text</field>
+ </record>
+ <record model="survey.question" id="appraisal_4_2">
+ <field name="page_id" ref="appraisal_4" />
+ <field name="sequence">2</field>
+ <field name="question">Personal Performance Objectives</field>
+ <field name="type">free_text</field>
+ </record>
+ <record model="survey.question" id="appraisal_4_3">
+ <field name="page_id" ref="appraisal_4" />
+ <field name="sequence">3</field>
+ <field name="question">Project Objectives</field>
+ <field name="type">free_text</field>
+ </record>
+ <!-- Page 5 -->
+ <record model="survey.page" id="appraisal_5">
+ <field name="title">Employee Comments</field>
+ <field name="survey_id" ref="appraisal_form" />
+ <field name="description">&lt;p&gt;&lt;/p&gt;</field>
+ <field name="sequence">5</field>
+ </record>
+ <record model="survey.question" id="appraisal_5_1">
+ <field name="page_id" ref="appraisal_5" />
+ <field name="sequence">1</field>
+ <field name="question">Use the following space to make any comments regarding the above performance evaluation.</field>
+ <field name="type">free_text</field>
+ </record>
+ </data>
+</openerp>