[IMP]: caldav: Improvement for table name in query and fixed problem of updating alarm data

bzr revid: rpa@openerp.co.in-20100120085157-w50ot6i2a3854gc8
This commit is contained in:
rpa (Open ERP) 2010-01-20 14:21:57 +05:30
parent d351065fb1
commit cd05a92fba
2 changed files with 23 additions and 17 deletions

View File

@ -127,8 +127,9 @@ class CalDAV(object):
if not model: if not model:
continue continue
uidval = common.openobjectid2uid(cr, data[map_field], model) uidval = common.openobjectid2uid(cr, data[map_field], model)
model_obj = self.pool.get(model)
cr.execute('select id from %s where recurrent_uid=%s' cr.execute('select id from %s where recurrent_uid=%s'
% (model.replace('.', '_'), data[map_field])) % (model_obj._table, data[map_field]))
r_ids = map(lambda x: x[0], cr.fetchall()) r_ids = map(lambda x: x[0], cr.fetchall())
if r_ids: if r_ids:
rdata = self.pool.get(model).read(cr, uid, r_ids) rdata = self.pool.get(model).read(cr, uid, r_ids)
@ -139,11 +140,15 @@ class CalDAV(object):
uidval = common.openobjectid2uid(cr, data['recurrent_uid'], model) uidval = common.openobjectid2uid(cr, data['recurrent_uid'], model)
vevent.add('uid').value = uidval vevent.add('uid').value = uidval
elif field == 'attendee' and data[map_field]: elif field == 'attendee' and data[map_field]:
model = self.__attribute__[field].get('object', False)
attendee_obj = self.pool.get('basic.calendar.attendee') attendee_obj = self.pool.get('basic.calendar.attendee')
vevent = attendee_obj.export_ical(cr, uid, data[map_field], vevent, context=context) vevent = attendee_obj.export_ical(cr, uid, model, \
data[map_field], vevent, context=context)
elif field == 'valarm' and data[map_field]: elif field == 'valarm' and data[map_field]:
model = self.__attribute__[field].get('object', False)
alarm_obj = self.pool.get('basic.calendar.alarm') alarm_obj = self.pool.get('basic.calendar.alarm')
vevent = alarm_obj.export_ical(cr, uid, data[map_field][0], vevent, context=context) vevent = alarm_obj.export_ical(cr, uid, model, \
data[map_field][0], vevent, context=context)
elif data[map_field]: elif data[map_field]:
if map_type == "text": if map_type == "text":
vevent.add(field).value = str(data[map_field]) vevent.add(field).value = str(data[map_field])
@ -341,9 +346,9 @@ class Alarm(CalDAV, osv.osv_memory):
'x-prop': None, 'x-prop': None,
} }
def export_ical(self, cr, uid, alarm_id, vevent, context={}): def export_ical(self, cr, uid, model, alarm_id, vevent, context={}):
valarm = vevent.add('valarm') valarm = vevent.add('valarm')
alarm_object = self.pool.get('calendar.alarm') alarm_object = self.pool.get(model)
alarm_data = alarm_object.read(cr, uid, alarm_id, []) alarm_data = alarm_object.read(cr, uid, alarm_id, [])
# Compute trigger data # Compute trigger data
@ -427,9 +432,9 @@ class Attendee(CalDAV, osv.osv_memory):
vals = map_data(cr, uid, self) vals = map_data(cr, uid, self)
return vals return vals
def export_ical(self, cr, uid, attendee_id, vevent, context={}): def export_ical(self, cr, uid, model, attendee_ids, vevent, context={}):
attendee_object = self.pool.get('calendar.attendee') attendee_object = self.pool.get(model)
for attendee in attendee_object.read(cr, uid, attendee_id, []): for attendee in attendee_object.read(cr, uid, attendee_ids, []):
attendee_add = vevent.add('attendee') attendee_add = vevent.add('attendee')
for a_key, a_val in attendee_object.__attribute__.items(): for a_key, a_val in attendee_object.__attribute__.items():
if attendee[a_val['field']] and a_val['field'] != 'cn': if attendee[a_val['field']] and a_val['field'] != 'cn':

View File

@ -19,7 +19,6 @@
# #
############################################################################## ##############################################################################
from datetime import datetime, timedelta from datetime import datetime, timedelta
from datetime import datetime, timedelta from datetime import datetime, timedelta
from dateutil import parser from dateutil import parser
@ -27,6 +26,7 @@ from osv import fields, osv
from service import web_services from service import web_services
from tools.translate import _ from tools.translate import _
import base64 import base64
import pooler
import re import re
import time import time
@ -63,9 +63,10 @@ def uid2openobjectid(cr, uidval, oomodel, rdate):
return (False, None) return (False, None)
else: else:
model, id, dbname = wematch.groups() model, id, dbname = wematch.groups()
model_obj = pooler.get_pool(cr.dbname).get(model)
if (not model == oomodel) or (not dbname == cr.dbname): if (not model == oomodel) or (not dbname == cr.dbname):
return (False, None) return (False, None)
qry = 'select distinct(id) from %s' % model.replace('.', '_') qry = 'select distinct(id) from %s' % model_obj._table
if rdate: if rdate:
qry += " where recurrent_id='%s'" % (rdate) qry += " where recurrent_id='%s'" % (rdate)
cr.execute(qry) cr.execute(qry)
@ -282,8 +283,8 @@ are both optional, but if one occurs, so MUST the other"""),
def do_alarm_create(self, cr, uid, ids, model, date, context={}): def do_alarm_create(self, cr, uid, ids, model, date, context={}):
alarm_obj = self.pool.get('calendar.alarm') alarm_obj = self.pool.get('calendar.alarm')
model_obj = self.pool.get('ir.model') ir_obj = self.pool.get('ir.model')
model_id = model_obj.search(cr, uid, [('model', '=', model)])[0] model_id = ir_obj.search(cr, uid, [('model', '=', model)])[0]
model_obj = self.pool.get(model) model_obj = self.pool.get(model)
for data in model_obj.browse(cr, uid, ids): for data in model_obj.browse(cr, uid, ids):
@ -309,8 +310,8 @@ are both optional, but if one occurs, so MUST the other"""),
} }
alarm_id = alarm_obj.create(cr, uid, vals) alarm_id = alarm_obj.create(cr, uid, vals)
cr.execute('Update %s set caldav_alarm_id=%s, alarm_id=%s \ cr.execute('Update %s set caldav_alarm_id=%s, alarm_id=%s \
where id=%s' % (model.replace('.', '_'), \ where id=%s' % (model_obj._table, \
alarm_id, basic_alarm.id, data.id)) alarm_id, basic_alarm.id, data.id))
cr.commit() cr.commit()
return True return True
@ -323,8 +324,8 @@ are both optional, but if one occurs, so MUST the other"""),
alarm_ids = alarm_obj.search(cr, uid, [('model_id', '=', model_id), ('res_id', '=', datas.id)]) alarm_ids = alarm_obj.search(cr, uid, [('model_id', '=', model_id), ('res_id', '=', datas.id)])
if alarm_ids and len(alarm_ids): if alarm_ids and len(alarm_ids):
alarm_obj.unlink(cr, uid, alarm_ids) alarm_obj.unlink(cr, uid, alarm_ids)
cr.execute('Update %s set caldav_alarm_id=NULL, \ cr.execute('Update %s set caldav_alarm_id=NULL, alarm_id=NULL\
alarm_id=NULL where id=%s' % (self._table, datas.id)) where id=%s' % (model_obj._table, datas.id))
cr.commit() cr.commit()
return True return True
@ -716,7 +717,7 @@ rule or repeating pattern for anexception to a recurrence set"),
if not id in new_ids: if not id in new_ids:
new_ids.append(id) new_ids.append(id)
res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context) res = super(calendar_event, self).write(cr, uid, new_ids, vals, context=context)
if vals.get('alarm_id'): if vals.has_key('alarm_id'):
alarm_obj = self.pool.get('res.alarm') alarm_obj = self.pool.get('res.alarm')
alarm_obj.do_alarm_create(cr, uid, new_ids, self._name, 'date') alarm_obj.do_alarm_create(cr, uid, new_ids, self._name, 'date')
return res return res