I extends class calendar_event for add status with statusbar and add custom field. It's work perfectly BUT when i tried to remove a event i've a problem :
Traceback (most recent call last): File "/home/xxx/workspace/Odoo8/openerp/http.py", line 530, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/xxx/workspace/Odoo8/openerp/http.py", line 567, in dispatch result = self._call_function(**self.params) File "/home/xxx/workspace/Odoo8/openerp/http.py", line 303, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/service/model.py", line 113, in wrapper return f(dbname, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/http.py", line 300, in checked_call return self.endpoint(*a, **kw) File "/home/xxx/workspace/Odoo8/openerp/http.py", line 796, in __call__ return self.method(*args, **kw) File "/home/xxx/workspace/Odoo8/openerp/http.py", line 396, in response_wrap response = f(*args, **kw) File "/home/xxx/workspace/alpbureautique_openerp/openerp/addons/web/controllers/main.py", line 949, in call_kw return self._call_kw(model, method, args, kwargs) File "/home/xxx/workspace/alpbureautique_openerp/openerp/addons/web/controllers/main.py", line 941, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/xxx/workspace/alpbureautique_openerp/openerp/addons/calendar/calendar.py", line 1748, in unlink res = super(calendar_event, self).unlink(cr, uid, ids_to_unlink, context=context) File "/home/xxx/workspace/Odoo8/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/xxx/workspace/alpbureautique_openerp/openerp/addons/mail/mail_thread.py", line 445, in unlink res = super(mail_thread, self).unlink(cr, uid, ids, context=context) File "/home/xxx/workspace/Odoo8/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/models.py", line 3629, in unlink recs.recompute() File "/home/xxx/workspace/Odoo8/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/models.py", line 5647, in recompute name: rec[name] for name in names File "/home/xxx/workspace/Odoo8/openerp/models.py", line 5647, in <dictcomp> name: rec[name] for name in names File "/home/xxx/workspace/Odoo8/openerp/models.py", line 5535, in __getitem__ return self._fields[key].__get__(self, type(self)) File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 765, in __get__ self.determine_value(record) File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 843, in determine_value self.compute_value(recs) File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 823, in compute_value self._compute_value(records) File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 815, in _compute_value self.compute(records) File "/home/xxx/workspace/alpbureautique_openerp/openerp/cap_addons/cap_CRM/models/calendar_event.py", line 33, in _compute_participant if record.user_id.partner_id in record.partner_ids: File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 765, in __get__ self.determine_value(record) File "/home/xxx/workspace/Odoo8/openerp/fields.py", line 858, in determine_value record._prefetch_field(self) File "/home/xxx/workspace/Odoo8/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/models.py", line 3213, in _prefetch_field result = records.read(list(fnames), load='_classic_write') File "/home/xxx/workspace/Odoo8/openerp/api.py", line 239, in wrapper return new_api(self, *args, **kwargs) File "/home/xxx/workspace/Odoo8/openerp/api.py", line 546, in new_api result = method(self._model, cr, uid, self.ids, *args, **kwargs) File "/home/xxx/workspace/alpbureautique_openerp/openerp/addons/calendar/calendar.py", line 1688, in read res = real_data[real_id].copy() KeyError: 45
This error is raise when process pass in my function _compute_participant. Why this function is call ?
My code :
class calendar_event(osv.Model): _inherit = 'calendar.event' _columns = { 'cap_state':fields.selection( [('open', 'Confirmed'), ('cancel', 'Cancelled'), ('pending', 'Pending'), ('done', 'Held') ], string='Status', track_visibility='onchange', help='The status is set to Confirmed, when a case is created.\n' 'When the call is over, the status is set to Held.\n' 'If the callis not applicable anymore, the status can be set to Cancelled.'), 'participant_without_owner':fields.char(compute="_compute_participant",store=True), } _default = { 'cap_state':'open' } @api.depends('partner_ids', 'user_id') def _compute_participant(self): for record in self: if record.user_id.partner_id in record.partner_ids: participants = record.partner_ids - record.user_id.partner_id chaine = str("") for p in participants: chaine = chaine + p.name + ", " record.participant_without_owner = chaine def done_event_in_tree(self, cr, uid, ids, context=None): res = self.write(cr, uid, ids, {'cap_state': 'done'}, context) return res def create(self,cr, uid, vals, context=None): import datetime as dt if context is None: context = {} date_appel = datetime.strptime(vals['start_datetime'], '%Y-%m-%d %H:%M:%S') print type(date_appel) print type(dt.datetime.today()) if date_appel > dt.datetime.today(): vals['cap_state'] = 'open' else: vals['cap_state'] = 'done' vals['participant_without_owner'] = "" print vals res = super(calendar_event, self).create(cr, uid, vals, context=context) return res
Have you an idea ?
In odoo v8