diff --git a/addons/hr/hr.py b/addons/hr/hr.py index b778eb39ba3..e5541863922 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -20,7 +20,7 @@ ############################################################################## from osv import fields, osv - +import logging import addons class hr_employee_category(osv.osv): @@ -81,22 +81,20 @@ class hr_job(osv.osv): def _no_of_employee(self, cr, uid, ids, name, args, context=None): res = {} for job in self.browse(cr, uid, ids, context=context): - res[job.id] = len(job.employee_ids or []) - return res - - def _no_of_recruitement(self, cr, uid, ids, name, args, context=None): - res = {} - for job in self.browse(cr, uid, ids, context=context): - res[job.id] = job.expected_employees - job.no_of_employee + nb_employees = len(job.employee_ids or []) + res[job.id] = { + 'no_of_employee': nb_employees, + 'expected_employees': nb_employees + job.no_of_recruitment, + } return res _name = "hr.job" _description = "Job Description" _columns = { 'name': fields.char('Job Name', size=128, required=True, select=True), - 'expected_employees': fields.integer('Expected Employees', help='Required number of Employees in total for that job.'), - 'no_of_employee': fields.function(_no_of_employee, method=True, string="No of Employee", help='Number of employee with that job.'), - 'no_of_recruitment': fields.function(_no_of_recruitement, method=True, string='Expected in Recruitment', readonly=True), + 'expected_employees': fields.function(_no_of_employee, method=True, string='Expected Employees', help='Required number of Employees in total for that job.', multi="no_of_employee"), + 'no_of_employee': fields.function(_no_of_employee, method=True, string="No of Employee", help='Number of employee with that job.', multi="no_of_employee"), + 'no_of_recruitment': fields.float('Expected in Recruitment'), 'employee_ids': fields.one2many('hr.employee', 'job_id', 'Employees'), 'description': fields.text('Job Description'), 'requirements': fields.text('Requirements'), @@ -110,24 +108,23 @@ class hr_job(osv.osv): 'state': 'open', } - def on_change_expected_employee(self, cr, uid, ids, expected_employee, no_of_employee, context=None): + def on_change_expected_employee(self, cr, uid, ids, no_of_recruitment, no_of_employee, context=None): if context is None: context = {} - result = {} - if expected_employee: - result['no_of_recruitment'] = expected_employee - no_of_employee - return {'value': result} + return {'value': {'expected_employees': no_of_recruitment + no_of_employee}} def job_old(self, cr, uid, ids, *args): - self.write(cr, uid, ids, {'state': 'old'}) + self.write(cr, uid, ids, {'state': 'old', 'no_of_recruitment': 0}) return True def job_recruitement(self, cr, uid, ids, *args): - self.write(cr, uid, ids, {'state': 'recruit'}) + for job in self.browse(cr, uid, ids): + 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}) return True def job_open(self, cr, uid, ids, *args): - self.write(cr, uid, ids, {'state': 'open'}) + self.write(cr, uid, ids, {'state': 'open', 'no_of_recruitment': 0}) return True hr_job() @@ -154,7 +151,7 @@ class hr_employee(osv.osv): 'work_email': fields.char('Work E-mail', size=240), 'work_location': fields.char('Office Location', size=32), 'notes': fields.text('Notes'), - 'parent_id': fields.related('department_id', 'manager_id', relation='hr.employee', string='Manager', type='many2one', store=True, select=True, readonly=True, help="It is linked with manager of Department"), + 'parent_id': fields.many2one('hr.employee', 'Manager'), 'category_ids': fields.many2many('hr.employee.category', 'employee_category_rel', 'emp_id', 'category_id', 'Category'), 'child_ids': fields.one2many('hr.employee', 'parent_id', 'Subordinates'), 'resource_id': fields.many2one('resource.resource', 'Resource', ondelete='cascade', required=True), @@ -178,6 +175,13 @@ class hr_employee(osv.osv): address_id = address and address['default'] or False return {'value': {'address_id' : address_id}} + def onchange_department_id(self, cr, uid, ids, department_id, context=None): + value = {'parent_id': False} + if department_id: + department = self.pool.get('hr.department').browse(cr, uid, department_id) + value['parent_id'] = department.manager_id.id + return {'value': value} + def onchange_user(self, cr, uid, ids, user_id, context=None): work_email = False if user_id: @@ -204,15 +208,8 @@ class hr_employee(osv.osv): level -= 1 return True - def _check_department_id(self, cr, uid, ids, context=None): - for emp in self.browse(cr, uid, ids, context=context): - if emp.department_id.manager_id and emp.id == emp.department_id.manager_id.id: - return False - return True - _constraints = [ (_check_recursion, 'Error ! You cannot create recursive Hierarchy of Employees.', ['parent_id']), - (_check_department_id, 'Error ! You cannot select a department for which the employee is the manager.', ['department_id']), ] hr_employee() @@ -227,4 +224,26 @@ class hr_department(osv.osv): hr_department() + +class res_users(osv.osv): + _name = 'res.users' + _inherit = 'res.users' + + def create(self, cr, uid, data, context=None): + user_id = super(res_users, self).create(cr, uid, data, context=context) + data_obj = self.pool.get('ir.model.data') + try: + data_id = data_obj._get_id(cr, uid, 'hr', 'ir_ui_view_sc_employee') + view_id = data_obj.browse(cr, uid, data_id, context=context).res_id + self.pool.get('ir.ui.view_sc').copy(cr, uid, view_id, default = { + 'user_id': user_id}, context=context) + except: + # Tolerate a missing shortcut. See product/product.py for similar code. + logging.getLogger('orm').debug('Skipped meetings shortcut for user "%s"', data.get('name',' - + @@ -156,6 +156,13 @@ + + Employees + ir.ui.menu + + + + - Casual Leave + Legal Leaves + False black - - - Legal Holidays - blue - - - Sick Leave + Sick Leaves True red + + + + Compensatory Days + False + brown + + + diff --git a/addons/hr_holidays/hr_holidays_demo.xml b/addons/hr_holidays/hr_holidays_demo.xml index b4a971dc328..f68e3e01632 100644 --- a/addons/hr_holidays/hr_holidays_demo.xml +++ b/addons/hr_holidays/hr_holidays_demo.xml @@ -31,6 +31,9 @@ + + + diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index a3d2b2710ad..7740470ccc7 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -24,7 +24,7 @@ help="My Leaves" /> - @@ -70,7 +70,7 @@
- + @@ -93,11 +93,11 @@ -