[IMP] overlap check with sql.

bzr revid: vme@tinyerp.com-20140326090209-afmcp61o8zo9yjvq
This commit is contained in:
Vidhin Mehta (OpenERP) 2014-03-26 14:32:09 +05:30
parent a6039496f6
commit cdc28ed904
1 changed files with 11 additions and 11 deletions

View File

@ -184,15 +184,16 @@ class event_track(osv.osv):
}
def _check_if_track_overlap(self, cr, uid, ids, context=None):
for track in self.browse(cr, uid, ids, context=context):
ids_to_compare = self.search(cr, uid, [("id","!=",track.id),('event_id', '=', track.event_id.id),('location_id', '=', track.location_id.id)])
start_time = datetime.datetime.strptime(track.date, '%Y-%m-%d %H:%M:%S')
end_time = start_time + datetime.timedelta(minutes = track.duration)
if end_time <= start_time:return False
for com_track in self.browse(cr, uid, ids_to_compare, context=context):
com_start_time = datetime.datetime.strptime(com_track.date, '%Y-%m-%d %H:%M:%S')
com_end_time = com_start_time + datetime.timedelta(minutes = com_track.duration)
if (com_start_time <= start_time and com_end_time > start_time) or (com_start_time < end_time and com_end_time >= end_time):
return False
#if duration and start date enter check overlapping.
if track.date and track.duration:
if track.location_id:
cr.execute("SELECT (date, (duration || 'minutes')::INTERVAL) OVERLAPS (%s, (%s || 'minutes')::INTERVAL) from event_track where id!= %s and event_id=%s and (location_id=%s or location_id IS Null)", (track.date, track.duration, track.id, track.event_id.id, track.location_id.id or None))
else:
cr.execute("SELECT (date, (duration || 'minutes')::INTERVAL) OVERLAPS (%s, (%s || 'minutes')::INTERVAL) from event_track where id!= %s and event_id=%s", (track.date, track.duration, track.id, track.event_id.id))
result = cr.fetchall()
for res in result:
if(res[0]):
return False
return True
_constraints = [
@ -285,11 +286,10 @@ class event_track(osv.osv):
for track in sort_tracks[track_day][time_slot]:
if track['row_span']:
skip_time = time_slots[time_slots.index(time_slot)+1: time_slots.index(time_slot)+track['row_span']]
location_key = track['location_id'][0]
location_key = track['location_id'][0] if track['location_id'] else 0
if not row_skip_td[track_day].has_key(location_key):
row_skip_td[track_day] [location_key] = []
row_skip_td[track_day][location_key] = row_skip_td[track_day] [location_key] + skip_time
return {
'event': event,
'room_list': rooms,