Ejemplo n.º 1
0
 public function avanzar($usuarios_a_asignar = null)
 {
     Doctrine_Manager::connection()->beginTransaction();
     //Cerramos esta etapa
     $this->cerrar();
     $tp = $this->getTareasProximas();
     if ($tp->estado != 'sincontinuacion') {
         if ($tp->estado == 'completado') {
             if ($this->Tramite->getEtapasActuales()->count() == 0) {
                 $this->Tramite->cerrar();
             }
         } else {
             if ($tp->estado == 'pendiente') {
                 $tareas_proximas = $tp->tareas;
                 foreach ($tareas_proximas as $tarea_proxima) {
                     $etapa = new Etapa();
                     $etapa->tramite_id = $this->Tramite->id;
                     $etapa->tarea_id = $tarea_proxima->id;
                     $etapa->pendiente = 1;
                     $etapa->save();
                     $usuario_asignado_id = NULL;
                     if ($tarea_proxima->asignacion == 'ciclica') {
                         $usuarios_asignables = $etapa->getUsuarios();
                         $usuario_asignado_id = $usuarios_asignables[0]->id;
                         $ultimo_usuario = $tarea_proxima->getUltimoUsuarioAsignado($this->Tramite->Proceso->id);
                         if ($ultimo_usuario) {
                             foreach ($usuarios_asignables as $key => $u) {
                                 if ($u->id == $ultimo_usuario->id) {
                                     $usuario_asignado_id = $usuarios_asignables[($key + 1) % $usuarios_asignables->count()]->id;
                                     break;
                                 }
                             }
                         }
                     } else {
                         if ($tarea_proxima->asignacion == 'manual') {
                             $usuario_asignado_id = $usuarios_a_asignar[$tarea_proxima->id];
                         } else {
                             if ($tarea_proxima->asignacion == 'usuario') {
                                 $regla = new Regla($tarea_proxima->asignacion_usuario);
                                 $u = $regla->evaluar($this->id);
                                 $usuario_asignado_id = $u;
                             }
                         }
                     }
                     //Para mas adelante poder calcular como hacer las uniones
                     if ($tp->conexion == 'union') {
                         $etapa->etapa_ancestro_split_id = null;
                     } else {
                         if ($tp->conexion == 'paralelo' || $tp->conexion == 'paralelo_evaluacion') {
                             $etapa->etapa_ancestro_split_id = $this->id;
                         } else {
                             $etapa->etapa_ancestro_split_id = $this->etapa_ancestro_split_id;
                         }
                     }
                     $etapa->save();
                     $etapa->vencimiento_at = $etapa->calcularVencimiento();
                     $etapa->save();
                     if ($usuario_asignado_id) {
                         $etapa->asignar($usuario_asignado_id);
                     } else {
                         $etapa->notificarTareaPendiente();
                     }
                 }
                 $this->Tramite->updated_at = date("Y-m-d H:i:s");
                 $this->Tramite->save();
             }
         }
     }
     Doctrine_Manager::connection()->commit();
 }