[FIX]: base_calendar, caldav: Fixed problem of wrong attribute value in attendee and put proper email and cn value while importing ics file with attendee data

bzr revid: rpa@openerp.co.in-20100127131941-gubmtane9u92wi1s
This commit is contained in:
rpa (Open ERP) 2010-01-27 18:49:41 +05:30
parent 941667e77d
commit cb5b75b569
3 changed files with 35 additions and 12 deletions

View File

@ -27,6 +27,7 @@ from tools.translate import _
import base64
import pooler
import re
import tools
import vobject
# O-1 Optional and can come only once
@ -84,7 +85,7 @@ def get_attribute_mapping(cr, uid, calname, context={}):
if not res.get('uid', None):
res['uid'] = {}
res['uid']['field'] = 'id'
res[attr]['type'] = "integer"
res['uid']['type'] = "integer"
return res
def map_data(cr, uid, obj):
@ -170,12 +171,15 @@ class CalDAV(object):
self.__attribute__[name][type] = None
return True
def parse_ics(self, cr, uid, child):
def parse_ics(self, cr, uid, child, cal_children=None, context=None):
att_data = []
for cal_data in child.getChildren():
if cal_data.name.lower() == 'attendee':
ctx = context.copy()
if cal_children:
ctx.update({'model': cal_children[cal_data.name.lower()]})
attendee = self.pool.get('basic.calendar.attendee')
att_data.append(attendee.import_cal(cr, uid, cal_data))
att_data.append(attendee.import_cal(cr, uid, cal_data, context=ctx))
self.ical_set(cal_data.name.lower(), att_data, 'value')
continue
if cal_data.name.lower() == 'valarm':
@ -230,7 +234,7 @@ class CalDAV(object):
data[map_field][0], vevent, context=context)
elif data[map_field]:
if map_type in ("char", "text"):
vevent.add(field).value = str(data[map_field].encode('utf8'))
vevent.add(field).value = tools.ustr(data[map_field])
elif map_type in ('datetime', 'date') and data[map_field]:
if field in ('exdate'):
vevent.add(field).value = [parser.parse(data[map_field])]
@ -239,12 +243,12 @@ class CalDAV(object):
elif map_type == "timedelta":
vevent.add(field).value = timedelta(hours=data[map_field])
elif map_type == "many2one":
vevent.add(field).value = (data.get(map_field)[1]).encode('utf8')
vevent.add(field).value = tools.ustr(data.get(map_field)[1])
elif map_type in ("float", "integer"):
vevent.add(field).value = str(data.get(map_field))
elif map_type == "selection":
if not self.ical_get(field, 'mapping'):
vevent.add(field).value = (data[map_field].encode('utf8')).upper()
vevent.add(field).value = (tools.ustr(data[map_field])).upper()
else:
for key1, val1 in self.ical_get(field, 'mapping').items():
if val1 == data[map_field]:
@ -291,7 +295,7 @@ class CalDAV(object):
res = []
for child in parsedCal.getChildren():
if child.name.lower() in ('vevent', 'vtodo'):
vals = self.parse_ics(cr, uid, child)
vals = self.parse_ics(cr, uid, child, context=context)
else:
vals = {}
continue
@ -359,7 +363,7 @@ class Calendar(CalDAV, osv.osv):
if child.name.lower() in cal_children:
context.update({'model': cal_children[child.name.lower()]})
self.__attribute__ = get_attribute_mapping(cr, uid, child.name.lower(), context=context)
val = self.parse_ics(cr, uid, child)
val = self.parse_ics(cr, uid, child, cal_children=cal_children, context=context)
obj = self.pool.get(cal_children[child.name.lower()])
if hasattr(obj, 'check_import'):
obj.check_import(cr, uid, [val], context=context)
@ -638,7 +642,10 @@ class Attendee(CalDAV, osv.osv_memory):
'language': None, # Use: 0-1 Specify the language for text values in a property or property parameter.
}
def import_cal(self, cr, uid, ical_data):
def import_cal(self, cr, uid, ical_data, context=None):
ctx = context.copy()
ctx.update({'model': context.get('model', None)})
self.__attribute__ = get_attribute_mapping(cr, uid, self._calname, ctx)
for para in ical_data.params:
if para.lower() == 'cn':
self.ical_set(para.lower(), ical_data.params[para][0]+':'+ \
@ -652,7 +659,9 @@ class Attendee(CalDAV, osv.osv_memory):
def export_cal(self, cr, uid, model, attendee_ids, vevent, context={}):
attendee_object = self.pool.get(model)
self.__attribute__ = get_attribute_mapping(cr, uid, self._calname, context)
ctx = context.copy()
ctx.update({'model': model})
self.__attribute__ = get_attribute_mapping(cr, uid, self._calname, ctx)
for attendee in attendee_object.read(cr, uid, attendee_ids, []):
attendee_add = vevent.add('attendee')
cn_val = ''
@ -662,9 +671,10 @@ class Attendee(CalDAV, osv.osv_memory):
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']])]
if a_val['field'] == 'cn':
if a_val['field'] == 'cn' and attendee[a_val['field']]:
cn_val = [str(attendee[a_val['field']])]
attendee_add.params['CN'] = cn_val
if cn_val:
attendee_add.params['CN'] = cn_val
return vevent
Attendee()

View File

@ -215,6 +215,15 @@ request was delegated to"),
def do_decline(self, cr, uid, ids, context=None, *args):
self.write(cr, uid, ids, {'state': 'declined'}, context)
def create(self, cr, uid, vals, context={}):
if not vals.get("email") and vals.get("cn"):
cnval = vals.get("cn").split(':')
email = filter(lambda x:x.__contains__('@'), cnval)
vals['email'] = email[0]
vals['cn'] = vals.get("cn")
res = super(calendar_attendee, self).create(cr, uid, vals, context)
return res
calendar_attendee()
class res_alarm(osv.osv):

View File

@ -260,5 +260,9 @@
<field name="target">new</field>
</record>
<menuitem id="menu_attendee_invitations"
name="My Invitations" parent="base_calendar.menu_calendar_configuration"
sequence="10" action="action_view_attendee_form" />
</data>
</openerp>