[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
This commit is contained in:
rpa (Open ERP) 2010-08-20 16:50:13 +05:30
parent 5fe16e2444
commit bd1f0ec92c
1 changed files with 27 additions and 7 deletions

View File

@ -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):