=== modified file 'base_calendar/base_calendar.py' --- base_calendar/base_calendar.py 2013-09-17 09:39:06 +0000 +++ base_calendar/base_calendar.py 2013-10-08 09:28:54 +0000 @@ -397,7 +397,7 @@ def copy(self, cr, uid, id, default=None, context=None): raise osv.except_osv(_('Warning!'), _('You cannot duplicate a calendar attendee.')) - + def onchange_partner_id(self, cr, uid, ids, partner_id,context=None): """ Make entry on email and availbility on change of partner_id field. @@ -408,12 +408,12 @@ @param context: a standard dictionary for contextual values @return: dictionary of values which put value in email and availability fields """ - + if not partner_id: return {'value': {'email': ''}} partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) return {'value': {'email': partner.email}} - + def get_ics_file(self, cr, uid, event_obj, context=None): """ Returns iCalendar file for the event invitation. @@ -1364,6 +1364,18 @@ data['end_type'] = 'end_date' return data + def _multikeysort(self, items, columns): + from operator import itemgetter + comparers = [ ((itemgetter(col[1:].strip()), -1) if col.startswith('-') else (itemgetter(col.strip()), 1)) for col in columns] + def comparer(left, right): + for fn, mult in comparers: + result = cmp(fn(left), fn(right)) + if result: + return mult * result + else: + return 0 + return sorted(items, cmp=comparer) + def search(self, cr, uid, args, offset=0, limit=0, order=None, context=None, count=False): if context is None: context = {} @@ -1382,6 +1394,19 @@ res = super(calendar_event, self).search(cr, uid, new_args, offset=0, limit=0, order=order, context=context, count=False) if context.get('virtual_id', True): res = self.get_recurrent_ids(cr, uid, res, args, limit, context=context) + if order: + order = order.split(',') + sortby = {} + for o in order: + spl = o.split() + sortby[spl[0]] = spl[1] + ordered = [] + fields = sortby.keys() + for id in res: + ordered.append(self.read(cr, uid, id, fields=fields, context=context)) + res = self._multikeysort(ordered, [key.split()[0] if sortby[key.split()[0]] == 'ASC' else '-%s' % key.split()[0] for key in order]) + res = [x['id'] for x in res] + if count: return len(res) elif limit: