Skip to Content
Menu
This question has been flagged
3032 Views

I have extended project.task to add task dependency, so one task can only start after that another one has finished. I´ve added a new field with the id of the previous task. When the end_date of a task is changed, if another task depends of this task, I have to update the start and end date of it. I´ve tried to do it by modifying the write method, it works but you have to reload the page to see the changes, and want it to be automatically. (The write method has another function that converts datetime to date and saves it in another field) Any suggestions?

The code:

   def _x_probar(self, cr, uid, ids, vals):
        #MVARELA - Verifico si se modifico la fecha final de la tarea (x_date_fin)
        if vals.get('date_end'):
            #MVARELA - Obtengo la fecha final
            for rec in self.browse(cr, uid, ids):
                id_reg = str(rec.id)
                fecha_final_pred = rec.date_end
            #MVARELA - Busco las tareas que tienen como predecesora a la que se le modifico la fecha final
            tareas = self.pool.get('project.task')
            ids2 = tareas.search(cr, uid, [('x_id_predecesora', '=', rec.id)])
            #MVARELA para cada una, corremos las fechas de la tarea
            #la fecha inicial es la fecha final de la predecesora, y la fecha final se corre en relacion a la inicial
            for task in self.browse(cr, uid, ids2):
                x_start = datetime.strptime(task.date_start, '%Y-%m-%d %H:%M:%S')
                x_end = datetime.strptime(task.date_end, '%Y-%m-%d %H:%M:%S')
                duracion = x_end - x_start
                self.write(cr, uid, [task.id], {'date_start': fecha_final_pred, 'date_end': datetime.strptime(fecha_final_pred, '%Y-%m-%d %H:%M:%S') + duracion}, context=None)
        return True


    def write(self, cr, uid, ids, vals, context=None):
        #MVARELA
        super(x_obvio_task, self).write(cr, uid, ids, vals, context=context)
        if isinstance(ids, (int, long)):
            ids = [ids]
        for t in self.browse(cr, uid, ids, context=context):
            if t.x_solo_fecha == True:
                if t.x_date_ini != False:
                    fecha_ini = datetime.strptime(t.x_date_ini + ' 09:00', '%Y-%m-%d %H:%M')
                    fecha_local_ini = fields.datetime.context_timestamp(cr, uid, fecha_ini, context=context) 
                    fecha_local_ini = fecha_local_ini.replace(tzinfo=None)
                    aux_ini = fecha_ini - fecha_local_ini
                    vals.update({'date_start': fecha_ini + aux_ini})
                if t.x_date_fin != False:
                    fecha_fin = datetime.strptime(t.x_date_fin + ' 18:00', '%Y-%m-%d %H:%M')
                    fecha_local_fin = fields.datetime.context_timestamp(cr, uid, fecha_fin, context=context) 
                    fecha_local_fin = fecha_local_fin.replace(tzinfo=None)
                    aux_fin = fecha_fin - fecha_local_fin
                    vals.update({'date_end': fecha_fin + aux_fin})
            self._x_probar(cr, uid, ids, vals)
            super(x_obvio_task, self).write(cr, uid, ids, vals, context=context)
            return True
Avatar
Discard