This question has been flagged
3303 Views

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

Avatar
Discard