diff options
| author | Dharmraj Jhala (OpenERP) <dizzy.zala@gmail.com> | 2014-02-25 11:02:04 +0530 |
|---|---|---|
| committer | Dharmraj Jhala (OpenERP) <dizzy.zala@gmail.com> | 2014-02-25 11:02:04 +0530 |
| commit | c6917b9c074f3f2c19cac1dc3e05c8a3d2cadbed (patch) | |
| tree | 6a17e259f27e029458207671d10fec50b5c425be /addons/hr | |
| parent | b2688a37f84a505d8e334f8b0325b4747d440170 (diff) | |
| parent | 9eb2db4465cefa5dc331123c1b0a4df035545015 (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.py | 75 | ||||
| -rw-r--r-- | addons/hr/hr_view.xml | 54 | ||||
| -rw-r--r-- | addons/hr/res_config_view.xml | 2 | ||||
| -rw-r--r-- | addons/hr/test/hr_users.yml | 1 | ||||
| -rw-r--r-- | addons/hr/test/open2recruit2close_job.yml | 4 |
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 - |
