I am trying to create an activity when a stage change occurs but keep getting TypeError: 'NewId' object is not iterable
.
I figured out that @onchange
creates a new object which replaces self
and I am guessing this is the errors cause.
Here is my code:
class ProjectSetAndDateType(models.Model):
_inherit = 'project.task.type'
last_stage = fields.Boolean(string="Fertigstellungsstufe")
class ProjectSetEndDate(models.Model):
_inherit = 'project.task'
@api.onchange('stage_id')
def _set_end_date(self):
if self.stage_id.last_stage:
self.kanban_state = "done"
self.date_finished = datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S')
activity_deadline = datetime.now() + timedelta(days=30)
data = {
'res_id': self._origin.id,
'res_model': 'project.task',
'res_model_id': self.env['ir.model'].search([('model', '=', 'project.task')]).id,
'user_id': self._origin.project_id.user_id.id,
'summary': 'Aufgabe archivieren nach Fertigstellung',
'activity_type_id': self.env.ref('project_set_end_date.mail_set_end_date_archive').id,
'date_deadline': activity_deadline
}
self.env['mail.activity'].create(data)
'NewId' object is an recordset, when you are creating any new record odoo will store it in newid class , not in database and you are trying to write the kanban_state, date_finished in the record which is not yet created. I suggest you to change the logic and rewrite this code on the write or create method,
Note: make sure you don't create any record on onchange method because it is very risky and not user friendly.