From 12119467bd937b985aeb42eec0acbc365024b1f7 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Thu, 17 Dec 2009 11:56:30 +0530 Subject: [PATCH] [IMP]: Caldav: Improvement for caldav alarm export bzr revid: rpa@tinyerp.com-20091217062630-x84cwkgmm2jkv95q --- addons/caldav/calendar.py | 31 +++++++++++++++++++++++-------- addons/crm/crm_calendar.py | 19 ++++++++++--------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/addons/caldav/calendar.py b/addons/caldav/calendar.py index 6f791af0077..ce9246a6509 100644 --- a/addons/caldav/calendar.py +++ b/addons/caldav/calendar.py @@ -20,7 +20,7 @@ # ############################################################################## -from datetime import datetime +from datetime import datetime, timedelta from dateutil import parser from dateutil.rrule import * from osv import fields, osv @@ -110,12 +110,27 @@ class CalDAV(object): alarm = vevent.add('valarm') alarm_object = self.pool.get('crm.caldav.alarm') alarm_data = alarm_object.read(cr, uid, data[map_field][0], []) + + # Compute trigger data interval = alarm_data['trigger_interval'] - duration = alarm_data['trigger_duration'] - related = alarm_data['trigger_related'] occurs = alarm_data['trigger_occurs'] - value_string = (occurs == 'BEFORE' and '-P' or 'P') +\ - str(duration) + interval[0] + duration = (occurs == 'AFTER' and alarm_data['trigger_duration']) \ + or -(alarm_data['trigger_duration']) + related = alarm_data['trigger_related'] + trigger = alarm.add('TRIGGER') + trigger.params['RELATED'] = [related.upper()] + if interval == 'DAYS': + delta = timedelta(days=duration) + if interval == 'HOURS': + delta = timedelta(hours=duration) + if interval == 'MINUTES': + delta = timedelta(minutes=duration) + trigger.value = delta + + # Compute other details + alarm.add('DESCRIPTION').value = alarm_data['name'] + alarm.add('ACTION').value = alarm_data['action'] + elif data[map_field]: if map_type == "text": vevent.add(field).value = str(data[map_field]) @@ -148,7 +163,7 @@ class CalDAV(object): vals = map_data(cr, uid, self) return vals - + class Calendar(CalDAV, osv.osv_memory): _name = 'caldav.calendar' __attribute__ = { @@ -322,7 +337,7 @@ class Attendee(CalDAV, osv.osv_memory): 'dir': None, # Use: 0-1 Specify reference to a directory entry associated with the calendar user specified by the property. 'language': None, # Use: 0-1 Specify the language for text values in a property or property parameter. } - + def import_ical(self, cr, uid, ical_data): for para in ical_data.params: if para.lower() == 'cn': @@ -332,4 +347,4 @@ class Attendee(CalDAV, osv.osv_memory): vals = map_data(cr, uid, self) return vals -Attendee() \ No newline at end of file +Attendee() diff --git a/addons/crm/crm_calendar.py b/addons/crm/crm_calendar.py index b8577e15def..77a5e5250ae 100644 --- a/addons/crm/crm_calendar.py +++ b/addons/crm/crm_calendar.py @@ -113,7 +113,7 @@ class crm_caldav_alarm(osv.osv): 'trigger_interval' : fields.selection([('MINUTES', 'MINUTES'), ('HOURS', 'HOURS'), \ ('DAYS', 'DAYS')], 'Trugger duration', required=True), 'trigger_duration' : fields.integer('TIme' , required=True), - 'trigger_related' : fields.selection([('starts', 'The event starts'), ('end', \ + 'trigger_related' : fields.selection([('start', 'The event starts'), ('end', \ 'The event ends')], 'Trigger Occures at', required=True), 'duration' : fields.integer('Duration'), 'repeat' : fields.integer('Repeat'), # TODO @@ -126,7 +126,7 @@ class crm_caldav_alarm(osv.osv): 'trigger_interval' : lambda *x: 'MINUTES', 'trigger_duration' : lambda *x: 5, 'trigger_occurs' : lambda *x: 'BEFORE', - 'trigger_related' : lambda *x: 'starts', + 'trigger_related' : lambda *x: 'start', } crm_caldav_alarm() @@ -238,13 +238,14 @@ class crm_case(osv.osv): mail_to = [] for alarmdata in case_with_alarm: dtstart = datetime.datetime.strptime(alarmdata['date'], "%Y-%m-%d %H:%M:%S") - if alarmdata['trigger_duration'] == 'DAYS': - delta = datetime.timedelta(days=alarmdata['trigger_interval']) - if alarmdata['trigger_duration'] == 'HOURS': - delta = datetime.timedelta(hours=alarmdata['trigger_interval']) - if alarmdata['trigger_duration'] == 'MINUTES': - delta = datetime.timedelta(minutes=alarmdata['trigger_interval']) - alarm_time = dtstart + (alarmdata['trigger_related']== 'AFTER' and delta or -delta) + if alarmdata['trigger_interval'] == 'DAYS': + delta = datetime.timedelta(days=alarmdata['trigger_duration']) + if alarmdata['trigger_interval'] == 'HOURS': + delta = datetime.timedelta(hours=alarmdata['trigger_duration']) + if alarmdata['trigger_interval'] == 'MINUTES': + delta = datetime.timedelta(minutes=alarmdata['trigger_duration']) + alarm_time = dtstart + (alarmdata['trigger_occurs']== 'AFTER' and delta or -delta) + print 'alarm_time', alarm_time if datetime.datetime.now() >= alarm_time: case_val = case_obj.browse(cr, uid, alarmdata.get('id'), context)[0] for att in case_val.attendees: