diff --git a/addons/hr/wizard/hr_departure_wizard.py b/addons/hr/wizard/hr_departure_wizard.py index 545b444e456..c2284f82aa2 100644 --- a/addons/hr/wizard/hr_departure_wizard.py +++ b/addons/hr/wizard/hr_departure_wizard.py @@ -1,16 +1,22 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models +from odoo import fields, models class HrDepartureWizard(models.TransientModel): _name = 'hr.departure.wizard' _description = 'Departure Wizard' + def _get_default_departure_date(self): + departure_date = False + if self.env.context.get('active_id'): + departure_date = self.env['hr.employee'].browse(self.env.context['active_id']).departure_date + return departure_date or fields.Date.today() + departure_reason_id = fields.Many2one("hr.departure.reason", default=lambda self: self.env['hr.departure.reason'].search([], limit=1), required=True) departure_description = fields.Html(string="Additional Information") - departure_date = fields.Date(string="Departure Date", required=True, default=fields.Date.today) + departure_date = fields.Date(string="Departure Date", required=True, default=_get_default_departure_date) employee_id = fields.Many2one( 'hr.employee', string='Employee', required=True, default=lambda self: self.env.context.get('active_id', None), diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index d7a0c66cd60..1d38a5057bf 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -719,7 +719,7 @@ class HolidaysRequest(models.Model): leave_days = mapped_days[holiday.employee_id.id][holiday.holiday_status_id.id] if float_compare(leave_days['remaining_leaves'], 0, precision_digits=2) == -1 or float_compare(leave_days['virtual_remaining_leaves'], 0, precision_digits=2) == -1: raise ValidationError(_('The number of remaining time off is not sufficient for this time off type.\n' - 'Please also check the time off waiting for validation.')) + 'Please also check the time off waiting for validation.') + '\n- %s' % holiday.display_name) @api.constrains('date_from', 'date_to', 'employee_id') def _check_date_state(self): @@ -859,7 +859,7 @@ class HolidaysRequest(models.Model): raise ValidationError(_( 'Could not find an allocation of type %(leave_type)s for the requested time period.', leave_type=leave.holiday_status_id.display_name, - )) + ) + '\n- %s' % (leave.employee_id.name)) @api.constrains('holiday_allocation_id', 'date_to', 'date_from') def _check_leave_type_validity(self): diff --git a/addons/hr_work_entry_contract/models/hr_contract.py b/addons/hr_work_entry_contract/models/hr_contract.py index 769ff1a59bc..7b3bc599811 100644 --- a/addons/hr_work_entry_contract/models/hr_contract.py +++ b/addons/hr_work_entry_contract/models/hr_contract.py @@ -5,9 +5,10 @@ from collections import defaultdict from datetime import datetime, date from dateutil.relativedelta import relativedelta -from odoo import api, fields, models +from odoo import api, fields, models, _ from odoo.addons.resource.models.resource import datetime_to_string, string_to_datetime, Intervals from odoo.osv import expression +from odoo.exceptions import UserError import pytz @@ -178,6 +179,11 @@ class HrContract(models.Model): return contract_vals def _generate_work_entries(self, date_start, date_stop, force=False): + canceled_contracts = self.filtered(lambda c: c.state == 'cancel') + if canceled_contracts: + raise UserError( + _("Sorry, generating work entries from cancelled contracts is not allowed.") + '\n%s' % ( + ', '.join(canceled_contracts.mapped('name')))) vals_list = [] date_start = fields.Datetime.to_datetime(date_start) date_stop = datetime.combine(fields.Datetime.to_datetime(date_stop), datetime.max.time()) diff --git a/addons/hr_work_entry_holidays/models/hr_leave.py b/addons/hr_work_entry_holidays/models/hr_leave.py index 3c4eb0bd9a3..3545c1d62b6 100644 --- a/addons/hr_work_entry_holidays/models/hr_leave.py +++ b/addons/hr_work_entry_holidays/models/hr_leave.py @@ -72,7 +72,10 @@ class HrLeave(models.Model): nbr_contracts = self.env['hr.contract'].sudo().search_count(domain) if nbr_contracts > 1: contracts = self.env['hr.contract'].sudo().search(domain) - raise ValidationError(_('A leave cannot be set across multiple contracts.') + '\n' + ', '.join(contracts.mapped('name'))) + raise ValidationError( + _('A leave cannot be set across multiple contracts.') + '\n%s\n%s' % ( + ', '.join(contracts.mapped('name')), + holiday.display_name)) def _cancel_work_entry_conflict(self): """