<?php

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

    /**
     * Obtener records para los saldos
     *
     * @param sfWebRequest $request
     */
    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");


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


        /*
         * Manejo de errores
         */
        try {



            /*
             * Variables obligatorias
             */
            if (isset($request['id_anhos'])) {
                $id_anhos = $request['id_anhos'];
            }
            if (isset($request['id_meses'])) {
                $id_meses = $request['id_meses'];
            }

            if (isset($request['id_referencia_2'])) {
                $id_referencia_2 = $request['id_referencia_2'];
            }

            if (isset($request['comando_accion'])) {
                $comando_accion = $request['comando_accion'];
            }


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

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

            $id_username = $request['id_username'];




            $sql = <<<EOD
SELECT to_char(wm_concat(distinct tab0.id_producto)) as id_producto from ca_tipo_calculo tab0 where tab0.comando = '$comando_accion'
EOD;
            $consec = CN_TABLE::executeSQL($sql);


            $id_producto = $consec[0]['id_producto'];
            //$id_tipo_calculo = $consec[0]['id_tipo_calculo'];

            $where = "";
            if ($id_producto != "") {
                //Incidente #4842, cambio para todos los productos segun comando - 20161025
                $where.=" and tab3.id_producto in ( " . $id_producto . ")";
            }

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

select tab6.num_doc, tab6.razon_soc,tab0.id_meses_sal as id_meses, tab0.id_anhos_sal as id_anhos,tab0.id_debito,tab5.sec_debito, tab1.id_referencia2 as titulo, tab0.saldo_actual as capital, tab3.codigo||' - '|| tab3.descripcion as concepto, tab0.periodo_ini, tab0.periodo_fin, tab5.fecha_vencimiento

from ca_debito_saldos tab0

left join ca_debito tab5 ON tab5.id_debito = tab0.id_debito

left join ca_debito_ref tab1 ON tab1.id_debito = tab0.id_debito

left join (
  SELECT 
   deta.*,
   ROW_NUMBER() OVER (
    PARTITION BY deta.id_debito
    ORDER BY deta.id_debito desc
   ) AS rn
   from ca_debito_detalle deta
) tab2 ON tab2.id_debito = tab0.id_debito

join ca_producto tab3 ON tab3.id_producto = tab2.id_producto

join interceros_v tab6 ON tab6.id_mae_ter = tab5.id_mae_ter   

where tab0.id_anhos_sal=$id_anhos and tab0.id_meses_sal = $id_meses and tab0.saldo_actual>0 and tab1.id_referencia2 = '$id_referencia_2'
                    and tab5.fecha_vencimiento IS NOT NULL
$where

)
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 los registros de debito/vencimiento con su saldo respectivo
                 */
                $sql = <<<EOD

SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

select tab6.num_doc, tab6.razon_soc,tab0.id_meses_sal as id_meses, tab0.id_anhos_sal as id_anhos,tab0.id_debito,tab5.sec_debito, tab1.id_referencia2 as titulo, tab0.saldo_actual as capital, tab3.codigo||' - '|| tab3.descripcion as concepto, tab0.periodo_ini, tab0.periodo_fin, tab5.fecha_vencimiento

from ca_debito_saldos tab0

left join ca_debito tab5 ON tab5.id_debito = tab0.id_debito

left join ca_debito_ref tab1 ON tab1.id_debito = tab0.id_debito

left join (
  SELECT 
   deta.*,
   ROW_NUMBER() OVER (
    PARTITION BY deta.id_debito
    ORDER BY deta.id_debito desc
   ) AS rn
   from ca_debito_detalle deta
) tab2 ON tab2.id_debito = tab0.id_debito

join ca_producto tab3 ON tab3.id_producto = tab2.id_producto

join interceros_v tab6 ON tab6.id_mae_ter = tab5.id_mae_ter   

where tab0.id_anhos_sal=$id_anhos and tab0.id_meses_sal = $id_meses and tab0.saldo_actual>0 and tab1.id_referencia2 = '$id_referencia_2'
                         and tab5.fecha_vencimiento IS NOT NULL
$where
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;

                //ejecuta y obtiene el resultado del sql
                $records = CN_TABLE::executeSQL($sql);




                $this->totalRows = $total_record_count;
                $this->startRow = $rowStart;
                $this->endRow = $rowStart + count($records);
                $this->list_data = $records;
                $this->logMessage("[INFORME EDADES] Consulta exitosa.");
            } else {

                $mensaje = "[INFORME EDADES] No hay registros debito.";
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {

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

}
