From cdc28ed904ae93edd93ddfc638fd2b6afcbf9805 Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Wed, 26 Mar 2014 14:32:09 +0530 Subject: [PATCH] [IMP] overlap check with sql. bzr revid: vme@tinyerp.com-20140326090209-afmcp61o8zo9yjvq --- addons/website_event_track/models/event.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index c57cf1d27d2..de7504dd64c 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -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,