summaryrefslogtreecommitdiff
path: root/addons/hr
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
parentb2688a37f84a505d8e334f8b0325b4747d440170 (diff)
parent9eb2db4465cefa5dc331123c1b0a4df035545015 (diff)
[MERGE] with trunk-survey2-rim addons branch
bzr revid: dizzy.zala@gmail.com-20140225053204-mra08nfvumkxyixa
Diffstat (limited to 'addons/hr')
-rw-r--r--addons/hr/hr.py75
-rw-r--r--addons/hr/hr_view.xml54
-rw-r--r--addons/hr/res_config_view.xml2
-rw-r--r--addons/hr/test/hr_users.yml1
-rw-r--r--addons/hr/test/open2recruit2close_job.yml4
5 files changed, 71 insertions, 65 deletions
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index 6d466204ed8..101629482eb 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -21,16 +21,15 @@
import logging
+from openerp import tools
from openerp.modules.module import get_module_resource
from openerp.osv import fields, osv
from openerp.tools.translate import _
-from openerp import tools
-from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
-class hr_employee_category(osv.osv):
+class hr_employee_category(osv.Model):
def name_get(self, cr, uid, ids, context=None):
if not ids:
@@ -73,9 +72,9 @@ class hr_employee_category(osv.osv):
]
-class hr_job(osv.osv):
+class hr_job(osv.Model):
- def _no_of_employee(self, cr, uid, ids, name, args, context=None):
+ def _get_nbr_employees(self, cr, uid, ids, name, args, context=None):
res = {}
for job in self.browse(cr, uid, ids, context=context):
nb_employees = len(job.employee_ids or [])
@@ -93,59 +92,81 @@ class hr_job(osv.osv):
return res
_name = "hr.job"
- _description = "Job Description"
- _inherit = ['mail.thread']
+ _description = "Job Position"
+ _inherit = ['mail.thread', 'ir.needaction_mixin']
_columns = {
'name': fields.char('Job Name', size=128, required=True, select=True),
- 'expected_employees': fields.function(_no_of_employee, string='Total Forecasted Employees',
+ 'expected_employees': fields.function(_get_nbr_employees, string='Total Forecasted Employees',
help='Expected number of employees for this job position after new recruitment.',
store = {
'hr.job': (lambda self,cr,uid,ids,c=None: ids, ['no_of_recruitment'], 10),
'hr.employee': (_get_job_position, ['job_id'], 10),
}, type='integer',
- multi='no_of_employee'),
- 'no_of_employee': fields.function(_no_of_employee, string="Current Number of Employees",
+ multi='_get_nbr_employees'),
+ 'no_of_employee': fields.function(_get_nbr_employees, string="Current Number of Employees",
help='Number of employees currently occupying this job position.',
store = {
'hr.employee': (_get_job_position, ['job_id'], 10),
}, type='integer',
- multi='no_of_employee'),
- 'no_of_recruitment': fields.integer('Expected in Recruitment', help='Number of new employees you expect to recruit.'),
+ multi='_get_nbr_employees'),
+ 'no_of_recruitment': fields.integer('Expected New Employees', help='Number of new employees you expect to recruit.'),
+ 'no_of_hired_employee': fields.integer('Hired Employees', help='Number of hired employees for this job position during recruitment phase.'),
'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees', groups='base.group_user'),
'description': fields.text('Job Description'),
'requirements': fields.text('Requirements'),
'department_id': fields.many2one('hr.department', 'Department'),
'company_id': fields.many2one('res.company', 'Company'),
- 'state': fields.selection([('open', 'No Recruitment'), ('recruit', 'Recruitement in Progress')], 'Status', readonly=True, required=True,
- help="By default 'In position', set it to 'In Recruitment' if recruitment process is going on for this job position."),
+ 'state': fields.selection([('open', 'Recruitment Closed'), ('recruit', 'Recruitment in Progress')],
+ string='Status', readonly=True, required=True,
+ track_visibility='always',
+ help="By default 'Closed', set it to 'In Recruitment' if recruitment process is going on for this job position."),
'write_date': fields.datetime('Update Date', readonly=True),
}
+
_defaults = {
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.job', context=c),
- 'no_of_recruitment': 0,
+ 'company_id': lambda self, cr, uid, ctx=None: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.job', context=ctx),
'state': 'open',
}
_sql_constraints = [
('name_company_uniq', 'unique(name, company_id, department_id)', 'The name of the job position must be unique per department in company!'),
+ ('hired_employee_check', "CHECK ( no_of_hired_employee <= no_of_recruitment )", "Number of hired employee must be less than expected number of employee in recruitment."),
]
-
- def on_change_expected_employee(self, cr, uid, ids, no_of_recruitment, no_of_employee, context=None):
- if context is None:
- context = {}
- return {'value': {'expected_employees': no_of_recruitment + no_of_employee}}
-
- def job_recruitement(self, cr, uid, ids, *args):
- for job in self.browse(cr, uid, ids):
+ def set_recruit(self, cr, uid, ids, context=None):
+ for job in self.browse(cr, uid, ids, context=context):
no_of_recruitment = job.no_of_recruitment == 0 and 1 or job.no_of_recruitment
- self.write(cr, uid, [job.id], {'state': 'recruit', 'no_of_recruitment': no_of_recruitment})
+ self.write(cr, uid, [job.id], {'state': 'recruit', 'no_of_recruitment': no_of_recruitment}, context=context)
return True
- def job_open(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state': 'open', 'no_of_recruitment': 0})
+ def set_open(self, cr, uid, ids, context=None):
+ self.write(cr, uid, ids, {
+ 'state': 'open',
+ 'no_of_recruitment': 0,
+ 'no_of_hired_employee': 0
+ }, context=context)
return True
+ def copy(self, cr, uid, id, default=None, context=None):
+ if default is None:
+ default = {}
+ default.update({
+ 'employee_ids': [],
+ 'no_of_recruitment': 0,
+ 'no_of_hired_employee': 0,
+ })
+ if 'name' in default:
+ job = self.browse(cr, uid, id, context=context)
+ default['name'] = _("%s (copy)") % (job.name)
+ return super(hr_job, self).copy(cr, uid, id, default=default, context=context)
+
+ # ----------------------------------------
+ # Compatibility methods
+ # ----------------------------------------
+ _no_of_employee = _get_nbr_employees # v7 compatibility
+ job_open = set_open # v7 compatibility
+ job_recruitment = set_recruit # v7 compatibility
+
class hr_employee(osv.osv):
_name = "hr.employee"
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index eea2eb2ce41..5b0a58ec883 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -45,7 +45,7 @@
</group>
<group string="Position">
<field name="department_id" on_change="onchange_department_id(department_id)"/>
- <field name="job_id" options='{"no_open": True}' domain="[('state','!=','old')]" context="{'form_view_ref': 'hr.view_hr_job_employee_form'}"/>
+ <field name="job_id"/>
<field name="parent_id"/>
<field name="coach_id"/>
</group>
@@ -333,8 +333,8 @@
<field name="arch" type="xml">
<form string="Job" version="7.0">
<header>
- <button name="job_recruitement" string="Launch Recruitement" states="open" type="object" class="oe_highlight" groups="base.group_user"/>
- <button name="job_open" string="Stop Recruitment" states="recruit" type="object" class="oe_highlight" groups="base.group_user"/>
+ <button name="set_recruit" string="Launch Recruitment" states="open" type="object" class="oe_highlight" groups="base.group_user"/>
+ <button name="set_open" string="Stop Recruitment" states="recruit" type="object" class="oe_highlight" groups="base.group_user"/>
<field name="state" widget="statusbar" statusbar_visible="recruit,open"/>
</header>
<sheet>
@@ -342,20 +342,20 @@
<label for="name" class="oe_edit_only"/>
<h1><field name="name" class="oe_inline"/></h1>
</div>
- <group>
- <group name="job_data">
- <field name="no_of_employee" groups="base.group_user"/>
- <field name="no_of_recruitment" on_change="on_change_expected_employee(no_of_recruitment,no_of_employee)"/>
- <field name="expected_employees" groups="base.group_user"/>
- <field name="company_id" widget="selection" groups="base.group_multi_company"/>
- <field name="department_id"/>
- </group>
+ <div class="oe_right" name="buttons"/>
+ <group name="employee_data">
+ <field name="department_id" class="oe_inline"/>
+ <label for="no_of_employee"/>no_of_recruitment
+ <div>
+ <field name="no_of_employee" class="oe_inline"/>
+ <p><field name="no_of_recruitment" groups="base.group_user" colspan="0" class="oe_inline" style="padding-top: 1px"/> new employee(s) expected</p>
+ </div>
</group>
- <div>
+ <div attrs="{'invisible': [('state', '!=', 'recruit')]}">
<label for="description"/>
<field name="description"/>
</div>
- <div>
+ <div attrs="{'invisible': [('state', '!=', 'recruit')]}">
<label for="requirements"/>
<field name="requirements"/>
</div>
@@ -378,6 +378,7 @@
<field name="no_of_employee"/>
<field name="no_of_recruitment"/>
<field name="expected_employees"/>
+ <field name="no_of_hired_employee"/>
<field name="state"/>
</tree>
</field>
@@ -389,34 +390,18 @@
<field name="arch" type="xml">
<search string="Jobs">
<field name="name" string="Job"/>
- <filter icon="terp-camera_test" domain="[('state','=','open')]" string="In Position" help="In Position"/>
- <filter icon="terp-personal+" domain="[('state','=','recruit')]" string="In Recruitment" help="In Recruitment"/>
+ <filter domain="[('state','=','open')]" string="In Position"/>
+ <filter domain="[('state','=','recruit')]" string="In Recruitment" name="in_recruitment"/>
<field name="department_id"/>
<group expand="0" string="Group By...">
- <filter string="Department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/>
- <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
- <filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ <filter string="Department" domain="[]" context="{'group_by':'department_id'}"/>
+ <filter string="Status" domain="[]" context="{'group_by':'state'}"/>
+ <filter string="Company" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
</group>
</search>
</field>
</record>
- <record id="view_hr_job_employee_form" model="ir.ui.view">
- <field name="name">hr.job.employee.form</field>
- <field name="model">hr.job</field>
- <field name="priority">20</field>
- <field name="arch" type="xml">
- <form string="Job" version="7.0">
- <group col="4">
- <field name="name"/>
- <field name="department_id"/>
- </group>
- <label for="description"/>
- <field name="description"/>
- </form>
- </field>
- </record>
-
<record model="ir.actions.act_window" id="action_hr_job">
<field name="name">Job Positions</field>
<field name="res_model">hr.job</field>
@@ -441,7 +426,6 @@
</record>
<menuitem name="Recruitment" id="base.menu_crm_case_job_req_main" parent="menu_hr_root" groups="base.group_hr_user"/>
- <menuitem parent="hr.menu_hr_configuration" id="menu_hr_job" action="action_hr_job" sequence="6"/>
<!-- hr.department -->
<record id="view_department_form" model="ir.ui.view">
diff --git a/addons/hr/res_config_view.xml b/addons/hr/res_config_view.xml
index 3dc1795139c..98b61814873 100644
--- a/addons/hr/res_config_view.xml
+++ b/addons/hr/res_config_view.xml
@@ -35,7 +35,7 @@
<group name="recruitment_grp">
<label for="id" string="Talent Management"/>
<div name="recruitment">
- <div>
+ <div name="hr_recruitment">
<field name="module_hr_recruitment" class="oe_inline"/>
<label for="module_hr_recruitment"/>
</div>
diff --git a/addons/hr/test/hr_users.yml b/addons/hr/test/hr_users.yml
index e69c5ad5cb0..820180bfc9b 100644
--- a/addons/hr/test/hr_users.yml
+++ b/addons/hr/test/hr_users.yml
@@ -20,6 +20,7 @@
name: HR Officer
login: hro
password: hro
+ email: hro@example.com
-
I added groups for HR Officer.
-
diff --git a/addons/hr/test/open2recruit2close_job.yml b/addons/hr/test/open2recruit2close_job.yml
index 5519635d2fc..267c6c1f083 100644
--- a/addons/hr/test/open2recruit2close_job.yml
+++ b/addons/hr/test/open2recruit2close_job.yml
@@ -15,10 +15,10 @@
- state == 'open'
- no_of_recruitment == 0
-
- Now, Recruitement is started so I start recruitement of Job Postion of "Developer" Profile.
+ Now, Recruitment is started so I start recruitment of Job Postion of "Developer" Profile.
-
!python {model: hr.job}: |
- self.job_recruitement(cr, uid, [ref('job_developer')])
+ self.job_recruitment(cr, uid, [ref('job_developer')])
-
I check 'state' and number of 'Expected in Recruitment' after initiating the recruitment
-