From 32fc38ef58dc4b4f1ff4e176ff4fa03b9c427397 Mon Sep 17 00:00:00 2001 From: yhu-odoo Date: Thu, 26 Dec 2019 15:35:26 +0000 Subject: [IMP] hr_appraisal: Improve employee archiving flow PURPOSE ======= When you close a payroll (employees), there are often a lot of document linked. Archiving an employee should archive the contract, cancel future leaves, archive the private address Specification ============= Add departure date (hr): - Add a Date field to both hr.departure.wizard and hr.employee. In the wizard, the field is required. - In toggle_active() method in hr.employee, set departure_date to false when unarchive the employee. - If user has a current running contract, a user error will raise if user enter a departure date earlier than the start date of the contract. Add checkbox to set a closing date on hr.contract (hr.contract): - In the hr.departure.wizard, set the departure date to be the end date of runing contract. Set the states of all draft contracts to "cancel". Add checkbox to free car (hr.fleet): - In the hr.departure.wizard, set end_date to fleet.vehicle.assignation.log, if there is no end_date or end_date > departure_date - Go through fleet.vehicle, find records with dirver_id to be the employee, set it to False. Add checkbox to archive private address (hr): - when the private address not link to a internel user, set employee.address_home_id.active to Flase - unarchive it after the employee unarchived Add checkbox to cancel future appraisals (hr.appraisal) - find all appraisals link to the employee and state in ['new', 'pending'], set their state to 'cancel'. Add checkbox to cancel future leaves (hr.holidays): - only consider leaves are not in state ['refuse', 'cancel'], find leaves with to_date > departure_date, set their state to 'cancel'. PR #42526 Task 2153106 Related: odoo/enterprise#7471 Signed-off-by: Yannick Tivisse (yti) --- addons/hr/wizard/hr_departure_wizard.py | 20 ++++++++------------ addons/hr/wizard/hr_departure_wizard_views.xml | 9 ++++++--- 2 files changed, 14 insertions(+), 15 deletions(-) (limited to 'addons/hr/wizard') diff --git a/addons/hr/wizard/hr_departure_wizard.py b/addons/hr/wizard/hr_departure_wizard.py index c01b00c7fba..5e7782a1648 100644 --- a/addons/hr/wizard/hr_departure_wizard.py +++ b/addons/hr/wizard/hr_departure_wizard.py @@ -22,22 +22,18 @@ class HrDepartureWizard(models.TransientModel): ('retired', 'Retired') ], string="Departure Reason", default="fired") departure_description = fields.Text(string="Additional Information") - plan_id = fields.Many2one('hr.plan', default=lambda self: self.env['hr.plan'].search([], limit=1)) + departure_date = fields.Date(string="Departure Date", required=True, default=fields.Date.today) employee_id = fields.Many2one('hr.employee', string='Employee', required=True) + archive_private_address = fields.Boolean('Archive Private Address', default=True) def action_register_departure(self): employee = self.employee_id employee.departure_reason = self.departure_reason employee.departure_description = self.departure_description + employee.departure_date = self.departure_date - if not employee.user_id.partner_id: - return - - for activity_type in self.plan_id.plan_activity_type_ids: - self.env['mail.activity'].create({ - 'res_id': employee.user_id.partner_id.id, - 'res_model_id': self.env['ir.model']._get('res.partner').id, - 'activity_type_id': activity_type.activity_type_id.id, - 'summary': activity_type.summary, - 'user_id': activity_type.get_responsible_id(employee).id, - }) + if self.archive_private_address: + # ignore contact links to internal users + private_address = employee.address_home_id + if private_address and private_address.active and not self.env['res.users'].search([('partner_id', '=', private_address.id)]): + private_address.toggle_active() diff --git a/addons/hr/wizard/hr_departure_wizard_views.xml b/addons/hr/wizard/hr_departure_wizard_views.xml index 4b096235fc3..22b3b2b7157 100644 --- a/addons/hr/wizard/hr_departure_wizard_views.xml +++ b/addons/hr/wizard/hr_departure_wizard_views.xml @@ -7,16 +7,19 @@
- - + + + + +
-- cgit v1.2.3