<?php

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

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

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");


        /**
         * Borra los archivos del directorio
         */
        $dir = "uploads/archivos_siif/";
        $ficheroseliminados = 0;
        $handle = opendir($dir);
        while ($file = readdir($handle)) {
            if (is_file($dir . $file)) {
                if (unlink($dir . $file)) {
                    $ficheroseliminados++;
                }
            }
        }

        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $cia = $request['id_cia'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            //formato
            $request['formato_val'] = 0;
            $formato_tex = "";
            $formato_val = $request['formato_val'];

            /**
             * Generar archivos SIIF
             */
            $this->generarArchivoSiif($request);


            /**
             * Generar el archivo .ZIP
             */
            $ruta = "uploads/archivos_siif/";
            //tipo de consulta
            $nombre = "archivos_siif_ordenespago.zip";
            $this->generarArchivoZip($ruta, $nombre);

            echo "Generacion Terminada";
            die();
        } catch (Exception $e) {

            $this->logMessage("Error en construccion archivos SIIF." . $e->getMessage());

            echo "Error en construccion archivos SIIF.";
            die();

            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Generar archivos siif
     * 
     * @param sfWebRequest $request
     * @param type $di_ini
     * @param type $di_fin
     */
    function generarArchivoSiif(sfWebRequest $request) {

        //tomar variables del request
        $cia = $request['id_cia'];
        $type = $request['type'];
        $codigolog = date('Ymd His');

        /*
         * Variables obligatorias
         */
        $fecha_ini_text = $request['fecha_ini_text'];
        $fecha_fin_text = $request['fecha_fin_text'];

        /*
         * Variables opcionales
         */
        //id_contratista
        if (isset($request['id_contratista'])) {
            $whereIdContratista = " AND tab0.id_contratista = " . $request['id_contratista'];
        } else {
            $whereIdContratista = ' ';
        }
        //id_contrato
        if (isset($request['id_contrato'])) {
            $whereIdContrato = " AND tab0.id_contrato = " . $request['id_contrato'];
        } else {
            $whereIdContrato = ' ';
        }
        //id_numero_pago
        if (isset($request['id_numero_pago'])) {
            $whereIdNumeroPago = " AND tab0.id_numero_pago = " . $request['id_numero_pago'];
        } else {
            $whereIdNumeroPago = ' ';
        }
        //usuario_asignado
        if (isset($request['usuario_asignado'])) {
            $whereUsuarioAsignado = " AND tab0.usuario_asignado = '" . $request['usuario_asignado'] . "'";
        } else {
            $whereUsuarioAsignado = ' ';
        }
        //Recurso: 0-ANM 1-SGR
        $recurso = '';
        if (isset($request['recurso'])) {
            if ($request['recurso'] == 1) {
                $recurso = ' SGR';
                $whereTipoRecurso = " AND tab0.tipo_recurso = 1 ";
            } elseif ($request['recurso'] == 0 && $request['recurso'] != 'false') {
                $recurso = ' PGN';
                $whereTipoRecurso = " AND tab0.tipo_recurso = 0 ";
            } else {
                $whereTipoRecurso = " ";
            }
        } else {
            $whereTipoRecurso = "";
        }

        $filtro_clase_presup = "";
        $filtro_rub = "";
        if (isset($request['clasepresup'])) {
            if ($request['clasepresup'] == 8) {
                $clasepresup = 8;
                $filtro_rub = "and rub.id_clase_presup = " . $clasepresup;
            } elseif ($request['clasepresup'] == 9) {
                $clasepresup = 9;
                $filtro_rub = "and rub.id_clase_presup = " . $clasepresup;
            } else {
                $clasepresup = 0;
            }

            if ($clasepresup != 0) {
                /**
                 * Filtro por clase presupuestal 8-funcionamiento o 9-inversion - 20220405::LAVILA
                 */
                $filtro_clase_presup = <<<EOD
and tab0.id_formato_pago in (

    select
    forrp.id_formato_pago
    
    from rvc_formato_proy_rp forrp
    
    join rvc_formato_pago forpag
    on forrp.id_formato_pago = forpag.id_formato_pago
    
    left join pr_rubro_pgnsgr_v rub
    on rub.id_rubro = forrp.id_rubro
    and rub.sgr = forrp.is_rp_sgr
    
    where
    rub.id_clase_presup = $clasepresup                            
    and forrp.valor != 0
    and forpag.estado = 1
    and forpag.cargasiif = 1
    and trunc(forpag.fecha_radicado) between to_date('$fecha_ini_text','yyyy-mm-dd') and to_date('$fecha_fin_text','yyyy-mm-dd')

)
EOD;
            }
        }

        //sentencia sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
        //ejecuta y obtiene el resultado del sql
        CN_TABLE::executeSQL($sql);

        /**
         * GENERAL
          Consulta tabla principal RVC_FORMATO_PROY_RP y RVC_FORMATO_PAGO
         * Se deben cargar los radicados en estado OBLIGADO.
         */
        /**
         * Generar archivo tipo 1-Cabecera
         */
        $sql = <<<EOD
select 
rownum as consecutivo,
record.pciconexion,
record.fecha,
record.obligacion,

record.pciunidad,
record.pac,
record.fecha_obligacion,
record.valor_actual,		
record.tipo_beneficiario,
record.medio_pago,
record.tesoreria_dtn,
record.tipo_documento,
record.numero_doc,
record.cuenta,
record.tipo_cuenta,
record.fecha_pago,
record.doc_soporte,
record.doc_compromiso,
record.fecha_doc_compromiso,
record.cargo_fijo,
record.contratista,
record.cargo,
record.texto
                
from(   
                
    select
    rownum as consecutivo,
    case when tab0.tipo_recurso = 0 then dat.CODIGO_SIIF else dat.CODIGO_SPGR end as PCIConexion,
    trunc(sysdate) as fecha,
    case when tab0.tipo_recurso = 0 then tab0.doc_soporte_oblpgn else tab0.doc_soporte_oblsgr end as obligacion,

    case when tab0.tipo_recurso = 0 then dat.CODIGO_SIIF else dat.CODIGO_SPGR end as pciunidad,
    tab0.numero_pac as pac,
    case when tab0.tipo_recurso = 0 then tab0.fecha_soporte_oblpgn else tab0.fecha_soporte_oblsgr end as fecha_obligacion,

    tab0.valor_bruto as valor_actual,		
    'B' as tipo_beneficiario,
    'AC' as medio_pago,
    dat.CODIGO_DTN as tesoreria_dtn,
    '03' as tipo_documento,
    tab0.num_doc as numero_doc,
    tab0.num_cuenta as cuenta,
    tab0.tipo_cuenta as tipo_cuenta,
    DIAS_HABILES(trunc(sysdate),2) as fecha_pago,
    36 as doc_soporte,
    tab0.num_contrato as doc_compromiso,
    tab0.fecha_contrato as fecha_doc_compromiso,
    5 as cargo_fijo,
    tab0.razon_social as contratista,
    'CONTRATISTA' as cargo,
    'RVC '|| tab0.numero_radicado ||' CTO '|| tab0.num_contrato || ' ' || tab0.pago_text || ' PAGO' || '-PERIODO '|| trim(upper(to_char(tab0.FECHA_INI_PAGO,'MONTH','nls_date_language=spanish'))) || '/' || to_char(tab0.FECHA_INI_PAGO,'YY') as texto,
    'RVC '|| tab0.numero_radicado ||' CTO '|| tab0.num_contrato ||' P'|| tab0.id_numero_pago ||' P'|| to_char(tab0.FECHA_INI_PAGO,'MON')|| to_char(tab0.FECHA_INI_PAGO,'YY') || ' - RP '|| tab0.id_rp_proyrp  || ' ASIG. ' || upper(tab0.RAZON_SOC_USU_ASIGNA) as texto1,

    tab0.id_formato_pago,
    tab0.id_anhos,
    tab0.id_numero_pago,
    tab0.num_contrato                    

    from(

        select distinct
        proyrp.is_rp_sgr as tipo_recurso,
        proyrp.id_rp as id_rp_proyrp,
        proyrp.vigencia_rp,
        proyrp.is_rp_sgr,

        contra.num_doc,
        contra.razon_social,
        cont.fecha_contrato,
        contra.num_cuenta,
        contra.declarante_renta,
        cont.razon_soc_sup,
        contra.profesion,
        cont.num_contrato,
        nump.descripcion as pago_text,
        tc.nombre_corto as tipo_cuenta,

        nvl(proyrp.valor,0) as valor_bruto,
        proyrp.numero_pac,

        adj.doc_soporte_oblpgn,
        adj.fecha_soporte_oblpgn,
        adj.doc_soporte_oblsgr,
        adj.fecha_soporte_oblsgr,

        forpag.*

        from rvc_formato_pago_v forpag

        left join rvc_contrato_v cont
        on forpag.id_contrato = cont.id_contrato

        left join rvc_contratista_v contra
        on forpag.id_contratista = contra.id_contratista

        left join ts_tc tc
        on tc.id = contra.tipo_cuenta

        left join rvc_numero_pago nump
        on nump.id_numero_pago = forpag.id_numero_pago

        left join(

            select
            fp.id_formato_pago,
            to_char(wm_concat(distinct fp.id_rp)) as id_rp,
            to_char(wm_concat(distinct fp.vigencia_rp)) as vigencia_rp,
            fp.is_rp_sgr,
            sum(fp.valor) as valor,
            min(pac.numero_pac) as numero_pac

            from rvc_formato_proy_rp fp

            left join pr_codif_presup rub
            on rub.id_rubro = fp.id_rubro

            left join pr_tipo_rec rec
            on rec.id = fp.id_tipo_rec

            left join rvc_posicion_catalogo_pac pac
            on pac.catalogo_gasto = rub.codigo_rubro
            and nvl(pac.id_agrup_rec,rec.id_agrup) = nvl(rec.id_agrup,0)

            where
            fp.valor != 0

            group by
            fp.id_formato_pago,
            /*fp.id_rp,
            fp.vigencia_rp,*/
            fp.is_rp_sgr

        )proyrp
        on proyrp.id_formato_pago = forpag.id_formato_pago

        left join(
            select
            adj.id_formato_pago,
            min(adj.doc_soporte) as doc_soporte_oblpgn,
            min(adj.fecha_soporte) as fecha_soporte_oblpgn,
            min(adj.doc_soporte) as doc_soporte_oblsgr,
            min(adj.fecha_soporte) as fecha_soporte_oblsgr

            from rvc_formato_pago_adj adj

            where
            upper(adj.nombre_adjunto) like '%OBLIGA%'

            group by
            adj.id_formato_pago
        )adj
        on adj.id_formato_pago = forpag.id_formato_pago

        where
        forpag.estado = 1
        and forpag.estado_general = 6
        and trunc(forpag.fecha_radicado) between to_date('$fecha_ini_text','yyyy-mm-dd') and to_date('$fecha_fin_text','yyyy-mm-dd')

    )tab0

    left join datos_compania dat
    on dat.id = 1

    where
    1 = 1
    $whereIdContratista
    $whereIdContrato
    $whereIdNumeroPago
    $whereTipoRecurso
    $whereUsuarioAsignado
    $filtro_clase_presup  

    order by
    tab0.fecha_radicado,
    tab0.radicado  
    
)record                 
EOD;
        //ejecutar sql
        $records = CN_TABLE::executeSQL($sql);

        $i = 1;
        //CONSECUTIVO;PCI;FECHA;OBLIGACION;UNIDAD;PAC;FECHA_OBLIGACION;VALOR_ACTUAL;TIPO_BENEFICIARIO;MEDIO_PAGO;TESORERIA_DTN;TIPO_DOC;NUM_DOC;CUENTA;TIPO_CUENTA;FECHA_PAGO;DOCUMENTO_SOP;DOC_COMPROMISO;FECHA_DOC_COMPROMISO;CARGO_FIJO;CARGO;TEXTO;C1
        foreach ($records as $rec) {
            $records1["tipo1" . $i] = array(
                "CONSECUTIVO" => $rec['consecutivo'],
                "PCI" => $rec['pciconexion'],
                "FECHA" => $rec['fecha'],
                "OBLIGACION" => $rec['obligacion'],
                "UNIDAD" => $rec['pciunidad'],
                "PAC" => $rec['pac'],
                "FECHA_OBLIGACION" => $rec['fecha_obligacion'],
                "VALOR_ACTUAL" => $rec['valor_actual'],
                "TIPO_BENEFICIARIO" => $rec['tipo_beneficiario'],
                "MEDIO_PAGO" => $rec['medio_pago'],
                "TESORERIA_DTN" => $rec['tesoreria_dtn'],
                "TIPO_DOC" => $rec['tipo_documento'],
                "NUM_DOC" => $rec['numero_doc'],
                "CUENTA" => $rec['cuenta'],
                "TIPO_CUENTA" => $rec['tipo_cuenta'],
                "FECHA_PAGO" => $rec['fecha_pago'],
                "DOCUMENTO_SOP" => $rec['doc_soporte'],
                "DOC_COMPROMISO" => $rec['doc_compromiso'],
                "FECHA_DOC_COMPROMISO" => $rec['fecha_doc_compromiso'],
                "CARGO_FIJO" => $rec['cargo_fijo'],
                "CONTRATISTA" => $rec['contratista'],
                "CARGO" => $rec['cargo'],
                "TEXTO" => $rec['texto']
            );
            /*
             * contador filas
             */
            $i++;
        }

        /**
         * Generar archivo tipo 2-Detalle
         */
        $sql = <<<EOD
select
    
tab0.consecutivo as consecutivo,
rownum as consec_item,
tab0.proyecto,
tab0.rubro,
tab0.recurso,
tab0.fuente,
nvl(tab0.csf_ssf,'01') as csf_ssf,
to_char(tab0.valor_bruto) || case when '$type' != 'xls' then ',00000000' else '' end as valor_bruto,
                
tab0.atributo_contable as atributo_contable,
case 
    when tab0.rubro like '%C%' then ''
    when tab0.rubro like '%A-05%' then '39'
    when upper(tab0.conocgeocientifico) = 'NO' then '21'
    when upper(tab0.conocgeocientifico) = 'SI' then '59'
else '' end as tipo_gasto,
tab0.tipo_operacion as tipo_operacion,
tab0.uso_contable as uso_contable,
case 
    when tab0.uso_contable is not null then tab0.cuenta_contable 
else null end as cuenta_contable

from(

    select
    tab0.id_formato_pago,
    
    tab0.consecutivo as consecutivo,
    null as consec_item,
    proyrp.codigo as proyecto,
    proyrp.rubro as rubro,
    proyrp.tiprec as recurso,
    lpad(proyrp.ff,2,'0') as fuente,
    proyrp.csf_ssf as csf_ssf,
    nvl(proyrp.valor,0) as valor_bruto,
                
    5 as atributo_contable,
    proyrp.tipo_gasto as tipo_gasto,
    proyrp.tipo_operacion as tipo_operacion,
    proyrp.uso_contable as uso_contable,
    proyrp.cuenta_contable as cuenta_contable,
                
    proyccg.conocgeocientifico
    
    from(
        select 
        rownum as consecutivo,
        record.*
        from( 
    
            select distinct
            tab0.*
                
            from(

                select
                proyrp.is_rp_sgr as tipo_recurso,
                proyrp.id_rp as id_rp_proyrp,
                proyrp.vigencia_rp,
                proyrp.is_rp_sgr,

                contra.num_doc,
                contra.razon_social,
                cont.fecha_contrato,
                contra.num_cuenta,
                contra.declarante_renta,
                cont.razon_soc_sup,
                contra.profesion,
                cont.num_contrato,
                nump.descripcion as pago_text,
                tc.nombre_corto as tipo_cuenta,

                nvl(proyrp.valor,0) as valor_bruto,

                forpag.*

                from rvc_formato_pago_v forpag

                left join rvc_contrato_v cont
                on forpag.id_contrato = cont.id_contrato

                left join rvc_contratista_v contra
                on forpag.id_contratista = contra.id_contratista

                left join ts_tc tc
                on tc.id = contra.tipo_cuenta

                left join rvc_numero_pago nump
                on nump.id_numero_pago = forpag.id_numero_pago

                left join(

                    select
                    id_formato_pago,
                    to_char(wm_concat(distinct id_rp)) as id_rp,
                    to_char(wm_concat(distinct vigencia_rp)) as vigencia_rp,
                    is_rp_sgr,
                    sum(valor) as valor
                    from
                    rvc_formato_proy_rp
                    where
                    valor != 0
                    group by
                    id_formato_pago,
                    /*id_rp,
                    vigencia_rp,*/
                    is_rp_sgr

                )proyrp
                on proyrp.id_formato_pago = forpag.id_formato_pago

                where
                forpag.estado = 1
                and forpag.estado_general = 6
                and trunc(forpag.fecha_radicado) between to_date('$fecha_ini_text','yyyy-mm-dd') and to_date('$fecha_fin_text','yyyy-mm-dd')

            )tab0

            left join datos_compania dat
            on dat.id = 1

            where
            1 = 1
            $whereIdContratista
            $whereIdContrato
            $whereIdNumeroPago
            $whereTipoRecurso
            $whereUsuarioAsignado
            $filtro_clase_presup  

            order by
            tab0.fecha_radicado,
            tab0.radicado 
        )record         
    )tab0
            
    left join(
    
        select
        forrp.id_formato_pago,
        formproy.id_cpo,
        forrp.id_rp,
        forrp.vigencia_rp,
        forrp.is_rp_sgr,
        forrp.id_rubro,
        sum(forrp.valor) as valor,
        
        proy.codigo,
        rub.codigo_rubro_text as rubro,
        tiprec.codigo as tiprec,
        REPLACE(agrup.codigo,'0','') as ff,
        '01' as csf_ssf,
        
        max(forrp.tipo_gasto) as tipo_gasto,
        max(forrp.tipo_operacion) as tipo_operacion,
        max(forrp.uso_contable) as uso_contable,
        max(forrp.cuenta_contable) as cuenta_contable
        
        from rvc_formato_proy_rp forrp
        
        left join rvc_formato_proyecto formproy
        on formproy.id_formato_pago = forrp.id_formato_pago
        and formproy.id_proyecto_ep = forrp.id_proyecto_ep
        
        left join co_proyectos_all_v proy
        on proy.id = formproy.id_cpo
        and proy.sgr = formproy.sgr
        
        left join pr_rubro_pgnsgr_v rub
        on rub.id_rubro = forrp.id_rubro
        and rub.sgr = forrp.is_rp_sgr
        
        left join pr_tipo_rec tiprec
        on tiprec.id = forrp.id_tipo_rec
        
        left join pr_agrup_rec agrup
        on agrup.id = tiprec.id_agrup
        
        where
        forrp.valor != 0
        $filtro_rub        
        
        group by
        forrp.id_formato_pago,
        formproy.id_cpo,
        forrp.id_rp,
        forrp.vigencia_rp,
        forrp.is_rp_sgr,
        forrp.id_rubro,
        
        proy.codigo,
        rub.codigo_rubro_text,
        tiprec.codigo,
        agrup.codigo
    
    )proyrp
    on proyrp.id_formato_pago = tab0.id_formato_pago
    and proyrp.id_rp = tab0.id_rp_proyrp

    left join ccg_proyectos proyccg
    on proyccg.sgccode = proyrp.codigo
        
    order by
    tab0.consecutivo,
    proyrp.codigo,
    proyrp.rubro

)tab0 
EOD;
        //ejecutar sql
        $records = CN_TABLE::executeSQL($sql);

        $i = 1;
        //CONSECUTIVO;CONSEC_ITEM;PROYECTO;RUBRO;FUENTE;RECURSO;CSF_SSF;VALOR_BRUTO
        foreach ($records as $rec) {
            $records2["tipo2" . $i] = array(
                "CONSECUTIVO" => $rec['consecutivo'],
                "NUMERO_REGISTRO" => $rec['consec_item'],
                "PROYECTO" => $rec['proyecto'],
                "RUBRO" => $rec['rubro'],
                "FUENTE" => $rec['fuente'],
                "RECURSO" => $rec['recurso'],
                "CSF_SSF" => $rec['csf_ssf'],
                "VALOR_BRUTO" => $rec['valor_bruto']
            );
            /*
             * contador filas
             */
            $i++;
        }


        //En linux 
        $salto_linea = "\n"; //variable global para manejo del salto de linea
        //En windows 
        $salto_linea = "\r\n"; //variable global para manejo del salto de linea


        /**
         * Generar archivos de excel
         */
        $cabecera1 = "CONSECUTIVO;PCI;FECHA;OBLIGACION;UNIDAD;PAC;FECHA_OBLIGACION;VALOR_ACTUAL;TIPO_BENEFICIARIO;MEDIO_PAGO;TESORERIA_DTN;TIPO_DOC;NUM_DOC;CUENTA;TIPO_CUENTA;FECHA_PAGO;DOCUMENTO_SOP;DOC_COMPROMISO;FECHA_DOC_COMPROMISO;CARGO_FIJO;CONTRATISTA;CARGO;TEXTO" . $salto_linea;
        $cabecera2 = "CONSECUTIVO;CONSEC_ITEM;PROYECTO;RUBRO;FUENTE;RECURSO;CSF_SSF;VALOR_BRUTO" . $salto_linea;


        //Cabecera
        $nombre = "SIGPAA Cabecera " . $codigolog . $recurso;
        if ($type == 'xls') {
            $this->archivoExcelHtml($nombre, $records1, $cabecera1, $type);
        } else {
            $this->archivoExcel($nombre, $records1, $cabecera1, $type);
        }
        //Items Rubros
        $nombre = "SIGPAA Detalle " . $codigolog . $recurso;
        if ($type == 'xls') {
            $this->archivoExcelHtml($nombre, $records2, $cabecera2, $type);
        } else {
            $this->archivoExcel($nombre, $records2, $cabecera2, $type);
        }
    }

    /**
     * Generacion de archivo en excel
     * 
     * @param type $nombre
     * @param type $records
     * @param type $cabecera
     */
    function archivoExcelHtml($nombre, $records, $cabecera, $type = "xls") {

        $this->logMessage("Generacion de archivo en excel-Html, nombre: " . $nombre);

        try {

            //$sepa = "|"; ???

            $scarpeta = "uploads"; //carpeta donde guardar el archivo.

            $sfile = $scarpeta . "/archivos_siif/" . $nombre . "." . $type; //ruta del archivo a generar
            $fp = fopen($sfile, "w");

            //CABECERA DE LOS ARCHIVOS
            $cabecera = explode(';', $cabecera);

            //$shtml = "<table border='1'><tr>";
            $shtml = "<table><tr>";
            foreach ($cabecera as $key => $value) {
                $shtml .= "<td>" . $value . "</td>";
            }
            $shtml .= "</tr>";

            //cuerpo del excel
            foreach ($records as $rec) {//fila
                $shtml .= "<tr>";

                $cont_fila = 1;
                
                foreach ($rec as $key => $value) {//campo
                    if ($key == 'CONSECUTIVO' || $key == 'FECHA' || $key == 'FECHA_PAGO' || $key == 'FECHA_DOC_COMPROMISO' || $key == 'FECHA_OBLIGACION' || $key == 'PCICONEXION' || $key == 'TIPO_CUENTA' || $key == 'UNIDAD' || $key == 'TESORERIA_DTN' || $key == 'PAC' || $key == 'TIPO_DOC' || $key == 'CUENTA' || $key == 'DOC_COMPROMISO') {
                        $shtml .= "<td style='mso-number-format:\@'>" . $value . "</td>"; //formato de texto
                    } else if ($key == 'VALOR' || $key == 'VALOR_IVA' || $key == 'VALOR_BRUTO' || $key == 'BASE_GRAVABLE' || $key == 'VALOR_DEDUCCION' || $key == 'VALOR_ACTUAL') {
                        $shtml .= "<td>" . str_replace('.', ',', $value) . "</td>";
                    } else {
                        $shtml .= "<td>" . $value . "</td>";
                    }

                    $cont_fila++;

                    if ($cont_fila > count($cabecera)) {
                        break;
                    }
                }

                $shtml .= "</tr>";
            }
            //datos
//            $shtml.="<tr>";
//            $shtml.="<td>CONSECUTI</td>";
//            $shtml.="<td>FECHA_CON</td>";
//            $shtml.="<td>TIPO_DOC</td>";
//            $shtml.="<td>NUMERO_DOC</td>";
//            $shtml.="<td>DESCRIPCIO</td>";
//            $shtml.="</tr>";

            $shtml .= "</table>";
            //echo $shtml;die();

            fwrite($fp, $shtml);
            fclose($fp);
            $sfile = "../../" . $sfile;
        } catch (Exception $exc) {

            $this->logMessage("Error: " . $exc);
        }
    }

    /**
     * Generacion de archivo en excel CSV
     * 
     * @param type $nombre
     * @param type $records
     * @param type $cabecera
     */
    function archivoExcel($nombre, $records, $cabecera, $type = "xls") {

        $this->logMessage("Generacion de archivo en excel-CSV, nombre: " . $nombre);

        //En linux 
        $salto_linea = "\n"; //variable global para manejo del salto de linea
        //En windows 
        $salto_linea = "\r\n"; //variable global para manejo del salto de linea


        $html_sp = "'\t";
        if ($type == 'xls') {
            $html_sp = ";";
            $type = "csv";
        }
        if ($type == 'txt') {
            $html_sp = "|";
        }

        //CABECERA DE LOS ARCHIVOS
        $cabecera_cant = explode(';', $cabecera);
        $cabecera = str_replace(";", $html_sp, $cabecera);

        try {

            $scarpeta = "uploads"; //carpeta donde guardar el archivo.

            $sfile = $scarpeta . "/archivos_siif/" . $nombre . "." . $type; //ruta del archivo a generar
            $fp = fopen($sfile, "w");

            //cabecera
            $shtml = "";
            if ($type != 'txt') {
                $shtml = $cabecera;
            }
            $shtml .= "";

            //cuerpo del excel
            foreach ($records as $rec) {//fila
                //echo ($rec);
                //var_dump($rec);
                //tag
                $tag = false;

                $cont_fila = 1;

                foreach ($rec as $key => $value) {//campo

                    /*
                     * valida que coloque el separador solo despues del primer registro
                     */
                    if ($tag) {
                        $shtml .= $html_sp;
                    } else {
                        $tag = true;
                    }

                    //echo ($key . " - " . $value . " " );
                    if ($type == 'txt') {
                        $shtml .= "" . $value;
                    } else {
                        $shtml .= "" . str_replace('.', ',', $value);
                    }

                    $cont_fila++;

                    if ($cont_fila > count($cabecera_cant)) {
                        break;
                    }
                }
                //echo " <br>";
                $shtml .= $salto_linea;
            }

            fwrite($fp, $shtml);
            fclose($fp);
            $sfile = "../../" . $sfile;
        } catch (Exception $exc) {

            $this->logMessage("Error: " . $exc);
        }
    }

    /**
     * Generar el archivo .ZIP
     * 
     * @param type $ruta
     * @param type $nombre
     */
    function generarArchivoZip($ruta, $nombre) {

        //echo "generarArchivoZip";die();

        /**
         * Generar el archivo .ZIP
         */
        /*
          $zip = new ZipArchive();
          $filename = "uploads/archivos_siif/con.zip";

          if ($zip->open($filename, ZipArchive::CREATE) !== TRUE) {
          echo("No se pudo abrir <$filename>\n");
          die();
          }

          $zip->addFile("uploads/archivos_siif/c1.xls", "c1.xls");
          $zip->addFile("c2.xls", "c2.xls");

          echo "numficheros: " . $zip->numFiles . "\n";
          echo "estado:" . $zip->status . "\n";
          $zip->close();
         */


        $error = ""; //error holder
        if (true) {

            //$file_folder = "uploads/archivos_siif/"; // folder to load files
            $file_folder = $ruta;
            if (extension_loaded('zip')) {

                // Checking files are selected
                $zip = new ZipArchive(); // Load zip library 
                $zip_name = $file_folder . $nombre; // Zip name
                if ($zip->open($zip_name, ZIPARCHIVE::CREATE) !== TRUE) {
                    // Opening zip file to load files
                    $error .= "* Sorry ZIP creation failed at this time";
                }


                $directorio = opendir($file_folder); //ruta actual
                while ($archivo = readdir($directorio)) { //obtenemos un archivo y luego otro sucesivamente
                    if (is_dir($archivo)) {//verificamos si es o no un directorio
                        echo "[" . $archivo . "]<br />"; //de ser un directorio lo envolvemos entre corchetes
                    } else {
                        $zip->addFile($file_folder . $archivo); // Adding files into zip
                        echo $archivo . "<br />";
                    }
                }
//                foreach ($post['files'] as $file) {
//                $zip->addFile($file_folder . "c1.xls"); // Adding files into zip
//                $zip->addFile($file_folder . "c2.xls"); // Adding files into zip
//                }
                $zip->close();
                ob_clean(); //Para problemas del windows - 20220411

                if (file_exists($zip_name)) {
                    // push to download the zip
                    header('Content-type: application/zip');
                    header('Content-Disposition: attachment; filename="' . $nombre . '"');
                    readfile($zip_name);
                    // remove zip file is exists in temp path
                    unlink($zip_name);
                }
            } else {
                $error .= "You dont have ZIP extension ";
                echo "GenerarArchivoZip - " . $error;
                die();
            }
        }
    }

}
