diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index b0db9232bd9..0492dbfbcd4 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -182,6 +182,8 @@ class hr_applicant(osv.Model): 'write_date': fields.datetime('Update Date', readonly=True), 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', track_visibility='onchange', domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"), + 'last_stage_id': fields.many2one('hr.recruitment.stage', 'Last Stage', + help='Stage of the applicant before being in the current stage. Used for lost cases analysis.'), 'categ_ids': fields.many2many('hr.applicant_category', string='Tags'), 'company_id': fields.many2one('res.company', 'Company'), 'user_id': fields.many2one('res.users', 'Responsible', track_visibility='onchange'), @@ -390,13 +392,16 @@ class hr_applicant(osv.Model): def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] - # stage change: update date_last_stage_update - if 'stage_id' in vals: - vals['date_last_stage_update'] = fields.datetime.now() # user_id change: update date_start if vals.get('user_id'): vals['date_start'] = fields.datetime.now() - + # stage_id: track last stage before update + if 'stage_id' in vals: + vals['date_last_stage_update'] = fields.datetime.now() + for applicant in self.browse(cr, uid, ids, context=None): + vals['last_stage_id'] = applicant.stage_id.id + res = super(hr_applicant, self).write(cr, uid, [applicant.id], vals, context=context) + return res return super(hr_applicant, self).write(cr, uid, ids, vals, context=context) def create_employee_from_applicant(self, cr, uid, ids, context=None): diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index e95976a6a31..aede75dcf84 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -41,6 +41,7 @@ + @@ -194,6 +195,7 @@ + diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 93384c95ed4..0292875a2c7 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -56,11 +56,12 @@ class hr_recruitment_report(osv.Model): 'salary_prop' : fields.float("Salary Proposed", digits_compute=dp.get_precision('Account')), 'salary_prop_avg' : fields.float("Avg. Proposed Salary", group_operator="avg", digits_compute=dp.get_precision('Account')), 'salary_exp' : fields.float("Salary Expected", digits_compute=dp.get_precision('Account')), - 'salary_exp_avg' : fields.float("Avg. Expected Salary", group_operator="avg", digits_compute=dp.get_precision('Account')), + 'salary_exp_avg' : fields.float("Avg. Expected Salary", group_operator="avg", digits_compute=dp.get_precision('Account')), 'partner_id': fields.many2one('res.partner', 'Partner',readonly=True), 'available': fields.float("Availability"), 'delay_close': fields.float('Avg. Delay to Close', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the project issue"), + 'last_stage_id': fields.many2one ('hr.recruitment.stage', 'Last Stage'), } def init(self, cr): @@ -84,6 +85,7 @@ class hr_recruitment_report(osv.Model): s.department_id, s.priority, s.stage_id, + s.last_stage_id, sum(salary_proposed) as salary_prop, (sum(salary_proposed)/count(*)) as salary_prop_avg, sum(salary_expected) as salary_exp, @@ -105,6 +107,7 @@ class hr_recruitment_report(osv.Model): s.company_id, s.user_id, s.stage_id, + s.last_stage_id, s.type_id, s.priority, s.job_id, diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml index d75c29c17a2..d24e406bc0c 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml +++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml @@ -10,6 +10,7 @@ + @@ -68,6 +69,7 @@ +