~jgrandguillaume-c2c/openobject-addons/multi-company-cost-price

« back to all changes in this revision

Viewing changes to caldav/caldav.py

  • Committer: Joël Grand-Guillaume
  • Date: 2010-04-08 09:00:10 UTC
  • mfrom: (2533.3.664)
  • Revision ID: joel.grandguillaume@camptocamp.com-20100408090010-c0pqjan341s18bxs
[MRG] Merge from last trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
192
192
                vals = alarm.import_cal(cr, uid, cal_data, context=ctx)
193
193
                self.ical_set(cal_data.name.lower(), vals, 'value')
194
194
                continue
 
195
            if cal_data.name.lower() == 'exdate':
 
196
                exval = map(lambda x: str(x), cal_data.value)
 
197
                self.ical_set(cal_data.name.lower(), ','.join(exval), 'value')
 
198
                continue
195
199
            if cal_data.name.lower() in self.__attribute__:
 
200
                
196
201
                if cal_data.params.get('X-VOBJ-ORIGINAL-TZID'):
197
202
                    self.ical_set('vtimezone', cal_data.params.get('X-VOBJ-ORIGINAL-TZID'), 'value')
198
203
                self.ical_set(cal_data.name.lower(), cal_data.value, 'value')
248
253
                                     data[map_field], ical, context=context)
249
254
                    elif data[map_field]:
250
255
                        if map_type in ("char", "text"):
251
 
                            vevent.add(field).value = tools.ustr(data[map_field]) 
 
256
                            if field in ('exdate'):
 
257
                                vevent.add(field).value = map(parser.parse, (data[map_field]).split(','))
 
258
                            else:
 
259
                                vevent.add(field).value = tools.ustr(data[map_field]) 
252
260
                        elif map_type in ('datetime', 'date') and data[map_field]:
253
 
                            if field in ('exdate'):
254
 
                                vevent.add(field).value = [parser.parse(data[map_field])]
255
 
                            else:
256
 
                                dtfield = vevent.add(field)
257
 
                                dtfield.value = parser.parse(data[map_field])
258
 
                                if tzval:
259
 
                                    dtfield.params['TZID'] = [tzval.title()]
 
261
                            dtfield = vevent.add(field)
 
262
                            dtfield.value = parser.parse(data[map_field])
 
263
                            if tzval:
 
264
                                dtfield.params['TZID'] = [tzval.title()]
260
265
                        elif map_type == "timedelta":
261
266
                            vevent.add(field).value = timedelta(hours=data[map_field])
262
267
                        elif map_type == "many2one":
275
280
    def check_import(self, cr, uid, vals, context={}):
276
281
        ids = []
277
282
        model_obj = self.pool.get(context.get('model'))
 
283
        recur_pool = {}
278
284
        try:
279
285
            for val in vals:
280
286
                exists, r_id = uid2openobjectid(cr, val['id'], context.get('model'), \
281
287
                                                                 val.get('recurrent_id'))
282
288
                if val.has_key('create_date'): val.pop('create_date')
 
289
                u_id = val.get('id', None)
283
290
                val.pop('id')
284
291
                if exists and r_id:
285
292
                    val.update({'recurrent_uid': exists})
289
296
                    model_obj.write(cr, uid, [exists], val)
290
297
                    ids.append(exists)
291
298
                else:
292
 
                    event_id = model_obj.create(cr, uid, val)
293
 
                    ids.append(event_id)
 
299
                    if u_id in recur_pool and val.get('recurrent_id'):
 
300
                        val.update({'recurrent_uid': recur_pool[u_id]})
 
301
                        revent_id = model_obj.create(cr, uid, val)
 
302
                        ids.append(revent_id)
 
303
                    else:
 
304
                        event_id = model_obj.create(cr, uid, val)
 
305
                        recur_pool[u_id] = event_id
 
306
                        ids.append(event_id)
294
307
        except Exception, e:
295
308
            raise osv.except_osv(('Error !'), (str(e)))
296
309
        return ids
369
382
    def import_cal(self, cr, uid, content, data_id=None, context=None):
370
383
        if not context:
371
384
            context = {}
 
385
        vals = []
372
386
        ical_data = base64.decodestring(content)
373
387
        parsedCal = vobject.readOne(ical_data)
374
388
        if not data_id:
385
399
                                })
386
400
                self.__attribute__ = get_attribute_mapping(cr, uid, child.name.lower(), context=context)
387
401
                val = self.parse_ics(cr, uid, child, cal_children=cal_children, context=context)
 
402
                vals.append(val)
388
403
                obj = self.pool.get(cal_children[child.name.lower()])
389
 
                if hasattr(obj, 'check_import'):
390
 
                    obj.check_import(cr, uid, [val], context=context)
391
 
                else:
392
 
                    self.check_import(cr, uid, [val], context=context)
 
404
        if hasattr(obj, 'check_import'):
 
405
            obj.check_import(cr, uid, vals, context=context)
 
406
        else:
 
407
            self.check_import(cr, uid, vals, context=context)
393
408
        return {}
394
409
Calendar()
395
410
    
789
804
                    cn_val = [str(attendee[a_val['field']])]
790
805
                    if cn_val:
791
806
                        attendee_add.params['CN'] = cn_val
792
 
            attendee_add.value = 'MAILTO:' + attendee['email']
 
807
            if not attendee['email']:
 
808
                raise osv.except_osv(_('Error !'), _('Attendee must have an Email Id'))
 
809
            elif attendee['email']:
 
810
                attendee_add.value = 'MAILTO:' + attendee['email']
793
811
        return vevent
794
812
 
795
813
Attendee()