<?php

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

    /**
     * Incidente #6514 - Calculadora web - 20171109
     *
     * @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");


        //manejo de errores
        try {

            /**
             * Variable de consulta
             */
            $fecha_ini = $request['fecha_pago_oportuno'];
            $fecha_fin = $request['fecha_pago'];
            $tipo_interes = $request['tipo_interes'];
            $valor_capital = str_replace(".", "", $request['valor_capital']);
            $valor_capital = explode(",", $valor_capital);
            $valor_capital = $valor_capital[0];

            $vig_ini = substr($fecha_ini, 0, 4);
            $mes_ini = substr($fecha_ini, 5, 2);
            $dia_ini = substr($fecha_ini, 8, 2);
            $vig_fin = substr($fecha_fin, 0, 4);
            $mes_fin = substr($fecha_fin, 5, 2);
            $dia_fin = substr($fecha_fin, 8, 2);

            
            /**
             * Obtener valor de la base de datos
             * 0 - Tasa Normal 12%
             * 1 - Tasa Usura
             * 2 - Indexación - calculo de indexacion VR = VH x (IPC actual/IPC inicial) IPC actual mes anterior del filtro fecha final
             */
            $this->logMessage('Tasa interes = ' . $tipo_interes);

            //Sql
            $sql = <<<EOD
select

0 as id_calculadora_intereses, 
'$fecha_ini' as fecha_pago_oportuno, 
'$fecha_fin' as fecha_pago, 
$valor_capital as valor_capital, 
                    
nvl(case
    when $tipo_interes = 0 then consulta_sql_interes_normal@CAN($vig_ini,$mes_ini,$dia_ini,
                                    $vig_fin,$mes_fin,
                                    '$fecha_ini','$fecha_fin',$valor_capital,1)
    when $tipo_interes = 1 then consulta_sql_interes@CAN($vig_ini,$mes_ini,
                                    $vig_fin,$mes_fin,
                                    '$fecha_ini','$fecha_fin',$valor_capital)
    when $tipo_interes = 2 then round( nvl(round($valor_capital),0) * (
                                (
                            (
                                (SELECT
nvl(max(valor),0) as valor
FROM ca_ipc
where
id_anhos = EXTRACT(YEAR FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_fin', 'yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_fin', 'yyyy-mm-dd')) , 'dd/mm/yyyy') - 1))
and id_meses = EXTRACT(MONTH FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_fin', 'yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_fin', 'yyyy-mm-dd')) , 'dd/mm/yyyy') - 1) )
)
                            )/(
                                (SELECT
case when nvl(max(valor),1) = 0 then 1 else nvl(max(valor),1) end as valor
FROM ca_ipc
where
id_anhos = EXTRACT(YEAR FROM to_date('$fecha_ini', 'yyyy-mm-dd'))
and id_meses = EXTRACT(MONTH FROM to_date('$fecha_ini', 'yyyy-mm-dd')))
                              )
                                )
                                -1) )                    
else 0 end,0) as valor_interes,
    
TRUNC(to_date('$fecha_fin', 'yyyy-mm-dd'))-TRUNC(to_date('$fecha_ini', 'yyyy-mm-dd'))+1 as dias_mora, 
0 as valor_total, 
                    
0 as tmp_num, 
$tipo_interes as id_tasa_interes, 
365 as dias_anho,
$vig_fin as vigencia,
$mes_fin as mes,
                    
case
    when $tipo_interes = 0 then 'Tasa Normal 12%'
    when $tipo_interes = 1 then 'Tasa Usura'
    when $tipo_interes = 2 then 'Indexación'
else '' end as nombre,
case
    when $tipo_interes = 0 then 12
    when $tipo_interes = 1 then nvl((SELECT max(valor) FROM ca_tasa_interes@CAN where id_meses = $mes_fin and vigencia = $vig_fin),0)
else 0 end as tasa,
                    
case
    when $tipo_interes = 2 then (SELECT
case when nvl(max(valor),1) = 0 then 1 else nvl(max(valor),1) end as valor
FROM ca_ipc
where
id_anhos = EXTRACT(YEAR FROM to_date('$fecha_ini', 'yyyy-mm-dd'))
and id_meses = EXTRACT(MONTH FROM to_date('$fecha_ini', 'yyyy-mm-dd'))
)                              
else 0 end as ipc_ini,
case
    when $tipo_interes = 2 then (SELECT
nvl(max(valor),0) as valor
FROM ca_ipc
where
id_anhos = EXTRACT(YEAR FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_fin', 'yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_fin', 'yyyy-mm-dd')) , 'dd/mm/yyyy') - 1))
and id_meses = EXTRACT(MONTH FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_fin', 'yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_fin', 'yyyy-mm-dd')) , 'dd/mm/yyyy') - 1) )
)
else 0 end as ipc_fin

from dual
EOD;

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

            $records[0]['valor_total'] = $records[0]['valor_capital'] + $records[0]['valor_interes'];

            //Valor de respuesta
            $this->totalRows = count($records);
            $this->startRow = 0;
            $this->endRow = count($records);
            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[CA_PROYEC_INT_TMP] Consulta exitosa.");
        } catch (Exception $e) {
            $error = "[calculadora_intereses] ERROR: " . $e->getMessage();
            $this->status = 1;
            $this->list_data = array();
            $this->mensajeError = $error;
            $this->logMessage($error);
        }
    }

}
