From d2c204e855e021443bd895815497c0dbcfb377b3 Mon Sep 17 00:00:00 2001 From: "rpa (Open ERP)" Date: Mon, 7 Dec 2009 19:32:31 +0530 Subject: [PATCH] [IMP]: Improvement for attendee export and added new object for alarm bzr revid: rpa@tinyerp.com-20091207140231-81dfot75xd5umwoh --- addons/crm/crm_caldav_view.xml | 40 +++++++++++++++++++++ addons/crm/crm_calendar.py | 63 ++++++++++++++++++++++++++++++---- 2 files changed, 97 insertions(+), 6 deletions(-) diff --git a/addons/crm/crm_caldav_view.xml b/addons/crm/crm_caldav_view.xml index 75d5065ba61..f5fc89cb233 100644 --- a/addons/crm/crm_caldav_view.xml +++ b/addons/crm/crm_caldav_view.xml @@ -43,6 +43,45 @@ + + crm.case.caldav.alarm + crm.caldav.alarm + form + +
+ + + + + + + + + + + + + + + +
+ + + crm.case.caldav.alarm + crm.caldav.alarm + tree + + + + + + + + + + + + crm.case.caldav.form crm.case @@ -54,6 +93,7 @@ + diff --git a/addons/crm/crm_calendar.py b/addons/crm/crm_calendar.py index bb8802ca755..8854f4c1028 100644 --- a/addons/crm/crm_calendar.py +++ b/addons/crm/crm_calendar.py @@ -84,6 +84,41 @@ class crm_caldav_attendee(osv.osv): crm_caldav_attendee() + +class crm_caldav_alarm(osv.osv): + _name = 'crm.caldav.alarm' + _description = 'Event alarm information' + + __attribute__ = { + } + + _columns = { + 'name' : fields.char('Summary', size=124), + 'action' : fields.selection([('AUDIO', 'AUDIO'), ('DISPLAY', 'DISPLAY'), \ + ('PROCEDURE', 'PROCEDURE'), ('EMAIL', 'EMAIL') ], 'Action' , required=True), + 'description' : fields.text('Description'), + 'attendee': fields.many2many('crm.caldav.attendee', 'alarm_attendee_rel', 'alarm_id', 'attendee_id', 'Attendees'), + 'trigger_related' : fields.selection([('BEFORE', 'BEFORE'),('AFTER', 'AFTER')]\ + , 'Trigger time', required=True), + 'trigger_duration' : fields.selection([('MINUTES', 'MINUTES'), ('HOURS', 'HOURS'), \ + ('DAYS', 'DAYS')], 'Trugger duration', required=True), + 'trigger_interval' : fields.integer('TIme' , required=True), + 'trigger_occurs' : fields.selection([('starts', 'The event starts'),('ends', 'The event ends')],\ + 'Trigger Occures at', required=True), + 'duration' : fields.integer('Duration'), + 'repeat' : fields.integer('Repeat'), # TODO + 'attach' : fields.binary('Attachment'), + } + _defaults = { + 'action' : lambda *x: 'EMAIL', + 'trigger_interval' : lambda *x: 5, + 'trigger_duration' : lambda *x: 'MINUTES', + 'trigger_related' : lambda *x: 'BEFORE', + 'trigger_occurs' : lambda *x: 'starts', + } + +crm_caldav_alarm() + class crm_case(osv.osv): _name = 'crm.case' _inherit = 'crm.case' @@ -162,7 +197,8 @@ class crm_case(osv.osv): 'rrule' : fields.text('Recurrent Rule'), 'rdates' : fields.function(_get_rdates, method=True, string='Recurrent Dates', \ store=True, type='text'), - 'attendees': fields.many2many('crm.caldav.attendee', 'crm_attendee_rel', 'case_id', 'attendee_id', 'Attendees'), + 'attendees': fields.many2many('crm.caldav.attendee', 'crm_attendee_rel', 'case_id', 'attendee_id', 'Attendees'), + 'alarm_id' : fields.many2one('crm.caldav.alarm', 'Alarm'), } _defaults = { @@ -172,7 +208,7 @@ class crm_case(osv.osv): } def export_cal(self, cr, uid, ids, context={}): - crm_data = self.read(cr, uid, ids, []) + crm_data = self.read(cr, uid, ids, [], context ={'read' :True}) ical = vobject.iCalendar() event_obj = self.pool.get('caldav.event') uid_val = '' @@ -182,11 +218,26 @@ class crm_case(osv.osv): if key == 'uid': uid_val += str(crm[val['field']]) continue - if val == None or key == 'rrule': + if val == None or key == 'rrule' or not val.has_key('field') or not crm[val['field']]: continue - if val.has_key('field') and val.has_key('sub-field') and crm[val['field']] and crm[val['field']]: + if key == "attendee": + attendee_object = self.pool.get('crm.caldav.attendee') + for attendee in attendee_object.read(cr, uid, crm[val['field']], []): + attendee_add = vevent.add('attendee') + for a_key, a_val in attendee_object.__attribute__.items(): + if attendee[a_val['field']]: + if a_val['type'] == 'text': + attendee_add.params[a_key] = [str(attendee[a_val['field']])] + elif a_val['type'] == 'boolean': + attendee_add.params[a_key] = [str(attendee[a_val['field']])] + + elif val.has_key('sub-field'): vevent.add(key).value = crm[val['field']][1] - elif val.has_key('field') and crm[val['field']]: + elif val.has_key('mapping'): + for key1, val1 in val['mapping'].items(): + if val1 == crm[val['field']]: + vevent.add(key).value = key1 + else: if val['type'] == "text": vevent.add(key).value = str(crm[val['field']]) elif val['type'] == 'datetime' and crm[val['field']]: @@ -195,7 +246,7 @@ class crm_case(osv.osv): startdate = datetime.strptime(crm['date'], "%Y-%m-%d %H:%M:%S") if not startdate: startdate = datetime.now() - rset1 = rrulestr(str(crm[event_obj.__attribute__['rrule']['field']]), dtstart=startdate, forceset=True) + rset1 = rrulestr(str(crm[self.__attribute__['rrule']['field']]), dtstart=startdate, forceset=True) vevent.rruleset = rset1 vevent.add('uid').value = uid_val return ical.serialize()#.replace(vobject.icalendar.CRLF, vobject.icalendar.LF).strip()