[FIX] hr_attendance : timesheet - sign in - out : must not allow overlaps
bzr revid: mdi@tinyerp.com-20111114122823-7ehd1axt0l0b2euz
This commit is contained in:
parent
7cc8e12c10
commit
dde556db2e
|
@ -64,19 +64,21 @@ class hr_attendance(osv.osv):
|
|||
}
|
||||
|
||||
def _altern_si_so(self, cr, uid, ids, context=None):
|
||||
for id in ids:
|
||||
sql = '''
|
||||
SELECT action, name
|
||||
FROM hr_attendance AS att
|
||||
WHERE employee_id = (SELECT employee_id FROM hr_attendance WHERE id=%s)
|
||||
AND action IN ('sign_in','sign_out')
|
||||
AND name <= (SELECT name FROM hr_attendance WHERE id=%s)
|
||||
ORDER BY name DESC
|
||||
LIMIT 2 '''
|
||||
cr.execute(sql,(id,id))
|
||||
atts = cr.fetchall()
|
||||
if not ((len(atts)==1 and atts[0][0] == 'sign_in') or (len(atts)==2 and atts[0][0] != atts[1][0] and atts[0][1] != atts[1][1])):
|
||||
return False
|
||||
current_attendance_data = self.browse(cr, uid, ids, context=context)[0]
|
||||
obj_attendance_ids = self.search(cr, uid, [('employee_id', '=', current_attendance_data.employee_id.id)], context=context)
|
||||
obj_attendance_ids.remove(ids[0])
|
||||
hr_attendance_data = self.browse(cr, uid, obj_attendance_ids, context=context)
|
||||
|
||||
for old_attendance in hr_attendance_data:
|
||||
if old_attendance.employee_id.id == current_attendance_data['employee_id'].id:
|
||||
if old_attendance.action == current_attendance_data['action']:
|
||||
return False
|
||||
elif old_attendance.name >= current_attendance_data['name']:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
if current_attendance_data['action'] == 'sign_out':
|
||||
return False
|
||||
return True
|
||||
|
||||
_constraints = [(_altern_si_so, 'Error: Sign in (resp. Sign out) must follow Sign out (resp. Sign in)', ['action'])]
|
||||
|
|
Loading…
Reference in New Issue