<?php

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

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

        //echo "generar_doc_soporteActions";die();
        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request generar_doc_soporte");
        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");
        //Obtener datos configuracion
        $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

        $int = 0;
        foreach ($array as $routeName => $routeData) {
            //echo $routeName . "\n";
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadCliente = $value;
                    }
                }
            }
            if ('entidad_nombre' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadNombre = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            if ('jasper_url_local' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $url_jasper = $value;
                    }
                }
            }
            $int++;
        }

        /*
         * Manejo de errores
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();
        try {

            $fecha_proceso = CN_TABLE::fechaSistema();

            /*
             * Variables obligatorias
             */


            /*
             * Variables opcionales
             */
            //Validacion para solo formato de pago final segun fecha de contrato - 20181101
            $this->logMessage("[generar_doc_soporte] Obtenemos pagos a formatos de pagos sin generar");
            $sql = <<<EOD
SELECT

tab0.*,tab1.id_contratista,tab1.id_contrato

FROM RVC_PAGO_OBL_FORM_PAGO tab0
left join rvc_formato_pago tab1 on tab0.id_formato_pago=tab1.id_formato_pago
where
tab1.adjunto_factura is null and                 
tab0.documento_soporte is not null and 
tab0.generado = 0 and tab0.id_pago_obl <> 0
EOD;
            //ejecuta y obtiene el resultado del sql
            $pagos = CN_TABLE::executeSQL($sql);

            if (count($pagos) > 0) {

                foreach ($pagos as $pago) {

                    //Id pago obligacion formato pago
                    $id_pago_obl_form_pago = $pago['id_pago_obl_form_pago'];
                    $id_formato_pago = $pago['id_formato_pago'];
                    $secuencia = $pago['documento_soporte'];
                    $fecha_generado = $pago['fecha_generado'];
                    $nombre_reporte = "Documento_soporte_$id_formato_pago" . "_" . "$secuencia.pdf";

                    $this->logMessage("[generar_doc_soporte] Proceso nombre_reporte = " . $nombre_reporte);

                    // actualizamos registro
                    $sql = <<<EOD
update RVC_PAGO_OBL_FORM_PAGO 
set generado = 1,
adjunto = '$nombre_reporte'
where
id_pago_obl_form_pago = $id_pago_obl_form_pago
EOD;
                    $this->conn->execute($sql);
                }

                foreach ($pagos as $pago) {

                    //Id pago obligacion formato pago
                    $id_pago_obl_form_pago = $pago['id_pago_obl_form_pago'];
                    $id_formato_pago = $pago['id_formato_pago'];
                    $secuencia = $pago['documento_soporte'];

                    /**
                     * 20210909 Si es SGC se omite la generacion del docuemtno soporte
                     */
                    if ($entidadCliente != "1") {
                        $reporte = "documento_soporte";
                        $fecha_reporte_2021 = strtotime("2021-10-05");
                        if (strtotime($fecha_generado) > $fecha_reporte_2021) {
                            $reporte = "documento_soporte_2021";
                        }
                        $nombre_reporte = "Documento_soporte_$id_formato_pago" . "_" . "$secuencia.pdf";

                        //Generamos documento de soporte para le pago indicado
                        $this->logMessage("[generar_doc_soporte] Generar Documento Soporte formato pago: $id_formato_pago");
                        $this->logMessage("[generar_doc_soporte] Generar PDF por Jasper");

                        //URL de envio inicio
                        $url = $url_jasper;
                        $url = $url . $reporte . '&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                        $url = $url . '&PARAM_id_pago_obl_form_pago=' . $id_pago_obl_form_pago;
                        $url = $url . '&PARAM_envio_correo=false&PARAM_tag_adjunto_modulo=true';
                        $url = $url . '&PARAM_nombre_reporte=' . str_replace(' ', ':', $nombre_reporte);

                        $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);

                        //URL de envio se limpia
                        $url = '';
                    }
                }
            }
            $this->conn->commit();

            /**
             * Se cambio para independizar el generar de formato pago - 20220301::LAVILA
             */
            $this->conn->beginTransaction();
            $sql = <<<EOD
SELECT

tab0.*,tab1.id_contratista,tab1.id_contrato

FROM RVC_PAGO_OBL_FORM_PAGO tab0
left join rvc_formato_pago tab1 on tab0.id_formato_pago=tab1.id_formato_pago
                    
where
tab0.gen_pagado = 0 and tab0.id_pago_obl <> 0

order by
tab0.id_formato_pago
EOD;
            //ejecuta y obtiene el resultado del sql
            $pagos = CN_TABLE::executeSQL($sql);

            if (count($pagos) > 0) {

                foreach ($pagos as $pago) {

                    //Id pago obligacion formato pago
                    $id_pago_obl_form_pago = $pago['id_pago_obl_form_pago'];

                    // actualizamos registro
                    $sql = <<<EOD
update RVC_PAGO_OBL_FORM_PAGO 
set gen_pagado = 1,
fecha_gen_pagado = trunc(sysdate)
where
id_pago_obl_form_pago = $id_pago_obl_form_pago
EOD;
                    $this->conn->execute($sql);
                }

                foreach ($pagos as $pago) {

                    //Id pago obligacion formato pago
                    $id_pago_obl_form_pago = $pago['id_pago_obl_form_pago'];
                    $id_formato_pago = $pago['id_formato_pago'];
                    $secuencia = $pago['documento_soporte'];

                    $this->logMessage("[generar_doc_soporte] Proceso id_formato_pago = " . $id_formato_pago);

                    /**
                     *  SI SGC Generamos Documento formato Pago
                     */
                    if ($entidadCliente == "1") {
                        $reporte = "formato_pago_contratista_SGC_2023";
                        // Obtenemos codigo comprobacion certificado
                        $codigo_certificado = CN_TABLE::obtenerCodigoParaArchivo();
                        $this->logMessage("[generar_doc_soporte] Codigo seguridad archivo formato pago $codigo_certificado");
                        $id_formato_pago = $pago['id_formato_pago'];
                        $id_contratista = $pago['id_contratista'];
                        $id_contrato = $pago['id_contrato'];
                        $nombre_archivo = "Formato_pago_$id_formato_pago.pdf";
                        // Obtenemos otros datos del formato de pago
                        //Generamos documento de soporte para le pago indicado
                        $this->logMessage("[generar_doc_soporte] Generar formato pago: $id_formato_pago");
                        $this->logMessage("[generar_doc_soporte] Generar PDF por Jasper");

                        //URL de envio inicio
                        $url = $url_jasper;
                        $url = $url . $reporte . "&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946";
                        $url = $url . '&PARAM_numero_certificado=' . $codigo_certificado;
                        $url = $url . '&PARAM_id_formato_pago=' . $id_formato_pago;
                        $url = $url . '&PARAM_id_contrato=' . $id_contrato;
                        $url = $url . '&PARAM_id_contratista=' . $id_contratista;
                        $url = $url . '&PARAM_envio_correo=false&PARAM_tag_adjunto_modulo=true';
                        $url = $url . '&PARAM_nombre_reporte=' . str_replace(' ', ':', $nombre_archivo);

                        $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);
                        $file_path = getcwd() . "/uploads/formato_pago/$nombre_archivo";

                        CN_TABLE::generarHashArchivo($file_path, "RVC_FORMATO_PAGO", null, $id_formato_pago, 'admin', $codigo_certificado);
                        $this->logMessage("[generar_doc_soporte] Hash Formato Pago generado y almacenado");
                    }
                }
            }
            $this->conn->commit();

            $this->logMessage("[generar_doc_soporte] FINALIZO EXITOSAMENTE");
            $this->status = 0;
            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $pagos;
        } catch (Exception $e) {
            $this->conn->rollback();
            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
            $this->logMessage("[generar_doc_soporte] FINALIZO CON ERRORES");
        }
    }

}
