diff --git a/addons/caldav/calendar.py b/addons/caldav/calendar.py index ee0522c23d0..6ec234a6f4b 100644 --- a/addons/caldav/calendar.py +++ b/addons/caldav/calendar.py @@ -100,6 +100,12 @@ class CalDAV(object): else: return self.__attribute__.get(name, None) + def ical_reset(self, type): + for name in self.__attribute__: + if self.__attribute__[name]: + self.__attribute__[name][type] = None + return True + def export_ical(self, cr, uid, datas, vobj=None): ical = vobject.iCalendar() for data in datas: @@ -129,7 +135,7 @@ class CalDAV(object): def import_ical(self, cr, uid, ical_data): parsedCal = vobject.readOne(ical_data) att_data = [] - todo_data = [] + res = [] for child in parsedCal.getChildren(): for cal_data in child.getChildren(): if cal_data.name.lower() == 'attendee': @@ -144,8 +150,10 @@ class CalDAV(object): continue if cal_data.name.lower() in self.__attribute__: self.ical_set(cal_data.name.lower(), cal_data.value, 'value') - vals = map_data(cr, uid, self) - return vals + vals = map_data(cr, uid, self) + if vals : res.append(vals) + self.ical_reset('value') + return res class Calendar(CalDAV, osv.osv_memory): diff --git a/addons/crm/crm_calendar.py b/addons/crm/crm_calendar.py index 730184aab2c..4ce6b6038e5 100644 --- a/addons/crm/crm_calendar.py +++ b/addons/crm/crm_calendar.py @@ -204,15 +204,15 @@ class crm_case(osv.osv): alarm_obj = self.pool.get('caldav.alarm') crm_alarm = self.pool.get('crm.caldav.alarm') alarm_obj.__attribute__.update(crm_alarm.__attribute__) - vals = event_obj.import_ical(cr, uid, file_content) - # TODO: Select proper section - section_id = self.pool.get('crm.case.section').search(cr, uid, [])[0] - vals.update({'section_id' : section_id}) - vals.pop('id') - vals.pop('create_date') - case_id = self.create(cr, uid, vals) - return + for val in vals: + # TODO: Select proper section + section_id = self.pool.get('crm.case.section').search(cr, uid, [])[0] + val.update({'section_id' : section_id}) + val.pop('id') + val.pop('create_date') + case_id = self.create(cr, uid, val) + return {'count': len(vals)} def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): diff --git a/addons/crm/wizard/wizard_cal_export.py b/addons/crm/wizard/wizard_cal_export.py index 53b0f92fc64..08e9de56945 100644 --- a/addons/crm/wizard/wizard_cal_export.py +++ b/addons/crm/wizard/wizard_cal_export.py @@ -19,14 +19,9 @@ # ############################################################################## -import time -import tools import wizard -import os -import mx.DateTime import base64 import pooler -import vobject class crm_cal_export_wizard(wizard.interface): @@ -53,8 +48,8 @@ class crm_cal_export_wizard(wizard.interface): states = { 'init': { 'actions': [_process_export_ics], - 'result': {'type': 'form', 'arch':form1, 'fields':form1_fields, 'state': [('end', '_Cancel', 'gtk-cancel'), ('end', 'Ok', 'gtk-ok')]} - }, + 'result': {'type': 'form', 'arch':form1, 'fields':form1_fields, \ + 'state': [('end', '_Cancel', 'gtk-cancel'), ('end', 'Ok', 'gtk-ok')]}}, } crm_cal_export_wizard('caldav.crm.export') diff --git a/addons/crm/wizard/wizard_cal_import.py b/addons/crm/wizard/wizard_cal_import.py index 0898ec671e5..8784198a7d1 100644 --- a/addons/crm/wizard/wizard_cal_import.py +++ b/addons/crm/wizard/wizard_cal_import.py @@ -19,14 +19,8 @@ # ############################################################################## -import time -import tools import wizard -import os -import mx.DateTime -import base64 import pooler -import vobject class crm_cal_import_wizard(wizard.interface): @@ -40,25 +34,49 @@ class crm_cal_import_wizard(wizard.interface): 'file_path': { 'string': 'Select ICS file', 'type': 'binary', - 'required' : True, - 'filters' : '*.ics' + 'required': True, + 'filters': '*.ics' } } + display = ''' +
+ + ''' - def _process_import_ics(self, cr, uid, data, context=None): + display_fields = { + 'msg': { + 'string': '', + 'type': 'text', + 'readonly': True, + } + } + + def _process_imp_ics(self, cr, uid, data, context=None): case_obj = pooler.get_pool(cr.dbname).get('crm.case') - case_obj.import_cal(cr, uid, data['ids'], data, context) + vals = case_obj.import_cal(cr, uid, data['ids'], data, context) + if vals: + global cnt + cnt = vals['count'] return {} + def _result_set(self, cr, uid, data, context=None): + return {'msg': 'Imported %s Event(s)' % cnt} + states = { 'init': { 'actions': [], - 'result': {'type': 'form', 'arch':form1, 'fields':form1_fields, 'state': [('end', '_Cancel', 'gtk-cancel'), ('open', '_Import', 'gtk-ok')]} + 'result': {'type': 'form', 'arch': form1, 'fields': form1_fields, \ + 'state': [('end', '_Cancel', 'gtk-cancel'), ('open', '_Import', 'gtk-ok')]} }, 'open': { 'actions': [], - 'result': {'type': 'action', 'action':_process_import_ics, 'state':'end'} - } + 'result': {'type': 'action', 'action': _process_imp_ics, 'state': 'display'} + }, + 'display': { + 'actions': [_result_set], + 'result': {'type': 'form', 'arch': display, 'fields': display_fields, \ + 'state': [('end', 'Ok', 'gtk-ok')]} + }, } crm_cal_import_wizard('caldav.crm.import') diff --git a/addons/project_calendar/project_calendar.py b/addons/project_calendar/project_calendar.py index 8f8c44c4f9d..593a3825c03 100644 --- a/addons/project_calendar/project_calendar.py +++ b/addons/project_calendar/project_calendar.py @@ -111,17 +111,13 @@ class project_task(osv.osv): alarm_obj.__attribute__.update(crm_alarm.__attribute__) vals = todo_obj.import_ical(cr, uid, file_content) - if not vals.has_key('duration'): - # 'Compute duration' - vals['planned_hours'] = 16 -# start = datetime.strptime(vals.get('date_start'), '%Y-%m-%d %H:%M:%S') -# end = datetime.strptime(vals.get('date_deadline'), '%Y-%m-%d %H:%M:%S') -# difference = float((end - start).seconds) / 3600 -## minutes, seconds = divmod(difference.seconds, 60) -## hours, minutes = divmod(minutes, 60) - vals.pop('id') - task_id = self.create(cr, uid, vals) - return + for val in vals: + if not val.has_key('duration'): + # 'Compute duration' + val['planned_hours'] = 16 + val.pop('id') + task_id = self.create(cr, uid, val) + return {'count': len(vals)} def export_cal(self, cr, uid, ids, context={}): task_data = self.read(cr, uid, ids, [], context ={'read': True}) diff --git a/addons/project_calendar/wizard/wizard_cal_export.py b/addons/project_calendar/wizard/wizard_cal_export.py index 600d80c9a05..430654d90f6 100644 --- a/addons/project_calendar/wizard/wizard_cal_export.py +++ b/addons/project_calendar/wizard/wizard_cal_export.py @@ -19,14 +19,9 @@ # ############################################################################## -import time -import tools import wizard -import os -import mx.DateTime import base64 import pooler -import vobject class project_cal_export_wizard(wizard.interface): diff --git a/addons/project_calendar/wizard/wizard_cal_import.py b/addons/project_calendar/wizard/wizard_cal_import.py index 7ca19bcee6e..ef99f75d09d 100644 --- a/addons/project_calendar/wizard/wizard_cal_import.py +++ b/addons/project_calendar/wizard/wizard_cal_import.py @@ -19,15 +19,8 @@ # ############################################################################## -import time -import tools import wizard -import os -import mx.DateTime -import base64 import pooler -import vobject - class project_cal_imp_wizard(wizard.interface): form1 = ''' @@ -44,22 +37,46 @@ class project_cal_imp_wizard(wizard.interface): 'filters': '*.ics' } } + display = ''' +
+ + ''' + display_fields = { + 'msg': { + 'string': '', + 'type': 'text', + 'readonly': True, + 'default': 'Imported %s Tasks' + } + } + def _process_imp_ics(self, cr, uid, data, context=None): task_obj = pooler.get_pool(cr.dbname).get('project.task') - task_obj.import_cal(cr, uid, data['ids'], data, context) + vals = task_obj.import_cal(cr, uid, data['ids'], data, context) + if vals: + global cnt + cnt = vals['count'] return {} + def _result_set(self, cr, uid, data, context=None): + return {'msg': 'Imported %s Task(s)' % cnt} + states = { 'init': { 'actions': [], - 'result': {'type': 'form', 'arch':form1, 'fields':form1_fields, \ + 'result': {'type': 'form', 'arch': form1, 'fields': form1_fields, \ 'state': [('end', '_Cancel', 'gtk-cancel'), ('open', '_Import', 'gtk-ok')]} }, 'open': { 'actions': [], - 'result': {'type': 'action', 'action':_process_imp_ics, 'state':'end'} - } + 'result': {'type': 'action', 'action': _process_imp_ics, 'state': 'display'} + }, + 'display': { + 'actions': [_result_set], + 'result': {'type': 'form', 'arch': display, 'fields': display_fields, \ + 'state': [('end', 'Ok', 'gtk-ok')]} + }, } project_cal_imp_wizard('caldav.project.import')