[IMP]: Caldav: Improvement for caldav alarm export

bzr revid: rpa@tinyerp.com-20091217062630-x84cwkgmm2jkv95q
This commit is contained in:
rpa (Open ERP) 2009-12-17 11:56:30 +05:30
parent 9d3016681b
commit 12119467bd
2 changed files with 33 additions and 17 deletions

View File

@ -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()
Attendee()

View File

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