<?php

/**
 * actualizador_sigestion actions.
 *
 * @package    contratacion
 * @subpackage actualizador_sigestion
 * @author     Manuel Enrique Paredes Lopez
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class actualizador_sigestionActions extends sfActions {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        $sisgestion = sfConfig::get('app_sisgestion');
        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }


        if (isset($request['vigencia'])) {
            $vigencia = $request['vigencia'];
        } else {
            $vigencia = date('Y');
        }

        /**
         * Solicitar token de conexion - 20200910
         */
        $token = CN_TABLE::solicitarToken();
        $this->logMessage("actualizador_sigestion Token: " . $token);

        $result = '';

        /*
         * Manejo de errores
         */
        try {

            /**
             * Abrir nueva conexion con la Base de Datos
             */
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            $uridos = $sisgestion . '/api/ServicePaa/dependencias';
            $urldos = 'http://' . $uridos;

            $post = '';
            //$post = 'Vigencia='.$vigencia;
            $authorization = "Authorization: Bearer " . $token;

            $sesion = curl_init($urldos);

            curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
            curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
            //curl_setopt($sesion, CURLOPT_POSTFIELDS,$post);
            curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

            //Ejecuta la petición
            $result = curl_exec($sesion);
            //Se cierra la conexión
            curl_close($sesion);

            //verificar Message en result
            $pos = strpos($result, 'Message');
            if ($pos !== false) {
                throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
            }

            $resultt = array();
            $respuesta = array();
            $resultt = json_decode($result, true);
            $this->logMessage("DEPENDENCIAS Respuesta: " . $result);



            foreach ($resultt as $res) {
                $record = array();
                foreach ($res as $key => $value) {

                    $key = strtolower($key);
                    $record[strtolower($key)] = $value;
                }
                $respuesta[] = $record;
            }




            /*
             * Formato de fecha
             */
            //Sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD" 
EOD;
            //Ejecutar SQL
            CN_TABLE::executeSQL($sql);



            //Sql
            $sql = <<<EOD
  SELECT ID_AREA,
       DESCRIPCION,
       SIGLA,
       ID_DEPENDENCIA,
       CODIGO,
       ID_NIVEL,
       ID_COORDINADOR,
       AREA_SISGESTION
        FROM AREA   
EOD;


            $resultados = CN_TABLE::executeSQL($sql);


            foreach ($resultados as $key => $valor) {
                $this->logMessage("[actualizador] Respuesta AREA: " . $valor['descripcion']);
            }
            $record = array();


            if (count($resultados) > 0) {

                foreach ($resultados as $key => $resul) {

                    foreach ($respuesta as $valor => $val) {


                        if ($resul['area_sisgestion'] != null && $val['codigodependencia'] != null) {


                            if ($val['codigodependencia'] == $resul['area_sisgestion']) {

                                //Sql
                                $sql = <<<EOD
                  UPDATE AREA
   SET DESCRIPCION = '$val[nombredependencia]',
       AREA_SISGESTION = $val[codigodependencia]
WHERE ID_AREA = $resul[id_area]
                
EOD;
                                CN_TABLE::executeSQL($sql);


                                $record[] = array(
                                    'tabla' => 'AREA',
                                    'estado' => 'actualizado',
                                    'estado_nro' => '3',
                                    'descripcion' => $val['nombredependencia'],
                                    'area_sisgestion' => $val['codigodependencia'],
                                    'id_area' => $resul['id_area']
                                );


                                unset($resultados[$key]);
                                unset($respuesta[$valor]);
                            }
                        }
                    }
                }
            }



            foreach ($resultados as $ke => $valor) {
                $this->logMessage("[actualizador] AREA FALTANTE WEBSAFI : " . $valor['descripcion'] . "------" . $valor['area_sisgestion']);
            }


            foreach ($respuesta as $ke => $valor) {
                $this->logMessage("[actualizador] DEPENDECIA FALTANTE SISGESTION: " . $valor['codigodependencia'] . "------" . $valor['nombredependencia']);
                /*
                  $nuevo= substr($valor[nombredependencia], 0, 3);
                  $sql = <<<EOD

                  INSERT INTO AREA
                  (
                  ID_AREA,
                  DESCRIPCION,
                  SIGLA,
                  ID_DEPENDENCIA,
                  CODIGO,
                  ID_NIVEL,
                  ID_COORDINADOR,
                  AREA_SISGESTION
                  )
                  VALUES
                  (
                  null,
                  '$valor[nombredependencia]',
                  '$nuevo',
                  null,
                  'null',
                  null,
                  null,
                  $valor[codigodependencia]
                  )
                  EOD;
                  CN_TABLE::executeSQL($sql);
                 */
            }



            /**
             * Se omitimodalidades de sigestion, se toman las de websafi - 20200414::LAVILA
             */
            $uritres = $sisgestion . '/api/ServicePaa/modalidades';
            $urltres = 'http://' . $uritres;

            $postt = '';


            $sesionn = curl_init($urltres);

            curl_setopt($sesionn, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
            curl_setopt($sesionn, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($sesionn, CURLOPT_RETURNTRANSFER, true);
            //curl_setopt($sesion, CURLOPT_POSTFIELDS,$post);
            curl_setopt($sesionn, CURLOPT_FOLLOWLOCATION, 1);
            $response = curl_exec($sesionn);
            $responder = array();
            $res = array();
            curl_close($sesionn);
            $responder = json_decode($response, true);
            $this->logMessage("MODALIDADES Respuesta: " . $response);



            foreach ($responder as $reso) {
                $recor = array();
                foreach ($reso as $key => $value) {

                    $key = strtolower($key);
                    $recor[strtolower($key)] = $value;
                }
                $res[] = $recor;
            }



            //Sql
            $sql = <<<EOD
  SELECT ID_MODALIDAD_SEL,
       DESCRIPCION,
       FUNDAMENTOS_JURIDICOS,
       ID_TIPO_PROCESO,
       ESTADO,
       PREFIJO,
       CUANTIA_MIN,
       CUANTIA_MAX,
       INTRODUCTORIO,
       APLICA_PROCESO,
       APLICA_APROBACION,
       MOD_SIRECI_SIGES,
       ID_MOD_SIRECI_SIGES
FROM CO_MODALIDAD_SEL
EOD;


            $resultados = CN_TABLE::executeSQL($sql);



            foreach ($resultados as $key => $valor) {
                $this->logMessage("[actualizador] Respuesta MODALIDAD: " . $valor['descripcion']);
            }
            //$record=array();



            if (count($resultados) > 0) {

                foreach ($resultados as $key => $resul) {

                    foreach ($res as $valor => $val) {


                        if ($resul['id_modalidad_sel'] != null && $val['codigomodalidad'] != null) {


                            if ($val['codigomodalidad'] == $resul['id_modalidad_sel']) {

                                $mod = $val['modalidad'];

                                //Sql
                                $sql = <<<EOD
  SELECT ID_TIPO_PROCESO,
       CODIGO,
       DESCRIPCION
FROM CO_TIPO_PROCESO
                WHERE DESCRIPCION = '$mod'
EOD;
                                $retorno = CN_TABLE::executeSQL($sql);

                                $id_tipo_proceso = $retorno[0]['id_tipo_proceso'];


                                if (count($retorno) == 1) {

                                    $sql = <<<EOD
                
                UPDATE CO_MODALIDAD_SEL
   SET 
       MOD_SIRECI_SIGES = '$val[modalidadsireci]',
       ID_MOD_SIRECI_SIGES = $val[codigomodalidadsireci]
WHERE ID_MODALIDAD_SEL = $val[codigomodalidad]                 
                
EOD;
                                    //CN_TABLE::executeSQL($sql);


                                    $record[] = array(
                                        'tabla' => 'MODALIDAD',
                                        'estado' => 'actualizado',
                                        'estado_nro' => '3',
                                        'modalidadsireci' => $val['modalidadsireci'],
                                        'modalidad' => $val['modalidad'],
                                        'id_modalidad_sel' => $resul['id_modalidad_sel']
                                    );


                                    unset($resultados[$key]);
                                    unset($res[$valor]);
                                } else {

                                    $sql = <<<EOD
                
                UPDATE CO_MODALIDAD_SEL
   SET 
       MOD_SIRECI_SIGES = '$val[modalidadsireci]',
       ID_MOD_SIRECI_SIGES = $val[codigomodalidadsireci]
WHERE ID_MODALIDAD_SEL = $val[codigomodalidad]                 
                
EOD;
                                    //CN_TABLE::executeSQL($sql);


                                    $record[] = array(
                                        'tabla' => 'MODALIDAD',
                                        'estado' => 'actualizado',
                                        'estado_nro' => '3',
                                        'modalidadsireci' => $val['modalidadsireci'],
                                        'modalidad' => $val['modalidad'],
                                        'id_modalidad_sel' => $resul['id_modalidad_sel']
                                    );


                                    unset($resultados[$key]);
                                    unset($res[$valor]);
                                }
                            }
                        }
                    }
                }
            }



            foreach ($resultados as $ke => $valor) {
                $this->logMessage("[actualizador] MODALIDADES FALTANTE WEBSAFI : " . $valor['descripcion'] . "------" . $valor['id_modalidad_sel']);
            }


            foreach ($res as $ke => $valor) {
                $this->logMessage("[actualizador] MODALIDADES FALTANTE SISGESTION: " . $valor['codigomodalidad'] . "------" . $valor['modalidadsireci']);
                $modalidad = $this->eliminar_acentos($valor[modalidad]);
                $prefijo = substr($modalidad, 0, 2);
                // $prefijo = $this->eliminar_acentos($prefijo);


                $prefijo = strtoupper($prefijo);

                $mod = $valor['modalidad'];

                //Sql
                $sql = <<<EOD
  SELECT ID_TIPO_PROCESO,
       CODIGO,
       DESCRIPCION
FROM CO_TIPO_PROCESO
                WHERE DESCRIPCION = '$mod'
EOD;
                $retorno = CN_TABLE::executeSQL($sql);

                $id_tipo_proceso = $retorno[0]['id_tipo_proceso'];


                if (count($retorno) == 1) {

                    $sql = <<<EOD
                      
INSERT INTO CO_MODALIDAD_SEL
(
  ID_MODALIDAD_SEL,
  DESCRIPCION,
  FUNDAMENTOS_JURIDICOS,
  ID_TIPO_PROCESO,
  ESTADO,
  PREFIJO,
  CUANTIA_MIN,
  CUANTIA_MAX,
  INTRODUCTORIO,
  APLICA_PROCESO,
  APLICA_APROBACION,
  MOD_SIRECI_SIGES,
  ID_MOD_SIRECI_SIGES
)
VALUES
(
  $valor[codigomodalidad],
  '$valor[modalidad]',
  'ARTICULO&nbsp;<strong style="box-sizing: border-box; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: justify; background-color: rgb(255, 255, 255);">2.2.1.2.1.4.4.</strong>&nbsp;DECRETO 1082 DEL 2015<br><br>',
  $id_tipo_proceso,
  1,
  '$prefijo',
  0,
  999999999999999,
  null,
  1,
  1,
  '$valor[modalidadsireci]',
  $valor[codigomodalidadsireci]
)
            
EOD;
                    //CN_TABLE::executeSQL($sql);


                    $record[] = array(
                        'tabla' => 'MODALIDAD',
                        'estado' => 'creado',
                        'estado_nro' => '2',
                        'modalidadsireci' => $valor['modalidadsireci'],
                        'modalidad' => $valor['modalidad'],
                        'id_modalidad_sel' => $valor['codigomodalidad']
                    );
                } else {

                    $sql = <<<EOD
                      
INSERT INTO CO_MODALIDAD_SEL
(
  ID_MODALIDAD_SEL,
  DESCRIPCION,
  FUNDAMENTOS_JURIDICOS,
  ID_TIPO_PROCESO,
  ESTADO,
  PREFIJO,
  CUANTIA_MIN,
  CUANTIA_MAX,
  INTRODUCTORIO,
  APLICA_PROCESO,
  APLICA_APROBACION,
  MOD_SIRECI_SIGES,
  ID_MOD_SIRECI_SIGES
)
VALUES
(
  $valor[codigomodalidad],
  '$valor[modalidad]',
  'ARTICULO&nbsp;<strong style="box-sizing: border-box; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: justify; background-color: rgb(255, 255, 255);">2.2.1.2.1.4.4.</strong>&nbsp;DECRETO 1082 DEL 2015<br><br>',
  7,
  1,
  '$prefijo',
  0,
  999999999999999,
  null,
  1,
  1,
  '$valor[modalidadsireci]',
  $valor[codigomodalidadsireci]
)
            
EOD;
                    //CN_TABLE::executeSQL($sql);

                    $record[] = array(
                        'tabla' => 'MODALIDAD',
                        'estado' => 'creado',
                        'estado_nro' => '2',
                        'modalidadsireci' => $valor['modalidadsireci'],
                        'modalidad' => $valor['modalidad'],
                        'id_modalidad_sel' => $valor['codigomodalidad']
                    );
                }
            }



            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();

            $this->totalRows = count($record);
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($record);
            $this->list_data = $record;
            $this->logMessage("[actualizador_sigestion] Actualización exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array(
                array(
                    'code' => $e->getCode(),
                    'mensaje' => $e->getMessage(),
                    'servicio' => 'actualizador_sigestion',
                    'modulo' => 'CONTRATACION'
                )
            );
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    public function eliminar_acentos($cadena) {

        //Reemplazamos la A y a
        $cadena = str_replace(
                array('Á', 'À', 'Â', 'Ä', 'á', 'à', 'ä', 'â', 'ª'), array('A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a'), $cadena
        );

        //Reemplazamos la E y e
        $cadena = str_replace(
                array('É', 'È', 'Ê', 'Ë', 'é', 'è', 'ë', 'ê'), array('E', 'E', 'E', 'E', 'e', 'e', 'e', 'e'), $cadena);

        //Reemplazamos la I y i
        $cadena = str_replace(
                array('Í', 'Ì', 'Ï', 'Î', 'í', 'ì', 'ï', 'î'), array('I', 'I', 'I', 'I', 'i', 'i', 'i', 'i'), $cadena);

        //Reemplazamos la O y o
        $cadena = str_replace(
                array('Ó', 'Ò', 'Ö', 'Ô', 'ó', 'ò', 'ö', 'ô'), array('O', 'O', 'O', 'O', 'o', 'o', 'o', 'o'), $cadena);

        //Reemplazamos la U y u
        $cadena = str_replace(
                array('Ú', 'Ù', 'Û', 'Ü', 'ú', 'ù', 'ü', 'û'), array('U', 'U', 'U', 'U', 'u', 'u', 'u', 'u'), $cadena);

        //Reemplazamos la N, n, C y c
        $cadena = str_replace(
                array('Ñ', 'ñ', 'Ç', 'ç'), array('N', 'n', 'C', 'c'), $cadena
        );

        return $cadena;
    }

}
