<?php

/**
 * declara_jura_nov_firmado actions.
 *
 * @package    radicacionVirtualCuentas
 * @subpackage declara_jura_nov_firmado
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class declara_jura_nov_firmadoActions extends sfActions {

    /**
     * Servicio nuevo de firma dependientes - 20210504
     *
     * @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("---function executeUpdate");
        $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");


        $status = 0;
        $records = array();
        $mensaje = "";

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

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

        try {

            /*
             * Variables de filtro
             */
            $tipo_boton = $request['tipo_boton'];
            $tipo_trans = $request['tipo_trans'];
            $id_declara_jura_nov = $request['id_declara_jura_nov'];

            $usuario_estado = $request['username'];
            $fecha_estado = CN_TABLE::fechaSistema();

            $dependiente = $request['dependiente'];
            if ($dependiente == 'true') {
                $dependiente = 1;
            } else {
                $dependiente = 0;
            }
            $id_contratista = $request['id_contratista'];

            switch ($tipo_trans) {
                case 1:

                    /**
                     * Validacion que no deja firmar si el contratista esta inactivo - 20240502::LAVILA
                     */
                    $sql = <<<EOD
select * from rvc_contratista where id_contratista = $id_contratista and estado = 0                         
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

                    if (count($records) > 0) {
                        $status = 1;
                        $mensaje = "No es posible firmar la novedad de dependientes. El contratista esta inactivo, favor verificar.";
                        // comentario
                    } else {

                        //Validamos que la declaracion este completa(que no falten dependientes ni adjuntos en las condiciones de dependencia)
                        $declaracion_valida = true;
                        $sql = <<<EOD
SELECT tab0.*,tab1.num_doc,tab1.razon_social,tab1.adjunto
FROM
  (SELECT tab0.ID_DECLARA_JURA_NOV,
    tab1.ID_TIPO_CONDIC_DEPEND,
    tab1.APLICA_SOPORTE
  FROM RVC_DECLARA_JURA_NOV tab0
  JOIN RVC_TIPO_CONDIC_DEPEND tab1
  ON tab1.ID_TIPO_CONDIC_DEPEND IN
    (SELECT regexp_substr(tab0.ID_TIPO_CONDICIONES,'[^,]+', 1, level)
    FROM dual
      CONNECT BY regexp_substr(tab0.ID_TIPO_CONDICIONES, '[^,]+', 1, level) IS NOT NULL
    )
  WHERE tab0.ID_DECLARA_JURA_NOV =$id_declara_jura_nov
  )tab0 
  left join RVC_DECLARA_JURA_NOVDET tab1 on tab0.ID_DECLARA_JURA_NOV=tab1.ID_DECLARA_JURA_NOV 
    and tab0.ID_TIPO_CONDIC_DEPEND=tab1.ID_TIPO_CONDIC_DEPEND
                              
EOD;
                        //Ejecutar SQL
                        $records = CN_TABLE::executeSQL($sql);

                        if (count($records) > 0) {
                            //Si hay registros se procede a validar cada uno de los registros obtenidos que cada tipo de condicion
                            //cuente con al menos un declarante y si a la condicion aplica soporte que el mismo se encuentre adjuntado
                            foreach ($records as $record) {
                                if (isset($record['num_doc'])) {
                                    if ($record['aplica_soporte'] == 1 and!isset($record['adjunto'])) {
                                        $declaracion_valida = false;
                                        $this->logMessage($record['num_doc']);
                                        break;
                                    }
                                } else {
                                    $declaracion_valida = false;
                                    break;
                                }
                            }
                        }

                        if ($declaracion_valida == false) {
                            $status = 1;
                            $mensaje = "No es posible firmar. Falta declarar dependientes o adjuntar documentos de soporte.";
                        } else {

                            /**
                             * Consultar Contratista num_doc
                             */
                            //Sql
                            $sql = <<<EOD
select
cont.num_doc,
cont.razon_social,
nov.* 
from rvc_declara_jura_nov nov
join rvc_contratista cont
on nov.id_contratista = cont.id_contratista  
where
id_declara_jura_nov = $id_declara_jura_nov  
EOD;
                            //Ejecutar SQL
                            $records = CN_TABLE::executeSQL($sql);
                            $adjunto = "";

                            if (count($records) > 0) {

                                $CODIGOTIMELOG = CN_TABLE::codigoTimeLog();
                                /**
                                 * Incidente #29477, nombre de descarga documento - 20220727::LAVILA
                                 */
                                $fec = date('Y') . "-" . date('m') . "-" . date('d');
                                $num_doc = $records[0]['num_doc'];
                                $razon_social = strtolower($records[0]['razon_social']);
                                $razon_social = str_replace(' ', '_', $razon_social);
                                $razon_social = str_replace('__', '_', $razon_social);

                                if ($dependiente == 1) {
                                    /**
                                     * Incidente #29477, nombre de descarga documento - 20220727::LAVILA
                                     */
                                    //Certificación de Dependientes: AAAA-MM-DD_Certificado_dependientes_CC_XXXXX_pepito_perez.pdf
                                    $adjunto = $fec . "_Certificado_dependientes_CC_" . $num_doc . "_" . $razon_social . ".pdf";
                                    //$adjunto = "Doc-$num_doc Formato Dependiente $CODIGOTIMELOG.pdf";
                                }
                            }


                            //actualizar firmado declaracion, y genera jasper y lo guarda en adjuntos
                            $sql = <<<EOD
update rvc_declara_jura_nov 
set firmado = 1,
fecha_firmado = to_date('$fecha_estado','yyyy-mm-dd'),
adjunto_firmado = '$adjunto'
where
id_declara_jura_nov = $id_declara_jura_nov
EOD;
                            $this->conn->execute($sql);

                            $sql = <<<EOD
update rvc_contratista set dependiente = $dependiente 
where estado = 1 and id_contratista = $id_contratista 
EOD;
                            $this->conn->execute($sql);
                        }
                    }

                    break;

                default:
                    break;
            }


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            if ($status == 0) {
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = array();
                $this->logMessage("[declara_jura_nov] Firma exitosa");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[declara_jura_nov] ERROR!");
                $this->logMessage($mensaje);
            }

            switch ($tipo_trans) {
                case 1:

                    if ($dependiente == 1) {

                        if ($declaracion_valida == true) {

                            /**
                             * Generacion de PDFs jasper - 20180424   
                             */
                            $this->logMessage("[CERTIFICACION_FUNC] Generacion de PDFs.\n");

                            $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

                            $int = 0;
                            $url = '';
                            $url_jasper = '';
                            foreach ($array as $routeName => $routeData) {
                                //echo $routeName . "\n";
                                if ('jasper_url' == $routeName) {
                                    foreach ($routeData as $key => $value) {
                                        //echo $value . "\n";
                                        if ($key == 'value') {
                                            $url_jasper = $value;
                                        }
                                    }
                                }
                                $int++;
                            }


                            //URL de envio inicio
                            $url = $url_jasper;

                            //$url = sfConfig::get('app-gwt_jasper_url');
                            //echo $url;
                            //$ch = curl_init("http://www.sofhouse.net/");
                            /*
                             * $ch = curl_init("http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php
                             * ?uri=%2Freports%2Fcartera%2Fnota_credito&PARAM_id_credito=33960&PARAM_valor=181480&format=HTML");
                             */
                            $url = $url . 'declara_jura_depen&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                            $url = $url . '&PARAM_id_declara_jura_nov=' . $id_declara_jura_nov;
                            $url = $url . '&PARAM_num_doc=' . $num_doc;
                            $url = $url . '&PARAM_comando=' . 'declara_jura_depen';
                            $url = $url . '&PARAM_comando_inf=' . 'declara_jura_depen';

                            $url = $url . '&PARAM_tag_img_firma=1';
                            $url = $url . '&PARAM_envio_correo=false&PARAM_tag_adjunto_modulo=true';
                            $url = $url . '&PARAM_nombre_reporte=' . str_replace(' ', ':', $adjunto);

                            //echo $url;
                            //die();
                            $this->logMessage($url);
                            $ch = curl_init($url);

                            //Parametros de retorno en cURL
                            curl_setopt($ch, CURLOPT_HEADER, 0);
                            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
                            //Ejecuta la petición
                            $rta = curl_exec($ch);
                            //Se cierra la conexión
                            curl_close($ch);

                            //                $arrayRespuesta = json_decode($rta, true);
                            //Verifica el status, si es diferente de 0, ocurrio un error 
                            //                if ($arrayRespuesta['response']['status'] != 0) {
                            //                    $this->logMessage("[Error] Me llamo desde el CURL");
                            //echo "<h3>Me llamo desde el cURL</h3>";
                            //              $mensaje=$arrayRespuesta['response']['data'];
                            //              $this->status = 3;
                            //              $a = $mensaje[0]['mensaje'];
                            //              $b = htmlspecialchars($a, ENT_QUOTES);
                            //              $this->mensajeError = $b;
                            //              $this->list_data = array();
                            //                }

                            /*
                             * FIN Generacion de PDFs
                             */
                        }
                    }

                    break;

                default:
                    break;
            }
        } catch (Exception $e) {

            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[declara_jura_nov] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[declara_jura_nov] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
