/**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
 public function executeStrategy(sfWebRequest $request)
 {
     $user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'), null);
     $id_tree = $request->getParameter('id_tree');
     if ($user != null) {
         $criterio = new Criteria();
         $criterio->add(TreeScPeer::USER_ID, $user->getId());
         $criterio->add(TreeScPeer::ID, $id_tree);
         $criterio->add(TreeScPeer::FLAG, 1);
         $tree = TreeScPeer::doSelectOne($criterio);
         $criterio->clear();
         if (is_object($tree)) {
             $criterio->add(IndicatorsScPeer::TREE_ID, $tree->getId());
             $criterio->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
             $criterio->addAscendingOrderByColumn(IndicatorsScPeer::PREVIOUS_ID);
             $list_indicadores = IndicatorsScPeer::doSelect($criterio);
             $criterio->clear();
             $criterio->add(GrupoTrabajoScPeer::OWNER_ID, $user->getId());
             $list_grupos = GrupoTrabajoScPeer::doSelect($criterio);
             $criterio->clear();
             $criterio->add(PeriodoScPeer::FLAG, '%activo%', Criteria::LIKE);
             $list_periodo = PeriodoScPeer::doSelect($criterio);
             $this->lista_indicadores = $list_indicadores;
             $this->lista_grupos = $list_grupos;
             $this->lista_periodos = $list_periodo;
             $this->tree = $tree;
         } else {
             return sfView::ERROR;
         }
         return sfView::SUCCESS;
     } else {
         return sfView::ERROR;
     }
 }
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
 public function executeIndex(sfWebRequest $request)
 {
     $selector = $request->getParameter('select');
     $selector = $selector == "" ? 'execution' : $selector;
     $user = $this->getUser()->getAttribute('s_current_user', null);
     if ($user != null) {
         $this->selector = $selector;
         $criterio = new Criteria();
         $criterio->add(TreeScPeer::USER_ID, $user->getId());
         $criterio->add(TreeScPeer::FLAG, 1);
         $list_tree = TreeScPeer::doSelect($criterio);
         $this->list = $list_tree;
         $criteria = new Criteria();
         $criteria->add(TreeScPeer::USER_ID, $user->getId());
         $criteria->add(TreeScPeer::PRODUCCION, '%production%', Criteria::LIKE);
         $criteria->add(TreeScPeer::FLAG, 1);
         $user_tree = TreeScPeer::doSelect($criteria);
         $this->lista_tree_user = $user_tree;
         $criteria->clear();
         // indicadores a los cuales este usuario esta com responsables
         $criteria->add(IndicatorsScPeer::RESPONSABLE_ID, $user->getId());
         $criteria->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
         $criteria->add(TreeScPeer::FLAG, 1);
         $criteria->add(TreeScPeer::PRODUCCION, '%production%', Criteria::LIKE);
         $criteria->addJoin(TreeScPeer::ID, IndicatorsScPeer::TREE_ID);
         $criteria->addGroupByColumn(IndicatorsScPeer::TREE_ID);
         $user_indicators = IndicatorsScPeer::doSelect($criteria);
         $criteria->clear();
         $this->lista_indicators_user = $user_indicators;
         return sfView::SUCCESS;
     } else {
         return sfView::ERROR;
     }
 }
 public function updateDataIndicadores($idTree)
 {
     $criterio = new Criteria();
     $criterio->add(IndicatorsScPeer::TREE_ID, $idTree);
     $criterio->add(IndicatorsScPeer::ULTIMO_NODO, 1, Criteria::NOT_EQUAL);
     $listIndicadores = IndicatorsScPeer::doSelect($criterio);
     $countListIndicadores = IndicatorsScPeer::doCount($criterio);
     if ($countListIndicadores > 0) {
         foreach ($listIndicadores as $row) {
             $criteria = new Criteria();
             $criteria->add(DataIndicadoresPeer::INDICADOR_ID, $row->getId());
             DataIndicadoresPeer::doDelete($criteria);
         }
     }
     return array("success" => true, "message" => "exito");
 }
 public function haveChildren($treeBean = null)
 {
     if ($treeBean != null && is_object($treeBean)) {
         $criterio_busqueda = new Criteria();
         $criterio_busqueda->add(IndicatorsScPeer::TREE_ID, $treeBean->getId());
         $criterio_busqueda->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
         $listIndicator = IndicatorsScPeer::doSelect($criterio_busqueda);
         $countIndicator = IndicatorsScPeer::doCount($criterio_busqueda);
         if ($countIndicator > 0) {
             return array("success" => true, "message" => "{haveChildren}-success", "object" => $listIndicator);
         } else {
             return array("success" => false, "message" => "{haveChildren}-objeto no encontrado");
         }
     } else {
         return array("success" => false, "message" => "{haveChildren}-parametro invalido");
     }
 }
 private function fn_EliminarIndicadores($treeId)
 {
     /*Para eliminar indicadores por cada indicador*/
     $criteria = new Criteria();
     $criteria->add(IndicatorsScPeer::TREE_ID, $treeId);
     $listaIndicadores = IndicatorsScPeer::doSelect($criteria);
     if (count($listaIndicadores) > 0) {
         foreach ($listaIndicadores as $indicador) {
             //hay que buscar la dataIndicadores y eliminarlas
             $criteriaDataIndicadores = new Criteria();
             $criteriaDataIndicadores->add(DataIndicadoresPeer::INDICADOR_ID, $indicador->getId());
             DataIndicadoresPeer::doDelete($criteriaDataIndicadores);
             //hay que buscar las proyecciones y eliminarlas
             $criteriaProyecciones = new Criteria();
             $criteriaProyecciones->add(ProjectionsIndicatorsCsPeer::INDICADOR_ID, $indicador->getId());
             ProjectionsIndicatorsCsPeer::doDelete($criteriaProyecciones);
         }
         //acabado la eliminacion se procede a eliminar los indicadores
         IndicatorsScPeer::doDelete($criteria);
     }
 }
 private function return_array_children($id)
 {
     $indicadorBean = IndicatorsScPeer::retrieveByPK($id);
     if (is_object($indicadorBean)) {
         $criterio_indicadores = new Criteria();
         $criterio_indicadores->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
         $criterio_indicadores->add(IndicatorsScPeer::PARENTS, '%p' . $indicadorBean->getId() . 's%', Criteria::LIKE);
         $lista_indicadores = IndicatorsScPeer::doSelect($criterio_indicadores);
         if (count($lista_indicadores) > 0) {
             return $lista_indicadores;
         } else {
             return null;
         }
     } else {
         return null;
     }
 }
 public function executeEspejo_reportes($tree_id, $list_data_indicador, $fecha_update)
 {
     // $tree_id = $request->getParameter('idTree');
     // $user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'),null);
     if ($tree_id != 0) {
         $tree_espejo = TreeScPeer::retrieveByPK($tree_id);
         if (is_object($tree_espejo)) {
             try {
                 $conn = Propel::getConnection();
                 $conn->beginTransaction();
                 $tree_bean = new TmpTreeSc();
                 $tree_bean->setConfigureFlag($tree_espejo->getConfigureFlag());
                 $tree_bean->setFlag("ok");
                 $tree_bean->save();
                 $criterio = new Criteria();
                 $criterio->add(IndicatorsScPeer::TREE_ID, $tree_espejo->getId());
                 $criterio->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
                 $criterio->addAscendingOrderByColumn(IndicatorsScPeer::ID);
                 $list_indicadores = IndicatorsScPeer::doSelect($criterio);
                 $list_relation = null;
                 foreach ($list_indicadores as $row) {
                     $indicator_bean = new TmpDataReports();
                     $indicator_bean->setIndicadorId($row->getId());
                     $indicator_bean->setValorMinimo($row->getValorMinimo());
                     $indicator_bean->setValorDeseado($row->getValorDeseado());
                     $indicator_bean->setValorOptimo($row->getValorOptimo());
                     $indicator_bean->setTreeId($tree_bean->getId());
                     $indicator_bean->setUltimoNodo($row->getUltimoNodo());
                     $indicator_bean->setUpdateAt($fecha_update);
                     $indicator_bean->setFlag("ok");
                     if ($row->getPreviousId() == 0) {
                         $indicator_bean->setPreviousId(0);
                     } else {
                         $id_relation = $this->return_relation_id($list_relation, $row->getPreviousId());
                         $indicator_bean->setPreviousId($id_relation);
                     }
                     if ($row->getParents() != "") {
                         $parents = $this->return_parent_relation($list_relation, $row->getParents());
                         $indicator_bean->setParents($parents);
                     }
                     //preguntar si es ultmo idicador
                     //->getUltimoNodo()
                     //si es ultimo nodo tengo que pasar la data actual
                     //a  data que se esta creando ->
                     $indicator_bean->setConectoresConfigure($row->getConectoresConfigure());
                     $indicator_bean->save();
                     //actualizo el valor actual entregado
                     $relation = array('array' => '' . $row->getId() . '-' . $indicator_bean->getId() . '');
                     $list_relation[] = $relation;
                 }
                 foreach ($list_data_indicador as $obj_data) {
                     $criteria = new Criteria();
                     $id = $this->return_relation_id($list_relation, $obj_data->getIndicadorId());
                     $criteria->add(TmpDataReportsPeer::ID, $id);
                     $obj_update_tmp = TmpDataReportsPeer::doSelectOne($criteria);
                     $obj_update_tmp->setData($obj_data->getData());
                     $obj_update_tmp->save();
                 }
                 $conn->commit();
                 $conn = Propel::close();
                 // VOY A DEVOLVER UN ARREGLO CON DOS VALORES 1) ID DEL TREE TEMPORAL, 2) LA LISTA DE LA RELACION
                 $result = array('array' => $tree_bean->getId(), "lista" => $list_relation);
                 return $result;
                 //$this->list_relation = $list_relation;
                 //$this->redirect('@edit_strategy?id_tree='.$tree_bean->getId());
             } catch (Exception $e) {
                 $conn->rollBack();
                 // $this->message = $e->getMessage();
                 $conn = Propel::close();
                 return sfView::ERROR;
             }
         } else {
             // $this->message = 'tree not definitive';
             $conn = Propel::close();
             return sfView::ERROR;
         }
     } else {
         //   $this->message = 'session expired';
         $conn = Propel::close();
         return sfView::ERROR;
     }
 }
 /**
  * Gets an array of IndicatorsSc objects which contain a foreign key that references this object.
  *
  * If this collection has already been initialized with an identical Criteria, it returns the collection.
  * Otherwise if this UserSc has previously been saved, it will retrieve
  * related IndicatorsScs from storage. If this UserSc is new, it will return
  * an empty collection or the current collection, the criteria is ignored on a new object.
  *
  * @param      PropelPDO $con
  * @param      Criteria $criteria
  * @return     array IndicatorsSc[]
  * @throws     PropelException
  */
 public function getIndicatorsScs($criteria = null, PropelPDO $con = null)
 {
     if ($criteria === null) {
         $criteria = new Criteria(UserScPeer::DATABASE_NAME);
     } elseif ($criteria instanceof Criteria) {
         $criteria = clone $criteria;
     }
     if ($this->collIndicatorsScs === null) {
         if ($this->isNew()) {
             $this->collIndicatorsScs = array();
         } else {
             $criteria->add(IndicatorsScPeer::RESPONSABLE_ID, $this->id);
             IndicatorsScPeer::addSelectColumns($criteria);
             $this->collIndicatorsScs = IndicatorsScPeer::doSelect($criteria, $con);
         }
     } else {
         // criteria has no effect for a new object
         if (!$this->isNew()) {
             // the following code is to determine if a new query is
             // called for.  If the criteria is the same as the last
             // one, just return the collection.
             $criteria->add(IndicatorsScPeer::RESPONSABLE_ID, $this->id);
             IndicatorsScPeer::addSelectColumns($criteria);
             if (!isset($this->lastIndicatorsScCriteria) || !$this->lastIndicatorsScCriteria->equals($criteria)) {
                 $this->collIndicatorsScs = IndicatorsScPeer::doSelect($criteria, $con);
             }
         }
     }
     $this->lastIndicatorsScCriteria = $criteria;
     return $this->collIndicatorsScs;
 }
 public function assessNode($indicador_id)
 {
     //el orden de las validacion sera por criterio de validaciones o errores comunes
     $indicador = IndicatorsScPeer::retrieveByPK($indicador_id);
     if (is_object($indicador)) {
         if ($indicador->getResponsableId() != "") {
             if ($indicador->getValorMinimo() != "") {
                 if ($indicador->getValorDeseado() != "") {
                     if ($indicador->getUltimoNodo() != "") {
                         //es ultimo nodo (validamos la ultima opcion de Valor Optimo)
                         if ($indicador->getValorOptimo() != "") {
                             // validamos "lo demas"
                             if ($indicador->getTitulo() != "") {
                                 //llegada A ==> INDICADOR OPTIMO
                                 return array('resp' => true, 'code' => '1');
                             } else {
                                 // no tiene titulo
                                 return array('resp' => false, 'code' => 'e-005');
                             }
                         } else {
                             // no tiene responsable Valor Optimo
                             return array('resp' => false, 'code' => 'e-004');
                         }
                     } else {
                         //no es ultimo nodo  (validamos los nodos hijos y despues "lo demas")
                         //obtener los nodos hijos:
                         //aca retorno lista de indicadores inferiores
                         //primero valido si tiene conectores inferiores
                         //si tiene concetores inferiores envio la lista de conectores inferiores
                         //en la consuta solo necesito id-configuracion(valor asignado por padre)-titulo
                         $criterio_busqueda = new Criteria();
                         $criterio_busqueda->add(IndicatorsScPeer::PREVIOUS_ID, $indicador->getId());
                         $criterio_busqueda->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
                         $lista_indicadores_hijos = IndicatorsScPeer::doSelect($criterio_busqueda);
                         //ahora valido que todos tengan su porcentaje.
                         foreach ($lista_indicadores_hijos as $row) {
                             if ($row->getConectoresConfigure() == "") {
                                 return array('resp' => false, 'code' => $row->getId());
                             }
                         }
                         // si todos tienen un valor entonces valido lo mismo de arriba ..."lo demas"
                         if ($indicador->getTitulo() != "") {
                             //llegada B ==> INDICADOR OPTIMO
                             return array('resp' => true, 'code' => '1');
                         } else {
                             // no tiene titulo
                             return array('resp' => false, 'code' => 'e-005');
                         }
                     }
                 } else {
                     // no tiene responsable Valor Deseado
                     return array('resp' => false, 'code' => 'e-003');
                 }
             } else {
                 // no tiene responsable Valor Minimo
                 return array('resp' => false, 'code' => 'e-002');
             }
         } else {
             // no tiene responsable ID
             return array('resp' => false, 'code' => 'e-001');
         }
     } else {
         return array('resp' => false, 'code' => 'e-666');
     }
 }
 public function executeOauthcallback(sfWebRequest $request)
 {
     $code = $request->getParameter('code');
     $state = $request->getParameter('state');
     /* indicador_id */
     $handle_error = $request->getParameter('error');
     $indicator = IndicatorsScPeer::retrieveByPK($state);
     $id_tree = $indicator->getTreeId();
     $current_user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'));
     $c = new Criteria();
     $c->add(UserGoogleConfigurationPeer::USER_ID, $current_user->getId());
     $google_configuration = UserGoogleConfigurationPeer::doSelectOne($c);
     if (!is_object($google_configuration)) {
         $this->getUser()->setFlash('msg', 'Primero debes configurar los datos de tu cuenta Google');
         $this->redirect('@configuration');
     }
     $google_client_id = $google_configuration->getGoogleClientId();
     $google_client_secret = $google_configuration->getGoogleClientSecret();
     if ($handle_error == 'access_denied') {
         //$this->getUser()->setFlash('message','Oops, ha ocurrido un error. Intenta nuevamente.');
         return $this->redirect('@edit_strategy?id_tree=' . $id_tree . '&node_id=' . $indicator->getId() . '&response=error&from=g');
     } else {
         if ($code != '' && $state != '') {
             $postdata = http_build_query(array('code' => $code, 'client_id' => $google_client_id, 'client_secret' => $google_client_secret, 'redirect_uri' => $this->getController()->genUrl('@oauthcallback', true), 'grant_type' => 'authorization_code'));
             $opts = array('http' => array('method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'content' => $postdata));
             $context = stream_context_create($opts);
             $result = @file_get_contents('https://accounts.google.com/o/oauth2/token', false, $context);
             if ($result === FALSE) {
                 $this->getUser()->setFlash('msg', 'Configurar correctamente');
                 $this->redirect('@configuration');
             } else {
                 $json = json_decode($result);
                 //consultamos el email del usuario, para adjuntarlo al registro
                 $userinfo = @file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo?access_token=' . $json->{'access_token'});
                 $json_userinfo = json_decode($userinfo);
                 if ($userinfo === FALSE) {
                     $this->redirect('@edit_strategy?id_tree=' . $id_tree . '&node_id=' . $indicator->getId() . '&response=error&from=g');
                 } else {
                     /* si $json->{'refresh_token'} devuelve nada, es porque anteriormente ya permitió el acceso */
                     if (isset($json->{'refresh_token'})) {
                         //primera vez que pide permiso de acceso
                         //si existe el refresh_token, se reemplaza, ya que es porque anteriormente ha revocado el permiso de acceso
                         $c = new Criteria();
                         $c->add(IndicadoresScGoogleAnalyticsPeer::GOOGLE_USER_EMAIL, $json_userinfo->{'email'});
                         $c->add(IndicadoresScGoogleAnalyticsPeer::INDICADOR_ID, $indicator->getId());
                         $indicadores_sc_google_analytics_object = IndicadoresScGoogleAnalyticsPeer::doSelectOne($c);
                         if (is_object($indicadores_sc_google_analytics_object)) {
                             //obtener nodos "del arbol $id_tree" del mismo google_user_email
                             $c = new Criteria();
                             //$c->add(IndicatorsScPeer::TREE_ID, $id_tree);
                             $c->add(IndicatorsScPeer::FLAG, 'habilitado');
                             $c->add(IndicatorsScPeer::ULTIMO_NODO, 1);
                             $c->add(IndicatorsScPeer::DET_NETWORK_ATTRIBUTE_ID, null, Criteria::NOT_EQUAL);
                             $c->add(IndicadoresScGoogleAnalyticsPeer::GOOGLE_USER_EMAIL, $json_userinfo->{'email'});
                             $c->addJoin(IndicadoresScGoogleAnalyticsPeer::INDICADOR_ID, IndicatorsScPeer::ID);
                             $lista_nodos = IndicatorsScPeer::doSelect($c);
                             //obtener nodos con conector exterior pertenecientes al usuario $json_userinfo->{'email'}
                             foreach ($lista_nodos as $row) {
                                 //actualizar su refresh_token
                                 $c = new Criteria();
                                 $c->add(IndicadoresScGoogleAnalyticsPeer::INDICADOR_ID, $row->getId());
                                 $temp = IndicadoresScGoogleAnalyticsPeer::doSelectOne($c);
                                 $temp->setRefreshToken($json->{'refresh_token'});
                                 $temp->save();
                             }
                         } else {
                             //sino, se crea
                             $indicadores_sc_google_analytics = new IndicadoresScGoogleAnalytics();
                             $indicadores_sc_google_analytics->setRefreshToken($json->{'refresh_token'});
                             $indicadores_sc_google_analytics->setGoogleUserEmail($json_userinfo->{'email'});
                             $indicadores_sc_google_analytics->setIndicadorId($indicator->getId());
                             $indicadores_sc_google_analytics->save();
                         }
                         $this->redirect('@edit_strategy?id_tree=' . $id_tree . '&node_id=' . $indicator->getId() . '&response=success&from=g');
                     } else {
                         //buscar los nodos del mismo arbol
                         $c = new Criteria();
                         $c->add(IndicadoresScGoogleAnalyticsPeer::GOOGLE_USER_EMAIL, $json_userinfo->{'email'});
                         //$c->add(IndicatorsScPeer::TREE_ID, $indicator->getTreeId());//puede ser del mismo arbol u otro
                         $c->add(IndicatorsScPeer::FLAG, 'habilitado');
                         $c->addJoin(IndicadoresScGoogleAnalyticsPeer::INDICADOR_ID, IndicatorsScPeer::ID);
                         $object = IndicadoresScGoogleAnalyticsPeer::doSelectOne($c);
                         if (is_object($object)) {
                             $indicadores_sc_google_analytics = new IndicadoresScGoogleAnalytics();
                             $indicadores_sc_google_analytics->setRefreshToken($object->getRefreshToken());
                             $indicadores_sc_google_analytics->setGoogleUserEmail($json_userinfo->{'email'});
                             $indicadores_sc_google_analytics->setIndicadorId($indicator->getId());
                             $indicadores_sc_google_analytics->save();
                         }
                         $this->redirect('@edit_strategy?id_tree=' . $id_tree . '&node_id=' . $indicator->getId() . '&response=success&from=g');
                     }
                 }
             }
         }
     }
 }
 private function get_hijos($padre_id)
 {
     if ($padre_id != 0) {
         $criterio = new Criteria();
         $criterio->add(IndicatorsScPeer::PREVIOUS_ID, $padre_id);
         $criterio->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
         $list = IndicatorsScPeer::doSelect($criterio);
         if (count($list) > 0) {
             return $list;
         } else {
             return null;
         }
     } else {
         return null;
     }
 }
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      PropelPDO $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, PropelPDO $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(IndicatorsScPeer::DATABASE_NAME, Propel::CONNECTION_READ);
     }
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria(IndicatorsScPeer::DATABASE_NAME);
         $criteria->add(IndicatorsScPeer::ID, $pks, Criteria::IN);
         $objs = IndicatorsScPeer::doSelect($criteria, $con);
     }
     return $objs;
 }
 public function executeCreate_mirror_tree(sfWebRequest $request)
 {
     $tree_id = $request->getParameter('idTree');
     $user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'), null);
     if ($user != null) {
         $tree_current = TreeScPeer::retrieveByPK($tree_id);
         if (is_object($tree_current)) {
             try {
                 $conn = Propel::getConnection();
                 $conn->beginTransaction();
                 $tree_bean = new TreeSc();
                 $tree_bean->setName($tree_current->getName());
                 $tree_bean->setUserId($tree_current->getUserId());
                 $tree_bean->setConfigureFlag($tree_current->getConfigureFlag());
                 $tree_bean->setConfigureDesign($tree_current->getConfigureDesign());
                 $tree_bean->setCreateAt(time());
                 $tree_bean->setUpdateAt(time());
                 $tree_bean->setFlag($tree_current->getFlag());
                 $tree_bean->setProduccion('not');
                 $tree_bean->setGrupoTrabajoId($tree_current->getGrupoTrabajoId());
                 $tree_bean->setPeriodoId($tree_current->getPeriodoId());
                 $tree_bean->save();
                 $tree_user_bean = new TreeUser();
                 $tree_user_bean->setUserId($tree_bean->getUserId());
                 $tree_user_bean->setTreeId($tree_bean->getId());
                 $tree_user_bean->save();
                 $criterio = new Criteria();
                 $criterio->add(IndicatorsScPeer::TREE_ID, $tree_current->getId());
                 $criterio->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
                 $criterio->addAscendingOrderByColumn(IndicatorsScPeer::ID);
                 $list_indicadores = IndicatorsScPeer::doSelect($criterio);
                 $list_relation = null;
                 foreach ($list_indicadores as $row) {
                     $indicator_bean = new IndicatorsSc();
                     $indicator_bean->setTitulo($row->getTitulo());
                     $indicator_bean->setDescripcion($row->getDescripcion());
                     $indicator_bean->setValorMinimo($row->getValorMinimo());
                     $indicator_bean->setValorDeseado($row->getValorDeseado());
                     $indicator_bean->setValorOptimo($row->getValorOptimo());
                     $indicator_bean->setResponsableId($row->getResponsableId());
                     $indicator_bean->setTreeId($tree_bean->getId());
                     $indicator_bean->setEmailResponsable($row->getEmailResponsable());
                     $indicator_bean->setUltimoNodo($row->getUltimoNodo());
                     if ($row->getPreviousId() == 0) {
                         $indicator_bean->setPreviousId(0);
                     } else {
                         $id_relation = $this->return_relation_id($list_relation, $row->getPreviousId());
                         $indicator_bean->setPreviousId($id_relation);
                     }
                     if ($row->getParents() != "") {
                         $parents = $this->return_parent_relation($list_relation, $row->getParents());
                         $indicator_bean->setParents($parents);
                     }
                     $indicator_bean->setFlag($row->getFlag());
                     $indicator_bean->setConectoresConfigure($row->getConectoresConfigure());
                     $indicator_bean->save();
                     $relation = array('array' => '' . $row->getId() . '-' . $indicator_bean->getId() . '');
                     $list_relation[] = $relation;
                 }
                 //  $conn->rollBack();
                 $tree_current->setFlag(2);
                 $tree_current->save();
                 $conn->commit();
                 $conn = Propel::close();
                 $this->list_relation = $list_relation;
                 $this->redirect('@edit_strategy?id_tree=' . $tree_bean->getId());
             } catch (Exception $e) {
                 $conn->rollBack();
                 $this->message = $e->getMessage();
                 $conn = Propel::close();
                 return sfView::ERROR;
             }
         } else {
             $this->message = 'tree not definitive';
             $conn = Propel::close();
             return sfView::ERROR;
         }
     } else {
         $this->message = 'session expired';
         $conn = Propel::close();
         return sfView::ERROR;
     }
 }
 private function actualizarNodosPorPeriodo($periodo_id)
 {
     $c = new Criteria();
     $c->add(TreeScPeer::PERIODO_ID, $periodo_id);
     $c->add(TreeScPeer::PRODUCCION, 'production');
     $c->add(IndicatorsScPeer::ULTIMO_NODO, 1);
     $c->add(IndicatorsScPeer::FLAG, 'habilitado');
     $c->addJoin(TreeScPeer::ID, IndicatorsScPeer::TREE_ID);
     $nodos = IndicatorsScPeer::doSelect($c);
     if (count($nodos) > 0) {
         $group_data_indicadores = new GroupDataIndicadores();
         $group_data_indicadores->setCreateAt(time());
         $group_data_indicadores->setTreeId($nodos[0]->getTreeId());
         $group_data_indicadores->save();
         //$nodos es sòlo los ultimos nodos de un arbol
         foreach ($nodos as $row) {
             $data_indicadores = new DataIndicadores();
             $data_indicadores->setIndicadorId($row->getId());
             $data_indicadores->setUserId($row->getResponsableId());
             $c = new Criteria();
             $c->add(DataIndicadoresPeer::INDICADOR_ID, $row->getId());
             $c->addDescendingOrderByColumn(DataIndicadoresPeer::CREATE_AT);
             $c->setLimit(1);
             $data_anterior_indicador = DataIndicadoresPeer::doSelectOne($c);
             if ($row->getDetNetworkAttributeId() == null) {
                 /* si es null, es conector interno (manualmente) */
                 $data_indicadores->setData(0);
                 $row->setValorActualEntregado(0);
                 $row->save();
             } else {
                 $data_indicadores->setData($this->getIndicatorScData($row->getId()));
                 $row->setValorActualEntregado($this->getIndicatorScData($row->getId()));
                 $row->save();
             }
             $data_indicadores->setGroupData($group_data_indicadores->getId());
             $data_indicadores->setCreateAt(time());
             $data_indicadores->setUpdateAt(time());
             $data_indicadores->save();
         }
         $ultima_fecha_del_array = $data_indicadores->getCreateAt();
         if (count($nodos) > 0) {
             /*
              * Obtengo los indicadores que tienen indicadores hijos ( ultimos indicadores )
              * o comienzo a recacular todos los valores Actuales de todos los indicadores
              */
             $criterio = new Criteria();
             $criterio->add(IndicatorsScPeer::TREE_ID, $nodos[0]->getTreeId());
             $criterio->add(IndicatorsScPeer::FLAG, '%habilitado%', Criteria::LIKE);
             $criterio->add(IndicatorsScPeer::ULTIMO_NODO, 1);
             $criterio->addAscendingOrderByColumn(IndicatorsScPeer::PREVIOUS_ID);
             $list_indicadores = IndicatorsScPeer::doSelect($criterio);
             foreach ($list_indicadores as $row) {
                 if ($row->getPreviousId() != 0) {
                     $var = $this->recalcular($row, $ultima_fecha_del_array);
                 }
             }
         }
     }
 }