<?php

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

    /**
     * Metodo list de accesos
     *
     * @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");

        /*
         * Manejo de errores
         */
        try {

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

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

            //ordenar consulta
            if (isset($request['_sortBy'])) {
                $sortBy = " Order by " . $request['_sortBy'];
            } else {
                $sortBy = 'order by tab0.id_excedente';
            }
            //and id_mae_ter = 1
            $whereTitulo = '';
            if (isset($request['id_referencia2'])) {
                $whereTitulo = "and tab0.id_referencia2 = '" . $request['id_referencia2'] . "'";
            }
            //and id_mae_ter = 1
            $whereTercero = '';
            if (isset($request['id_mae_ter'])) {
                $whereTercero = "and tab0.id_mae_ter = " . $request['id_mae_ter'];
            }
            //en_uso
            $whereEnUso = '';
            if (isset($request['en_uso'])) {
                if ($request['en_uso'] == 'true') {
                    //Si es true
                    $en_uso = 1;
                    $whereEnUso = " AND tab0.en_uso = 1 ";
                } elseif ($request['en_uso'] == '0') {
                    //Si es 0
                    $en_uso = 0;
                    $whereEnUso = " AND tab0.en_uso = 0 ";
                } else {
                    //Si es false
                    $en_uso = 0;
                    $whereEnUso = " ";
                }
            }
            //Filtro nuevo migracion SGC - 20200302
            $whereMigraExce = '';
            if (isset($request['migra_exce'])) {
                if ($request['migra_exce'] == 'true') {
                    //Si es true
                    $whereMigraExce = " AND tab0.id_excedente != 0 ";
                } elseif ($request['migra_exce'] == '0') {
                    //Si es 0
                    $whereMigraExce = " AND tab0.id_excedente = 0 ";
                } else {
                    //Si es false
                    $whereMigraExce = " ";
                }
            }

            /*
             * variables de filtro
             */

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from(

select
tab0.id_excedente,
tab0.id_credito,
tab0.fecha_proceso_cre,
tab0.valor,
tab0.en_uso,
case when tab0.en_uso = 0 then 'Activa' else 'Cancelada' end as text_uso,
tab0.id_credito_aplicado,
tab0.id_nov_devol_exced,
tab0.id_anhos,
tab0.id_punto_venta,
tab0.nombre_pv,
tab0.id_tipo_credito,
tab0.descripcion_tipcre,
tab0.sec_credito, 
tab0.id_con_credito,
tab0.descripcion_concre,
tab0.desc_corta_concre,
tab0.id_bn,
tab0.codigo_bn,
tab0.descripcion_bn,
tab0.id_cb,
tab0.numero_cuenta,
tab0.observaciones,
tab0.estado, 
tab0.fecha_anu,
tab0.motivo_anu, 
tab0.fecha,
tab0.id_ts_td,
tab0.num_doc,
tab0.descripcion_td,
tab0.id_mae_ter,
tab0.valor_total_nc,

tab0.nitocc,
tab0.razon_soc,
tab0.tercero,

to_char(wm_concat(distinct tab0.id_referencia2)) as id_referencia2,
to_char(wm_concat(tab0.sec_debito)) as sec_debito,
to_char(wm_concat(tab0.fecha_proceso)) as fecha_proceso

from(
    
    select 
    exced.*,
    cred.id_anhos as id_anhos,
    to_char(cred.fecha_proceso, 'YYYY-MM-DD')  AS fecha_proceso_cre,
    cred.id_punto_venta,
    punto.nombre AS nombre_pv,
    cred.id_tipo_credito as id_tipo_credito,
    tipcre.descripcion AS descripcion_tipcre,
    cred.sec_credito as sec_credito, 
    cred.id_con_credito as id_con_credito,
    concre.descripcion AS descripcion_concre,
    concre.desc_corta  AS desc_corta_concre,
    cred.id_bn as id_bn,
    bn.codigo      AS codigo_bn,
    bn.descripcion AS descripcion_bn,
    cred.id_cb as id_cb,
    cb.numero_cuenta,
    cred.observaciones as observaciones,
    cred.estado as estado, to_char(cred.fecha_anu, 'YYYY-MM-DD') as fecha_anu,
    cred.motivo_anu as motivo_anu, to_char(cred.fecha, 'YYYY-MM-DD') as fecha,
    cred.num_doc,
    cred.id_ts_td as id_ts_td,
    td.descripcion as descripcion_td,
    --cred.id_mae_ter as id_mae_ter,
    cred.valor as valor_total_nc,
    
    tab1.num_doc as nitocc,
    tab1.razon_soc as razon_soc,
    tab1.num_doc||' - '||tab1.razon_soc as tercero,
    
    debref.id_referencia2,
    debcre.sec_debito,
    to_char(debcre.fecha_proceso, 'YYYY-MM-DD') as fecha_proceso
    
    from ca_excedentes exced
    
    join ca_credito cred
    on exced.id_credito = cred.id_credito
    
    JOIN ca_con_credito concre
    ON concre.id_con_credito = cred.id_con_credito
    JOIN ca_tipo_credito tipcre
    ON tipcre.id_tipo_credito = cred.id_tipo_credito
    JOIN ca_punto_venta punto
    ON punto.id_punto_venta = cred.id_punto_venta
    JOIN ts_td td
    ON td.id = cred.id_ts_td
    LEFT JOIN ts_bn bn
    ON bn.id_bn = cred.id_bn
    LEFT JOIN ts_cb cb
    ON Cb.Id_Cb = cred.Id_Cb
    
    JOIN INTERCEROS_v tab1 ON exced.id_mae_ter = tab1.id_mae_ter
    
    left join ca_debito_credito debcre
    on  debcre.id_credito = exced.id_credito
    
    left join ca_debito_ref debref
    on debref.id_debito = debcre.id_debito
                    
     UNION

    select
    0 as ID_EXCEDENTE,
    cmc.ID_CREDITO,
    cmc.vradicion as VALOR,
    case when cmc.vradicion != 0 then 0 else 1 end as EN_USO,
    null as ID_CREDITO_APLICADO,
    null as ID_NOV_DEVOL_EXCED,
    null as ID_MAE_TER,
    cred.id_anhos as id_anhos,
    to_char(cred.fecha_proceso, 'YYYY-MM-DD')  AS fecha_proceso_cre,
    cred.id_punto_venta,
    punto.nombre AS nombre_pv,
    cred.id_tipo_credito as id_tipo_credito,
    tipcre.descripcion AS descripcion_tipcre,
    cred.sec_credito as sec_credito,
    cred.id_con_credito as id_con_credito,
    concre.descripcion AS descripcion_concre,
    concre.desc_corta  AS desc_corta_concre,
    cred.id_bn as id_bn,
    bn.codigo      AS codigo_bn,
    bn.descripcion AS descripcion_bn,
    cred.id_cb as id_cb,
    cb.numero_cuenta,
    cred.observaciones as observaciones,
    cred.estado as estado, to_char(cred.fecha_anu, 'YYYY-MM-DD') as fecha_anu,
    cred.motivo_anu as motivo_anu, to_char(cred.fecha, 'YYYY-MM-DD') as fecha,
    cred.num_doc,
    cred.id_ts_td as id_ts_td,
    td.descripcion as descripcion_td,
    --cred.id_mae_ter as id_mae_ter,
    cred.valor as valor_total_nc,

    tab1.num_doc as nitocc,
    tab1.razon_soc as razon_soc,
    tab1.num_doc||' - '||tab1.razon_soc as tercero,

    debref.id_referencia2,
    debcre.sec_debito,
    to_char(debcre.fecha_proceso, 'YYYY-MM-DD') as fecha_proceso

 from CA_MIGRA_CRE cmc

    join ca_credito cred
    on cmc.id_credito = cred.id_credito

    JOIN ca_con_credito concre
    ON concre.id_con_credito = cred.id_con_credito
    JOIN ca_tipo_credito tipcre
    ON tipcre.id_tipo_credito = cred.id_tipo_credito
    JOIN ca_punto_venta punto
    ON punto.id_punto_venta = cred.id_punto_venta
    JOIN ts_td td
    ON td.id = cred.id_ts_td
    LEFT JOIN ts_bn bn
    ON bn.id_bn = cred.id_bn
    LEFT JOIN ts_cb cb
    ON Cb.Id_Cb = cred.Id_Cb
    
    JOIN INTERCEROS_v tab1 ON cred.id_mae_ter = tab1.id_mae_ter

    left join ca_debito_credito debcre
    on  debcre.id_credito = cmc.id_credito

    left join ca_debito_ref debref
    on debref.id_debito = debcre.id_debito

)tab0
WHERE
1 = 1
$whereTitulo
$whereTercero    
$whereEnUso 
$whereMigraExce     

group by
tab0.id_excedente,
tab0.id_credito,
tab0.fecha_proceso_cre,
tab0.valor,
tab0.en_uso,
tab0.id_credito_aplicado,
tab0.id_nov_devol_exced,
tab0.id_anhos,
tab0.id_punto_venta,
tab0.nombre_pv,
tab0.id_tipo_credito,
tab0.descripcion_tipcre,
tab0.sec_credito, 
tab0.id_con_credito,
tab0.descripcion_concre,
tab0.desc_corta_concre,
tab0.id_bn,
tab0.codigo_bn,
tab0.descripcion_bn,
tab0.id_cb,
tab0.numero_cuenta,
tab0.observaciones,
tab0.estado, 
tab0.fecha_anu,
tab0.motivo_anu, 
tab0.fecha,
tab0.id_ts_td,
tab0.num_doc,
tab0.descripcion_td,
tab0.id_mae_ter,
tab0.valor_total_nc,

tab0.nitocc,
tab0.razon_soc,
tab0.tercero

)tabla
EOD;

            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];

            //validar si hay registros
            if ($total_record_count > 0) {


                /*
                 * Obtiene el registo de usuario si se encuentra autenticado
                 */
                $sql = <<<EOD
--SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (
 
select
tab0.id_excedente,
tab0.id_credito,
tab0.fecha_proceso_cre,
tab0.valor,
tab0.en_uso,
case when tab0.en_uso = 0 then 'Activa' else 'Cancelada' end as text_uso,
tab0.id_credito_aplicado,
tab0.id_nov_devol_exced,
tab0.id_anhos,
tab0.id_punto_venta,
tab0.nombre_pv,
tab0.id_tipo_credito,
tab0.descripcion_tipcre,
tab0.sec_credito, 
tab0.id_con_credito,
tab0.descripcion_concre,
tab0.desc_corta_concre,
tab0.id_bn,
tab0.codigo_bn,
tab0.descripcion_bn,
tab0.id_cb,
tab0.numero_cuenta,
tab0.observaciones,
tab0.estado, 
tab0.fecha_anu,
tab0.motivo_anu, 
tab0.fecha,
tab0.id_ts_td,
tab0.num_doc,
tab0.descripcion_td,
tab0.id_mae_ter,
tab0.valor_total_nc,

tab0.nitocc,
tab0.razon_soc,
tab0.tercero,

to_char(wm_concat(distinct tab0.id_referencia2)) as id_referencia2,
to_char(wm_concat(tab0.sec_debito)) as sec_debito,
to_char(wm_concat(tab0.fecha_proceso)) as fecha_proceso

from(
    
    select 
    exced.*,
    cred.id_anhos as id_anhos,
    to_char(cred.fecha_proceso, 'YYYY-MM-DD')  AS fecha_proceso_cre,
    cred.id_punto_venta,
    punto.nombre AS nombre_pv,
    cred.id_tipo_credito as id_tipo_credito,
    tipcre.descripcion AS descripcion_tipcre,
    cred.sec_credito as sec_credito, 
    cred.id_con_credito as id_con_credito,
    concre.descripcion AS descripcion_concre,
    concre.desc_corta  AS desc_corta_concre,
    cred.id_bn as id_bn,
    bn.codigo      AS codigo_bn,
    bn.descripcion AS descripcion_bn,
    cred.id_cb as id_cb,
    cb.numero_cuenta,
    cred.observaciones as observaciones,
    cred.estado as estado, to_char(cred.fecha_anu, 'YYYY-MM-DD') as fecha_anu,
    cred.motivo_anu as motivo_anu, to_char(cred.fecha, 'YYYY-MM-DD') as fecha,
    cred.num_doc,
    cred.id_ts_td as id_ts_td,
    td.descripcion as descripcion_td,
    --cred.id_mae_ter as id_mae_ter,
    cred.valor as valor_total_nc,
    
    tab1.num_doc as nitocc,
    tab1.razon_soc as razon_soc,
    tab1.num_doc||' - '||tab1.razon_soc as tercero,
    
    debref.id_referencia2,
    debcre.sec_debito,
    to_char(debcre.fecha_proceso, 'YYYY-MM-DD') as fecha_proceso
    
    from ca_excedentes exced
    
    join ca_credito cred
    on exced.id_credito = cred.id_credito
    
    JOIN ca_con_credito concre
    ON concre.id_con_credito = cred.id_con_credito
    JOIN ca_tipo_credito tipcre
    ON tipcre.id_tipo_credito = cred.id_tipo_credito
    JOIN ca_punto_venta punto
    ON punto.id_punto_venta = cred.id_punto_venta
    JOIN ts_td td
    ON td.id = cred.id_ts_td
    LEFT JOIN ts_bn bn
    ON bn.id_bn = cred.id_bn
    LEFT JOIN ts_cb cb
    ON Cb.Id_Cb = cred.Id_Cb
    
    JOIN INTERCEROS_v tab1 ON exced.id_mae_ter = tab1.id_mae_ter
    
    left join ca_debito_credito debcre
    on  debcre.id_credito = exced.id_credito
    
    left join ca_debito_ref debref
    on debref.id_debito = debcre.id_debito
                        
                        UNION

    select
    0 as ID_EXCEDENTE,
    cmc.ID_CREDITO,
    cmc.vradicion as VALOR,
    case when cmc.vradicion != 0 then 0 else 1 end as EN_USO,
    null as ID_CREDITO_APLICADO,
    null as ID_NOV_DEVOL_EXCED,
    null as ID_MAE_TER,
    cred.id_anhos as id_anhos,
    to_char(cred.fecha_proceso, 'YYYY-MM-DD')  AS fecha_proceso_cre,
    cred.id_punto_venta,
    punto.nombre AS nombre_pv,
    cred.id_tipo_credito as id_tipo_credito,
    tipcre.descripcion AS descripcion_tipcre,
    cred.sec_credito as sec_credito,
    cred.id_con_credito as id_con_credito,
    concre.descripcion AS descripcion_concre,
    concre.desc_corta  AS desc_corta_concre,
    cred.id_bn as id_bn,
    bn.codigo      AS codigo_bn,
    bn.descripcion AS descripcion_bn,
    cred.id_cb as id_cb,
    cb.numero_cuenta,
    cred.observaciones as observaciones,
    cred.estado as estado, to_char(cred.fecha_anu, 'YYYY-MM-DD') as fecha_anu,
    cred.motivo_anu as motivo_anu, to_char(cred.fecha, 'YYYY-MM-DD') as fecha,
    cred.num_doc,
    cred.id_ts_td as id_ts_td,
    td.descripcion as descripcion_td,
    --cred.id_mae_ter as id_mae_ter,
    cred.valor as valor_total_nc,

    tab1.num_doc as nitocc,
    tab1.razon_soc as razon_soc,
    tab1.num_doc||' - '||tab1.razon_soc as tercero,

    debref.id_referencia2,
    debcre.sec_debito,
    to_char(debcre.fecha_proceso, 'YYYY-MM-DD') as fecha_proceso

 from CA_MIGRA_CRE cmc

    join ca_credito cred
    on cmc.id_credito = cred.id_credito

    JOIN ca_con_credito concre
    ON concre.id_con_credito = cred.id_con_credito
    JOIN ca_tipo_credito tipcre
    ON tipcre.id_tipo_credito = cred.id_tipo_credito
    JOIN ca_punto_venta punto
    ON punto.id_punto_venta = cred.id_punto_venta
    JOIN ts_td td
    ON td.id = cred.id_ts_td
    LEFT JOIN ts_bn bn
    ON bn.id_bn = cred.id_bn
    LEFT JOIN ts_cb cb
    ON Cb.Id_Cb = cred.Id_Cb
    
    JOIN INTERCEROS_v tab1 ON cred.id_mae_ter = tab1.id_mae_ter

    left join ca_debito_credito debcre
    on  debcre.id_credito = cmc.id_credito

    left join ca_debito_ref debref
    on debref.id_debito = debcre.id_debito

)tab0
WHERE
1 = 1
$whereTitulo
$whereTercero    
$whereEnUso
$whereMigraExce                         

group by
tab0.id_excedente,
tab0.id_credito,
tab0.fecha_proceso_cre,
tab0.valor,
tab0.en_uso,
tab0.id_credito_aplicado,
tab0.id_nov_devol_exced,
tab0.id_anhos,
tab0.id_punto_venta,
tab0.nombre_pv,
tab0.id_tipo_credito,
tab0.descripcion_tipcre,
tab0.sec_credito, 
tab0.id_con_credito,
tab0.descripcion_concre,
tab0.desc_corta_concre,
tab0.id_bn,
tab0.codigo_bn,
tab0.descripcion_bn,
tab0.id_cb,
tab0.numero_cuenta,
tab0.observaciones,
tab0.estado, 
tab0.fecha_anu,
tab0.motivo_anu, 
tab0.fecha,
tab0.id_ts_td,
tab0.num_doc,
tab0.descripcion_td,
tab0.id_mae_ter,
tab0.valor_total_nc,

tab0.nitocc,
tab0.razon_soc,
tab0.tercero

$sortBy 
    
--) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart 
EOD;

                $records = CN_TABLE::executeSQL($sql);
                $this->logMessage("[ca_sal_excedentes] Exitoso.");
                $this->totalRows = $total_record_count;
                $this->startRow = $rowStart;
                $this->endRow = $rowEnd;
                $this->list_data = $records;
            } else {

                $id_usuario = 0;
                $this->logMessage("[ca_sal_excedentes] No Exitoso");
                $mensaje = "[ca_sal_excedentes] No hay registros de consulta.";
                $this->totalRows = 1;
                $this->startRow = $rowStart;
                $this->endRow = $rowEnd;
                $this->list_data = array();
                $this->logMessage($mensaje);
            }

            /*
             * registro de consulta en tabla de log
             */
            //$sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $cod_func, $observacion);
        } catch (Exception $e) {

            $this->status = 1;
            $this->mensajeError = "ERROR!!!";
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
