2009-12-18 13:44:31 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2009-12-04 08:40:21 +00:00
|
|
|
##############################################################################
|
2009-12-18 13:44:31 +00:00
|
|
|
#
|
2009-12-04 08:40:21 +00:00
|
|
|
# OpenERP, Open Source Management Solution
|
2009-12-18 13:44:31 +00:00
|
|
|
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
2009-12-04 08:40:21 +00:00
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
2009-12-18 13:44:31 +00:00
|
|
|
# it under the terms of the GNU Affero General Public License as
|
|
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
|
|
# License, or (at your option) any later version.
|
2009-12-04 08:40:21 +00:00
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2009-12-18 13:44:31 +00:00
|
|
|
# GNU Affero General Public License for more details.
|
2009-12-04 08:40:21 +00:00
|
|
|
#
|
2009-12-18 13:44:31 +00:00
|
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2009-12-04 08:40:21 +00:00
|
|
|
#
|
|
|
|
##############################################################################
|
|
|
|
|
2009-12-23 05:47:42 +00:00
|
|
|
from caldav import common
|
2009-12-04 08:40:21 +00:00
|
|
|
from dateutil.rrule import *
|
2009-12-22 13:14:25 +00:00
|
|
|
from osv import fields, osv
|
2009-12-08 14:19:27 +00:00
|
|
|
import datetime
|
2009-12-22 13:14:25 +00:00
|
|
|
import base64
|
|
|
|
import re
|
|
|
|
import time
|
2009-12-04 08:40:21 +00:00
|
|
|
import tools
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
class crm_case(osv.osv):
|
|
|
|
_name = 'crm.case'
|
|
|
|
_inherit = 'crm.case'
|
|
|
|
_description = 'Cases'
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
__attribute__ = {
|
|
|
|
'class' : {'field':'class', 'type':'text'},
|
|
|
|
'created' : {'field':'create_date', 'type':'datetime'}, # keep none for now
|
|
|
|
'description' : {'field':'description', 'type':'text'},
|
|
|
|
'dtstart' : {'field':'date', 'type':'datetime'},
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
#'last-mod' : {'field':'write_date', 'type':'datetime'},
|
2009-12-04 08:40:21 +00:00
|
|
|
'location' : {'field':'location', 'type':'text'},
|
2009-12-15 13:43:55 +00:00
|
|
|
# 'organizer' : {'field':'partner_id', 'sub-field':'name', 'type':'many2one'},
|
2009-12-04 08:40:21 +00:00
|
|
|
'priority' : {'field':'priority', 'type':'int'},
|
|
|
|
'dtstamp' : {'field':'date', 'type':'datetime'},
|
|
|
|
'seq' : None,
|
|
|
|
'status' : {'field':'state', 'type':'selection', 'mapping' : {'TENTATIVE' : 'draft', \
|
|
|
|
'CONFIRMED' : 'open' , 'CANCELLED' : 'cancel'}},
|
|
|
|
'summary' : {'field':'name', 'type':'text'},
|
|
|
|
'transp' : {'field':'transparent', 'type':'text'},
|
|
|
|
'uid' : {'field':'id', 'type':'text'},
|
|
|
|
'url' : {'field':'caldav_url', 'type':'text'},
|
|
|
|
'recurid' : None,
|
|
|
|
# 'attach' : {'field':'attachment_ids', 'sub-field':'datas', 'type':'list'},
|
2009-12-14 11:07:43 +00:00
|
|
|
'attendee' : {'field':'attendees', 'type':'many2many', 'object' : 'crm.caldav.attendee'},
|
2009-12-04 08:40:21 +00:00
|
|
|
# 'categories' : {'field':'categ_id', 'sub-field':'name'},
|
2009-12-23 05:47:42 +00:00
|
|
|
# 'categories' : {'field':None , 'sub-field':'name', 'type':'text'},
|
2009-12-04 08:40:21 +00:00
|
|
|
'comment' : None,
|
|
|
|
'contact' : None,
|
2009-12-22 13:14:25 +00:00
|
|
|
'exdate' : {'field':'exdate', 'type':'datetime'},
|
|
|
|
'exrule' : {'field':'exrule', 'type':'text'},
|
2009-12-04 08:40:21 +00:00
|
|
|
'rstatus' : None,
|
|
|
|
'related' : None,
|
|
|
|
'resources' : None,
|
|
|
|
'rdate' : None,
|
|
|
|
'rrule' : {'field':'rrule', 'type':'text'},
|
|
|
|
'x-openobject-id' : {'field':'id', 'type':'text'},
|
|
|
|
'x-openobject-model' : {'value':_name, 'type':'text'},
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
# 'duration' : {'field':'duration'},
|
2009-12-04 08:40:21 +00:00
|
|
|
'dtend' : {'field':'date_closed', 'type':'datetime'},
|
2009-12-15 13:43:55 +00:00
|
|
|
'valarm' : {'field':'alarm_id', 'type':'many2one', 'object' : 'crm.caldav.alarm'},
|
2009-12-04 08:40:21 +00:00
|
|
|
}
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def _get_location(self, cr, uid, ids, name, arg, context=None):
|
|
|
|
res = {}
|
|
|
|
for case in self.browse(cr, uid, ids):
|
|
|
|
if case.partner_address_id:
|
|
|
|
add = case.partner_address_id
|
|
|
|
st = add.street and add.street+',\n' or ''
|
|
|
|
st2 = add.street2 and add.street2+',\n' or ''
|
|
|
|
ct = add.city and add.city+',\n' or ''
|
|
|
|
zip = add.zip and add.zip or ''
|
|
|
|
country = add.country_id and add.country_id.name+',\n' or ''
|
|
|
|
res[case.id] = st + st2+ ct + country + zip
|
|
|
|
else:
|
|
|
|
res[case.id] = ''
|
|
|
|
return res
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def _get_rdates(self, cr, uid, ids, name, arg, context=None):
|
|
|
|
res = {}
|
|
|
|
context.update({'read':True})
|
2009-12-22 13:14:25 +00:00
|
|
|
for case in self.read(cr, uid, ids, ['date', 'rrule', 'exdate', 'exrule'], context=context):
|
2009-12-04 08:40:21 +00:00
|
|
|
if case['rrule']:
|
2009-12-22 13:14:25 +00:00
|
|
|
rule = case['rrule']
|
|
|
|
exdate = case['exdate'] and case['exdate'].split(',') or []
|
2009-12-04 08:40:21 +00:00
|
|
|
event_obj = self.pool.get('caldav.event')
|
|
|
|
res[case['id']] = str(event_obj.get_recurrent_dates(str(rule), exdate, case['date']))
|
|
|
|
return res
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
_columns = {
|
|
|
|
'class' : fields.selection([('PUBLIC', 'PUBLIC'), ('PRIVATE', 'PRIVATE'), \
|
|
|
|
('CONFIDENTIAL', 'CONFIDENTIAL')], 'Class'),
|
2009-12-15 09:19:34 +00:00
|
|
|
'location' : fields.function(_get_location, method=True, store=True, \
|
|
|
|
string='Location', type='text'),
|
2009-12-04 08:40:21 +00:00
|
|
|
'freebusy' : fields.text('FreeBusy'),
|
2009-12-23 05:47:42 +00:00
|
|
|
'transparent' : fields.selection([('TRANSPARENT', 'TRANSPARENT'), \
|
|
|
|
('OPAQUE', 'OPAQUE')], 'Trensparent'),
|
2009-12-04 08:40:21 +00:00
|
|
|
'caldav_url' : fields.char('Caldav URL', size=34),
|
2009-12-22 13:14:25 +00:00
|
|
|
'exdate' : fields.text('Exception Date/Times', help="This property defines the list\
|
|
|
|
of date/time exceptions for arecurring calendar component."),
|
|
|
|
'exrule' : fields.text('Exception Rule', help="defines a rule or repeating pattern\
|
|
|
|
for anexception to a recurrence set"),
|
2009-12-04 08:40:21 +00:00
|
|
|
'rrule' : fields.text('Recurrent Rule'),
|
|
|
|
'rdates' : fields.function(_get_rdates, method=True, string='Recurrent Dates', \
|
|
|
|
store=True, type='text'),
|
2009-12-15 09:19:34 +00:00
|
|
|
'attendees': fields.many2many('crm.caldav.attendee', 'crm_attendee_rel', 'case_id', \
|
|
|
|
'attendee_id', 'Attendees'),
|
|
|
|
'alarm_id' : fields.many2one('crm.caldav.alarm', 'Alarm'),
|
2009-12-04 08:40:21 +00:00
|
|
|
}
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
_defaults = {
|
|
|
|
'caldav_url': lambda *a: 'http://localhost:8080',
|
|
|
|
'class': lambda *a: 'PUBLIC',
|
|
|
|
'transparent': lambda *a: 'OPAQUE',
|
|
|
|
}
|
2009-12-08 14:19:27 +00:00
|
|
|
|
|
|
|
|
2009-12-15 09:19:34 +00:00
|
|
|
def run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, \
|
|
|
|
context=None):
|
2009-12-08 14:19:27 +00:00
|
|
|
if not context:
|
2009-12-22 13:14:25 +00:00
|
|
|
context = {}
|
2009-12-08 14:19:27 +00:00
|
|
|
cr.execute('select c.id as id, c.date as date, alarm.id as alarm_id, alarm.name as name,\
|
|
|
|
alarm.trigger_interval, alarm.trigger_duration, alarm.trigger_related, \
|
|
|
|
alarm.trigger_occurs from crm_case c \
|
|
|
|
join crm_caldav_alarm alarm on (alarm.id=c.alarm_id) \
|
2009-12-15 09:19:34 +00:00
|
|
|
where alarm_id is not null and alarm.active=True')
|
2009-12-08 14:19:27 +00:00
|
|
|
case_with_alarm = cr.dictfetchall()
|
|
|
|
case_obj = self.pool.get('crm.case')
|
|
|
|
attendee_obj = self.pool.get('crm.caldav.attendee')
|
|
|
|
mail_to = []
|
|
|
|
for alarmdata in case_with_alarm:
|
|
|
|
dtstart = datetime.datetime.strptime(alarmdata['date'], "%Y-%m-%d %H:%M:%S")
|
2009-12-17 06:26:30 +00:00
|
|
|
if alarmdata['trigger_interval'] == 'DAYS':
|
|
|
|
delta = datetime.timedelta(days=alarmdata['trigger_duration'])
|
|
|
|
if alarmdata['trigger_interval'] == 'HOURS':
|
|
|
|
delta = datetime.timedelta(hours=alarmdata['trigger_duration'])
|
|
|
|
if alarmdata['trigger_interval'] == 'MINUTES':
|
|
|
|
delta = datetime.timedelta(minutes=alarmdata['trigger_duration'])
|
|
|
|
alarm_time = dtstart + (alarmdata['trigger_occurs']== 'AFTER' and delta or -delta)
|
2009-12-08 14:19:27 +00:00
|
|
|
if datetime.datetime.now() >= alarm_time:
|
2009-12-16 06:52:41 +00:00
|
|
|
case_val = case_obj.browse(cr, uid, alarmdata.get('id'), context)[0]
|
2009-12-08 14:19:27 +00:00
|
|
|
for att in case_val.attendees:
|
2009-12-16 06:52:41 +00:00
|
|
|
if att.cn.rsplit(':')[-1]:
|
|
|
|
mail_to.append(att.cn.rsplit(':')[-1])
|
2009-12-08 14:19:27 +00:00
|
|
|
if mail_to:
|
|
|
|
sub = 'Event Reminder for ' + case_val.name or ''
|
2009-12-15 09:19:34 +00:00
|
|
|
body = (case_val.name or '')+ '\n\t' + (case_val.description or '') + '\n\nEvent time: ' \
|
|
|
|
+(case_val.date) + '\n\nLocation: ' + (case_val.location or '') + \
|
2009-12-08 14:19:27 +00:00
|
|
|
'\n\nMembers Details: ' + '\n'.join(mail_to)
|
|
|
|
tools.email_send(
|
2009-12-15 09:19:34 +00:00
|
|
|
case_val.user_id.address_id.email,
|
|
|
|
mail_to,
|
|
|
|
sub,
|
2009-12-08 14:19:27 +00:00
|
|
|
body
|
|
|
|
)
|
|
|
|
cr.execute('update crm_caldav_alarm set active=False\
|
|
|
|
where id = %s' % alarmdata['alarm_id'])
|
|
|
|
cr.commit()
|
|
|
|
return True
|
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def export_cal(self, cr, uid, ids, context={}):
|
2009-12-07 14:02:31 +00:00
|
|
|
crm_data = self.read(cr, uid, ids, [], context ={'read' :True})
|
2009-12-04 08:40:21 +00:00
|
|
|
event_obj = self.pool.get('caldav.event')
|
2009-12-16 14:16:20 +00:00
|
|
|
event_obj.__attribute__.update(self.__attribute__)
|
|
|
|
|
|
|
|
attendee_obj = self.pool.get('caldav.attendee')
|
|
|
|
crm_attendee = self.pool.get('crm.caldav.attendee')
|
|
|
|
attendee_obj.__attribute__.update(crm_attendee.__attribute__)
|
|
|
|
|
|
|
|
alarm_obj = self.pool.get('caldav.alarm')
|
|
|
|
crm_alarm = self.pool.get('crm.caldav.alarm')
|
|
|
|
alarm_obj.__attribute__.update(crm_alarm.__attribute__)
|
|
|
|
|
|
|
|
ical = event_obj.export_ical(cr, uid, crm_data)
|
|
|
|
caendar_val = ical.serialize()
|
|
|
|
caendar_val = caendar_val.replace('"', '').strip()
|
|
|
|
return caendar_val
|
2009-12-04 08:40:21 +00:00
|
|
|
|
|
|
|
def import_cal(self, cr, uid, ids, data, context={}):
|
|
|
|
file_content = base64.decodestring(data['form']['file_path'])
|
|
|
|
event_obj = self.pool.get('caldav.event')
|
|
|
|
event_obj.__attribute__.update(self.__attribute__)
|
2009-12-22 13:14:25 +00:00
|
|
|
|
2009-12-14 11:07:43 +00:00
|
|
|
attendee_obj = self.pool.get('caldav.attendee')
|
|
|
|
crm_attendee = self.pool.get('crm.caldav.attendee')
|
|
|
|
attendee_obj.__attribute__.update(crm_attendee.__attribute__)
|
|
|
|
|
2009-12-15 13:43:55 +00:00
|
|
|
alarm_obj = self.pool.get('caldav.alarm')
|
|
|
|
crm_alarm = self.pool.get('crm.caldav.alarm')
|
|
|
|
alarm_obj.__attribute__.update(crm_alarm.__attribute__)
|
2009-12-14 11:07:43 +00:00
|
|
|
vals = event_obj.import_ical(cr, uid, file_content)
|
2009-12-21 09:49:00 +00:00
|
|
|
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)}
|
2009-12-04 08:40:21 +00:00
|
|
|
|
|
|
|
def search(self, cr, uid, args, offset=0, limit=None, order=None,
|
|
|
|
context=None, count=False):
|
|
|
|
res = super(crm_case, self).search(cr, uid, args, offset,
|
|
|
|
limit, order, context, count)
|
|
|
|
return res
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def write(self, cr, uid, ids, vals, context=None):
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
new_ids = []
|
|
|
|
for id in ids:
|
2009-12-23 05:47:42 +00:00
|
|
|
id = common.caldevIDs2readIDs(id)
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
if not id in new_ids:
|
|
|
|
new_ids.append(id)
|
|
|
|
if 'case_id' in vals :
|
2009-12-23 05:47:42 +00:00
|
|
|
vals['case_id'] = common.caldevIDs2readIDs(vals['case_id'])
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
res = super(crm_case, self).write(cr, uid, new_ids, vals, context=context)
|
2009-12-04 08:40:21 +00:00
|
|
|
return res
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def browse(self, cr, uid, select, context=None, list_class=None, fields_process={}):
|
2009-12-15 09:19:34 +00:00
|
|
|
if not isinstance(select, list): select = [select]
|
2009-12-23 05:47:42 +00:00
|
|
|
select = map(lambda x:common.caldevIDs2readIDs(x), select)
|
2009-12-04 08:40:21 +00:00
|
|
|
return super(crm_case, self).browse(cr, uid, select, context, list_class, fields_process)
|
|
|
|
|
2009-12-22 13:14:25 +00:00
|
|
|
def read(self, cr, uid, ids, fields=None, context={}, load='_classic_read'):
|
2009-12-04 08:40:21 +00:00
|
|
|
""" logic for recurrent event
|
|
|
|
example : 123-20091111170822"""
|
|
|
|
if context and context.has_key('read'):
|
2009-12-15 09:19:34 +00:00
|
|
|
return super(crm_case, self).read(cr, uid, ids, fields=fields, context=context, \
|
|
|
|
load=load)
|
2009-12-04 14:15:17 +00:00
|
|
|
if not type(ids) == list :
|
|
|
|
# Called from code
|
2009-12-23 05:47:42 +00:00
|
|
|
return super(crm_case, self).read(cr, uid, common.caldevIDs2readIDs(ids), \
|
|
|
|
fields=fields, context=context, load=load)
|
2009-12-04 14:15:17 +00:00
|
|
|
else:
|
2009-12-23 05:47:42 +00:00
|
|
|
ids = map(lambda x:common.caldevIDs2readIDs(x), ids)
|
2009-12-04 08:40:21 +00:00
|
|
|
res = super(crm_case, self).read(cr, uid, ids, fields=fields, context=context, load=load)
|
|
|
|
read_ids = ",".join([str(x) for x in ids])
|
2009-12-09 04:47:34 +00:00
|
|
|
if not read_ids:
|
|
|
|
return []
|
2009-12-04 08:40:21 +00:00
|
|
|
cr.execute('select id,rrule,rdates from crm_case where id in (%s)' % read_ids)
|
|
|
|
rrules = filter(lambda x: not x['rrule']==None, cr.dictfetchall())
|
|
|
|
rdates = []
|
2009-12-04 14:15:17 +00:00
|
|
|
if not rrules:
|
|
|
|
return res
|
|
|
|
result = res + []
|
2009-12-04 08:40:21 +00:00
|
|
|
for data in rrules:
|
|
|
|
if data['rrule'] and data['rdates']: # delete 2nd condition at last
|
|
|
|
rdates = eval(data['rdates'])
|
|
|
|
for res_temp in res:
|
|
|
|
if res_temp['id'] == data['id']:
|
|
|
|
val = res_temp
|
|
|
|
if rdates:
|
|
|
|
result.remove(val)
|
|
|
|
|
|
|
|
for rdate in rdates:
|
|
|
|
idval = (re.compile('\d')).findall(rdate)
|
|
|
|
val['date'] = rdate
|
|
|
|
id = str(val['id']).split('-')[0]
|
|
|
|
val['id'] = id + '-' + ''.join(idval)
|
|
|
|
val1 = val.copy()
|
|
|
|
result += [val1]
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
return result
|
|
|
|
|
|
|
|
def copy(self, cr, uid, id, default=None, context={}):
|
2009-12-23 05:47:42 +00:00
|
|
|
return super(crm_case, self).copy(cr, uid, common.caldevIDs2readIDs(id), \
|
|
|
|
default, context)
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
def unlink(self, cr, uid, ids, context=None):
|
|
|
|
#TODO: Change RRULE
|
|
|
|
for id in ids:
|
|
|
|
if len(str(id).split('-')) > 1:
|
2009-12-15 09:19:34 +00:00
|
|
|
date_new = time.strftime("%Y-%m-%d %H:%M:%S", \
|
|
|
|
time.strptime(str(str(id).split('-')[1]), "%Y%m%d%H%M%S"))
|
2009-12-23 05:47:42 +00:00
|
|
|
for record in self.read(cr, uid, [common.caldevIDs2readIDs(id)], \
|
2009-12-22 13:14:25 +00:00
|
|
|
['date', 'rdates', 'rrule', 'exdate']):
|
|
|
|
exdate = (record['exdate'] and (record['exdate'] + ',' ) or '') + \
|
|
|
|
''.join((re.compile('\d')).findall(date_new)) + 'Z'
|
2009-12-04 08:40:21 +00:00
|
|
|
if record['date'] == date_new:
|
2009-12-23 05:47:42 +00:00
|
|
|
self.write(cr, uid, [common.caldevIDs2readIDs(id)], {'exdate' : exdate})
|
2009-12-04 08:40:21 +00:00
|
|
|
else:
|
|
|
|
return super(crm_case, self).unlink(cr, uid, ids)
|
2009-12-14 11:07:43 +00:00
|
|
|
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
def create(self, cr, uid, vals, context={}):
|
|
|
|
if 'case_id' in vals:
|
2009-12-23 05:47:42 +00:00
|
|
|
vals['case_id'] = common.caldevIDs2readIDs(vals['case_id'])
|
[IMP,FIX]:improve crm_calendar to handle virtual ids as string for reports,wizard,attachment,browse,read,search,ir_values(set,get),unlink,create,copy,write(partial) and fixed export_ics procedure
bzr revid: nch@tinyerp.com-20091210123425-y175qt0b3bgtxix9
2009-12-10 12:34:25 +00:00
|
|
|
return super(crm_case, self).create(cr, uid, vals, context)
|
|
|
|
|
2009-12-04 08:40:21 +00:00
|
|
|
crm_case()
|
|
|
|
|
|
|
|
|
2009-12-18 13:44:31 +00:00
|
|
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|