From bd1f0ec92cea8ef6739b6c84bb42f1112c6ba308 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Fri, 20 Aug 2010 16:50:13 +0530 Subject: [PATCH] [IMP]: base_calendar: Removing event or its recurrence should remove all the recurrent events that share same UID values bzr revid: rpa@tinyerp.com-20100820112013-bt1pkub8irxro3hx --- addons/base_calendar/base_calendar.py | 34 ++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 3577d98..1beb7e9 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -962,6 +962,19 @@ class calendar_event(osv.osv): return {'value': value} + def unlink_events(self, cr, uid, ids, context=None): + """ + This function deletes event which are linked with the event with recurrent_uid + (Removes the events which refers to the same UID value) + """ + if not context: + context = {} + for event_id in ids: + cr.execute('select id from %s where recurrent_uid=%s' % (self._table, event_id)) + r_ids = map(lambda x: x[0], cr.fetchall()) + self.unlink(cr, uid, r_ids, context=context) + return True + def _set_rrulestring(self, cr, uid, id, name, value, arg, context=None): """ Sets values of fields that defines event recurrence from the value of rrule string @@ -1074,6 +1087,10 @@ class calendar_event(osv.osv): else: result[event] = self.compute_rule_string(cr, uid, {'freq': datas.get('rrule_type').upper(), 'interval': 1}, context=context) + for id, myrule in result.items(): + #Remove the events generated from recurrent event + if not myrule: + self.unlink_events(cr, uid, [id], context=context) return result _columns = { @@ -1546,21 +1563,24 @@ true, it will allow you to hide the event alarm information without removing it. """ res = False for event_datas in self.read(cr, uid, ids, ['date', 'rrule', 'exdate'], context=context): - if isinstance(event_datas['id'], (int, long)): - res = super(calendar_event, self).unlink(cr, uid, event_datas['id']) + event_id = event_datas['id'] + if isinstance(event_id, (int, long)): + res = super(calendar_event, self).unlink(cr, uid, event_id, context=context) self.pool.get('res.alarm').do_alarm_unlink(cr, uid, [event_id], self._name) + self.unlink_events(cr, uid, [event_id], context=context) else: - event_id, date_new = event_datas['id'].split('-') - event_id = [int(event_id)] + str_event, date_new = event_id.split('-') + event_id = int(str_event) if event_datas['rrule']: # Remove one of the recurrent event date_new = time.strftime("%Y%m%dT%H%M%S", \ time.strptime(date_new, "%Y%m%d%H%M%S")) exdate = (event_datas['exdate'] and (event_datas['exdate'] + ',') or '') + date_new - res = self.write(cr, uid, event_id, {'exdate': exdate}) + res = self.write(cr, uid, [event_id], {'exdate': exdate}) else: - res = super(calendar_event, self).unlink(cr, uid, event_id) - self.pool.get('res.alarm').do_alarm_unlink(cr, uid, event_id, self._name) + res = super(calendar_event, self).unlink(cr, uid, [event_id], context=context) + self.pool.get('res.alarm').do_alarm_unlink(cr, uid, [event_id], self._name) + self.unlink_events(cr, uid, [event_id], context=context) return res def create(self, cr, uid, vals, context=None): -- 1.7.10.4