<?php

/**
 * est_cta_cliente actions.
 *
 * @package    cartera
 * @subpackage est_cta_cliente
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class est_cta_clienteActions 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");



        /*
         * 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.TIPO,tab0.NUMERO ';
        }


        //solo imprime log la primera vez de consulta
        if ($rowStart == 0) {

            /*
             * variables por defecto para el registro de log
             */
            $id_tabla = 'null';
            $id_vigencia = 'null';
            $id_cen_op = 'null';

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

            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('CA_SALDOS_DEB_VIGPER ');

            //1 - indica operacion de consulta
            $id_ope_bd = 1;

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }
            $usuario = 'admin';
            if (isset($request['username'])) {
                if (!is_null($request['username']) && $request['username'] != '') {
                    $usuario = $request['username'];
                }
            }
            $comando = 'sin comando';
            if (isset($request['comando'])) {
                $comando = $request['comando'];
            }
            //construir observacion
            $observacion = "'Se consulto estado cuenta por cliente desde la funcionalidad: " . $comando . "'";

            $id_punto_venta_log = 'null';
            if (isset($request['punto_venta_log'])) {
                $id_punto_venta_log = $request['punto_venta_log'];
            }

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $id_punto_venta_log);

            //ejecuta el sql
            CN_TABLE::executeSQL($sql);
        }

        //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
             */
            //tab1.fecha_proceso <= to_date('31/05/2012','DD/MM/YYYY')
            //Periodo-vigencia
            $fecha_fin = $request['fecha_fin'];
            $id_mae_ter = $request['id_mae_ter'];
            $id_meses = $request['id_meses'];
            $id_anhos = $request['id_anhos'];
            
            
            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (
select tab0.TIPO,tab0.NUMERO,tab0.FECHA,tab0.CONCEPTO,tab0.VALOR,tab0.SALDO
FROM(

select case when tab9.razon_soc IS NULL then tab9.pnombre||' '||tab9.snombre||' '||tab9.papellido||' '||tab9.sapellido else tab9.razon_soc end AS BENEF,
tab4.desc_corta AS TIPO,tab1.sec_debito AS NUMERO,tab1.fecha_proceso AS FECHA, tab8.concepto AS CONCEPTO, tab1.valor_bruto AS VALOR,nvl(tab3.saldo_actual,0) SALDO

FROM CA_DEBITO tab1

JOIN ca_vencimientos tab2 ON tab2.id_debito = tab1.id_debito
LEFT JOIN ca_saldos tab3 ON tab3.id_debito  = tab2.id_debito
AND tab3.id_vencimiento = tab2.id_vencimiento and tab3.id_meses=$id_meses and tab3.id_anhos=$id_anhos

LEFT JOIN CA_TIPO_DEBITO tab4 ON tab4.id_tipo_debito = tab1.id_tipo_debito
LEFT JOIN
(
select tab5.id_debito,tab6.codigo||' '||tab6.descripcion AS CONCEPTO
FROM CA_DEBITO_DETALLE tab5
LEFT JOIN CA_PRODUCTO tab6 ON tab6.id_producto = tab5.id_producto
where tab5.id_debito_detalle IN (select max(tab7.id_debito_detalle) from CA_DEBITO_DETALLE tab7 where tab7.id_debito_detalle = tab5.id_debito_detalle)
)tab8 ON tab1.id_debito = tab8.id_debito

LEFT JOIN INTERCEROS tab9 ON tab9.id_mae_ter=tab1.id_mae_ter

WHERE tab1.id_mae_ter=$id_mae_ter and tab1.fecha_proceso<=to_date('$fecha_fin','YYYY-MM-DD')
) tab0
where tab0.SALDO>0
)

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) {


                //sentencia sql del informe
                $sql = <<<EOD

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

select tab0.TIPO,tab0.NUMERO,tab0.FECHA,tab0.CONCEPTO,tab0.VALOR,tab0.SALDO
FROM(

select case when tab9.razon_soc IS NULL then tab9.pnombre||' '||tab9.snombre||' '||tab9.papellido||' '||tab9.sapellido else tab9.razon_soc end AS BENEF,
tab4.desc_corta AS TIPO,tab1.sec_debito AS NUMERO,tab1.fecha_proceso AS FECHA, tab8.concepto AS CONCEPTO, tab1.valor_bruto AS VALOR,nvl(tab3.saldo_actual,0) SALDO

FROM CA_DEBITO tab1

JOIN ca_vencimientos tab2 ON tab2.id_debito = tab1.id_debito
LEFT JOIN ca_saldos tab3 ON tab3.id_debito  = tab2.id_debito
AND tab3.id_vencimiento = tab2.id_vencimiento and tab3.id_meses=$id_meses and tab3.id_anhos=$id_anhos

LEFT JOIN CA_TIPO_DEBITO tab4 ON tab4.id_tipo_debito = tab1.id_tipo_debito
LEFT JOIN
(
select tab5.id_debito,tab6.codigo||' '||tab6.descripcion AS CONCEPTO
FROM CA_DEBITO_DETALLE tab5
LEFT JOIN CA_PRODUCTO tab6 ON tab6.id_producto = tab5.id_producto
where tab5.id_debito_detalle IN (select max(tab7.id_debito_detalle) from CA_DEBITO_DETALLE tab7 where tab7.id_debito_detalle = tab5.id_debito_detalle)
)tab8 ON tab1.id_debito = tab8.id_debito

LEFT JOIN INTERCEROS tab9 ON tab9.id_mae_ter=tab1.id_mae_ter

WHERE tab1.id_mae_ter=$id_mae_ter and tab1.fecha_proceso<=to_date('$fecha_fin','YYYY-MM-DD')
) tab0
where tab0.SALDO>0
  $sortBy              


) 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 = 0;
                $this->endRow = count($records);
                $this->list_data = $records;
                $this->logMessage("[est_cue_res_debito] Consulta exitosa.");
            } else {

                $mensaje = "[est_cue_res_debito] No hay registros de consulta.";
                $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());
        }
    }

    /**
     * Metodo para sumar informe cartera edades
     *
     * @param sfWebRequest $request
     */
    public function executeSum(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 {


            /*
             * Variables obligatorias
             */
            //tab0.vig_per between '201201' and '201204'
            //Periodo-vigencia
           //tab1.fecha_proceso <= to_date('31/05/2012','DD/MM/YYYY')
            //Periodo-vigencia
            $fecha_fin = $request['fecha_fin'];
            $id_mae_ter = $request['id_mae_ter'];
            $id_meses = $request['id_meses'];
            $id_anhos = $request['id_anhos'];
        
            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD

select

'TOTALES - Saldo: '  || count(*)  as NUMERO,
sum(SALDO) as SALDO

from(

select tab0.TIPO,tab0.NUMERO,tab0.FECHA,tab0.CONCEPTO,tab0.VALOR,tab0.SALDO
FROM(

select case when tab9.razon_soc IS NULL then tab9.pnombre||' '||tab9.snombre||' '||tab9.papellido||' '||tab9.sapellido else tab9.razon_soc end AS BENEF,
tab4.desc_corta AS TIPO,tab1.sec_debito AS NUMERO,tab1.fecha_proceso AS FECHA, tab8.concepto AS CONCEPTO, tab1.valor_bruto AS VALOR,nvl(tab3.saldo_actual,0) SALDO

FROM CA_DEBITO tab1

JOIN ca_vencimientos tab2 ON tab2.id_debito = tab1.id_debito
LEFT JOIN ca_saldos tab3 ON tab3.id_debito  = tab2.id_debito
AND tab3.id_vencimiento = tab2.id_vencimiento and tab3.id_meses=$id_meses and tab3.id_anhos=$id_anhos

LEFT JOIN CA_TIPO_DEBITO tab4 ON tab4.id_tipo_debito = tab1.id_tipo_debito
LEFT JOIN
(
select tab5.id_debito,tab6.codigo||' '||tab6.descripcion AS CONCEPTO
FROM CA_DEBITO_DETALLE tab5
LEFT JOIN CA_PRODUCTO tab6 ON tab6.id_producto = tab5.id_producto
where tab5.id_debito_detalle IN (select max(tab7.id_debito_detalle) from CA_DEBITO_DETALLE tab7 where tab7.id_debito_detalle = tab5.id_debito_detalle)
)tab8 ON tab1.id_debito = tab8.id_debito

LEFT JOIN INTERCEROS tab9 ON tab9.id_mae_ter=tab1.id_mae_ter

WHERE tab1.id_mae_ter=$id_mae_ter and tab1.fecha_proceso<=to_date('$fecha_fin','YYYY-MM-DD')
) tab0
where tab0.SALDO>0

)

EOD;

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



            $this->totalRows = count($records);
            $this->startRow = 0;
            $this->endRow = count($records);
            $this->list_data = $records;
            $this->logMessage("[est_cue_res_debito] Consulta exitosa.");
        } catch (Exception $e) {

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

}
