[FIX] hr_holidays: force draft.@flow_start to False to correctly update existing databases + fix validation logic
The check_holidays() validation was not working correctly because it was called both before and after inserting new leave requests, with inconsistent results. Using it as a fixed constraint is simpler. bzr revid: odo@openerp.com-20131015165416-in0rfd7rrjmekv0g
This commit is contained in:
parent
17c661328b
commit
58928c5c4c
|
@ -26,6 +26,7 @@ import math
|
|||
import time
|
||||
from operator import attrgetter
|
||||
|
||||
from openerp.exceptions import Warning
|
||||
from openerp import tools
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
|
@ -149,6 +150,8 @@ class hr_holidays(osv.osv):
|
|||
return False
|
||||
return True
|
||||
|
||||
_check_holidays = lambda self, cr, uid, ids, context=None: self.check_holidays(cr, uid, ids, context=context)
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Description', size=64),
|
||||
'state': fields.selection([('draft', 'To Submit'), ('cancel', 'Cancelled'),('confirm', 'To Approve'), ('refuse', 'Refused'), ('validate1', 'Second Approval'), ('validate', 'Approved')],
|
||||
|
@ -188,6 +191,7 @@ class hr_holidays(osv.osv):
|
|||
}
|
||||
_constraints = [
|
||||
(_check_date, 'You can not have 2 leaves that overlaps on same day!', ['date_from','date_to']),
|
||||
(_check_holidays, 'The number of remaining leaves is not sufficient for this leave type', ['state','number_of_days_temp'])
|
||||
]
|
||||
|
||||
_sql_constraints = [
|
||||
|
@ -314,7 +318,6 @@ class hr_holidays(osv.osv):
|
|||
context = {}
|
||||
context = dict(context, mail_create_nolog=True)
|
||||
hol_id = super(hr_holidays, self).create(cr, uid, values, context=context)
|
||||
self.check_holidays(cr, uid, [hol_id], context=context)
|
||||
return hol_id
|
||||
|
||||
def holidays_reset(self, cr, uid, ids, context=None):
|
||||
|
@ -333,7 +336,6 @@ class hr_holidays(osv.osv):
|
|||
return True
|
||||
|
||||
def holidays_first_validate(self, cr, uid, ids, context=None):
|
||||
self.check_holidays(cr, uid, ids, context=context)
|
||||
obj_emp = self.pool.get('hr.employee')
|
||||
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
|
||||
manager = ids2 and ids2[0] or False
|
||||
|
@ -341,7 +343,6 @@ class hr_holidays(osv.osv):
|
|||
return self.write(cr, uid, ids, {'state':'validate1', 'manager_id': manager})
|
||||
|
||||
def holidays_validate(self, cr, uid, ids, context=None):
|
||||
self.check_holidays(cr, uid, ids, context=context)
|
||||
obj_emp = self.pool.get('hr.employee')
|
||||
ids2 = obj_emp.search(cr, uid, [('user_id', '=', uid)])
|
||||
manager = ids2 and ids2[0] or False
|
||||
|
@ -393,7 +394,6 @@ class hr_holidays(osv.osv):
|
|||
return True
|
||||
|
||||
def holidays_confirm(self, cr, uid, ids, context=None):
|
||||
self.check_holidays(cr, uid, ids, context=context)
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
if record.employee_id and record.employee_id.parent_id and record.employee_id.parent_id.user_id:
|
||||
self.message_subscribe_users(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context)
|
||||
|
@ -429,12 +429,10 @@ class hr_holidays(osv.osv):
|
|||
if record.holiday_type != 'employee' or record.type != 'remove' or not record.employee_id or record.holiday_status_id.limit:
|
||||
continue
|
||||
leave_days = self.pool.get('hr.holidays.status').get_days(cr, uid, [record.holiday_status_id.id], record.employee_id.id, context=context)[record.holiday_status_id.id]
|
||||
if leave_days['remaining_leaves'] < record.number_of_days_temp:
|
||||
raise osv.except_osv(_('Warning!'),
|
||||
_('There are not enough remaining days available in %s for employee %s.') % (record.holiday_status_id.name, record.employee_id.name))
|
||||
if leave_days['virtual_remaining_leaves'] < record.number_of_days_temp:
|
||||
raise osv.except_osv(_('Warning!'),
|
||||
_('Other pending requests already book too much days in %s for employee %s.') % (record.holiday_status_id.name, record.employee_id.name))
|
||||
if leave_days['remaining_leaves'] < 0 or leave_days['virtual_remaining_leaves'] < 0:
|
||||
# Raising a warning gives a more user-friendly feedback than the default constraint error
|
||||
raise Warning(_('The number of remaining leaves is not sufficient for this leave type.\n'
|
||||
'Please verify also the leaves waiting for validation.'))
|
||||
return True
|
||||
|
||||
# -----------------------------
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
<record model="workflow.activity" id="act_draft"> <!-- draft -->
|
||||
<field name="wkf_id" ref="wkf_holidays" />
|
||||
<field name="name">draft</field>
|
||||
<field name="flow_start">False</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">holidays_reset()</field>
|
||||
</record>
|
||||
|
|
Loading…
Reference in New Issue