<?php

/**
 * liquida_concepto actions.
 *
 * @package    cobro_coactivo
 * @subpackage liquida_concepto
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class liquida_conceptoActions extends sfQuery {
    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'CBR_LIQUIDA_CONCEPTO',
        'CBR_TITULO_MINERO_V',
        'CBR_ACTUALIZA_TITULO_V',
        //'CBR_RESOLUCION_TIT',
        'CBR_CONCEPTO_DEUDA',
        'CA_TASA_INTERES',
        'CA_DEBITO',
        'CA_DEBITO_COBRO_V',
        'CBR_REMISION_TITULO_DET_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CBR_TITULO_MINERO_V,LEFT' =>
        array(
            'cod_titulo' => 'CBR_LIQUIDA_CONCEPTO'
        ),
        'CBR_ACTUALIZA_TITULO_V,LEFT' =>
        array(
            'cod_titulo' => 'CBR_LIQUIDA_CONCEPTO'
        )/* ,
          'CBR_RESOLUCION_TIT' =>
          array(
          'id_resolucion_tit' => 'CBR_LIQUIDA_CONCEPTO'
          ) */,
        'CBR_CONCEPTO_DEUDA' =>
        array(
            'id_concepto_deuda' => 'CBR_LIQUIDA_CONCEPTO'
        ),
        'CA_TASA_INTERES,LEFT' =>
        array(
            'id_tasa_interes' => 'CBR_LIQUIDA_CONCEPTO'
        ),
        'CA_DEBITO' =>
        array(
            'id_debito' => 'CBR_LIQUIDA_CONCEPTO'
        ),
        'CA_DEBITO_COBRO_V' =>
        array(
            'id_debito' => 'CBR_LIQUIDA_CONCEPTO'
        ),
        'CBR_REMISION_TITULO_DET_V' =>
        array(
            'id_remision_titulo_det' => 'CBR_LIQUIDA_CONCEPTO'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CBR_LIQUIDA_CONCEPTO' =>
        array(
            'id_liquida_concepto' => 'id_liquida_concepto',
            'id_remision_titulo_det' => 'id_remision_titulo_det',
            'id_debito' => 'id_debito',
            'id_concepto_deuda' => 'id_concepto_deuda',
            'fecha_ejecutoria' => 'fecha_ejecutoria',
            'fecha_ini' => 'fecha_ini',
            'fecha_fin' => 'fecha_fin',
            'dias' => 'dias',
            'id_tasa_interes' => 'id_tasa_interes',
            'id_ipc_ini' => 'id_ipc_ini',
            'id_ipc_fin' => 'id_ipc_fin',
            'valor_capital' => 'valor_capital',
            'valor_interes' => 'valor_interes',
            'valor_abono' => 'valor_abono',
            'saldo' => 'saldo',
            'porce_abono_calc' => 'porce_abono_calc',
            'valor_abono_calc' => 'valor_abono_calc',
            'valor_acuerdo' => 'valor_acuerdo',
            'valor_embargo' => 'valor_embargo',
            'observaciones' => 'observaciones'
        ),
        'CBR_TITULO_MINERO_V' =>
        array(
            'mineral' => 'mineral_deb',
            'id_debito' => 'id_debito_deb',
            'id_mineral' => 'id_mineral_deb'
        ),
        'CBR_ACTUALIZA_TITULO_V' =>
        array(
            'mineral' => 'mineral',
            'id_mineral' => 'id_mineral',
            'cod_mineral' => 'cod_mineral'
        )/* ,
          'CBR_RESOLUCION_TIT' =>
          array(
          'no_resolucion' => 'no_resolucion',
          'fecha_expedicion' => 'fecha_resolucion'
          ) */,
        'CBR_CONCEPTO_DEUDA' =>
        array(
            'descripcion' => 'descripcion_concepto'
        ),
        'CA_TASA_INTERES' =>
        array(
            'descripcion' => 'descripcion_tasa'
        ),
        'CA_DEBITO' =>
        array(
            'sec_debito' => 'sec_debito',
            'fecha_proceso' => 'fecha_proceso'
        ),
        'CA_DEBITO_COBRO_V' =>
        array(
            'descripcion_pro' => 'producto_deb'
        ),
        'CBR_REMISION_TITULO_DET_V' =>
        array(
            //'id_remision_titulo_det' => 'id_remision_titulo_det',
            'id_remision_titulo' => 'id_remision_titulo',
            'cod_titulo' => 'cod_titulo',
            'numero_remision' => 'numero_remision',
            'anho_remision' => 'anho_remision',
            'numero_remision,||, - ,||,anho_remision' => 'completo_remision'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'anho_remision', 'numero_remision', 'cod_titulo', 'descripcion_concepto', 'fecha_ini', 'fecha_fin'
    ); //campos para el ordenamiento de la consulta
    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'CBR_LIQUIDA_CONCEPTO' =>
        array(
            'id_liquida_concepto,a' => array('!=' => array(-1)),
            'id_liquida_concepto,b' => array('=' => array('id_liquida_concepto')),
            'id_remision_titulo_det' => array('=' => array('id_remision_titulo_det')),
            'id_concepto_deuda' => array('=' => array('id_concepto_deuda')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'CBR_REMISION_TITULO_DET_V' =>
        array(
            'id_remision_titulo_det' => array('=' => array('id_remision_titulo_det')),
            'id_remision_titulo,a' => array('=' => array('id_remision_titulo')),
            'id_remision_titulo,b' => array('IN' => array('id_remision_titulo_in')),
            'cod_titulo' => array('=' => array('cod_titulo')),
            'numero_remision' => array('=' => array('numero_remision')),
            'anho_remision' => array('=' => array('anho_remision'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $query_qualifier = 'DISTINCT'; //Para eliminar filas repetidas
    protected $table_field_or_conditions = array(
    ); // filtros de condicion or
    /*
     * Variable manejo de log
     */
    //true - consulta de menu administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Perfiles';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;
    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_liquida_concepto'; //identificador de la tabla
    protected $id_names = array('id_liquida_concepto'); //llave primaria
    protected $field_names = array('cod_titulo', 'id_remision_titulo_det', 'id_debito', 'id_concepto_deuda',
        'fecha_ejecutoria', 'fecha_ini', 'fecha_fin', 'dias', 'id_tasa_interes', 'id_ipc_ini', 'id_ipc_fin',
        'valor_capital', 'valor_interes', 'valor_abono', 'saldo',
        'porce_abono_calc', 'valor_abono_calc', 'valor_acuerdo', 'valor_embargo', 'observaciones'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CBR_LIQUIDA_CONCEPTO'; //tabla en la cual se aplican los cambios 
    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_liquida_concepto'; //identificador unico de la tabla

    protected function postprocessRequest($Action, \sfWebRequest $request, $list_data_post) {
        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);
        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    protected function preprocessRequest($Action, \sfWebRequest $request) {
        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {

            /**
             * Liquidacion de concepto - 20210707
             */
            $id_concepto_deuda = $request['id_concepto_deuda'];
            $valor_capital = $request['valor_capital'];
            $valor_interes = $request['valor_interes'];
            $cod_titulo = $request['cod_titulo'];

            //Sql
            $sql = <<<EOD
SELECT
nvl(id_tipo_liquida,0) as id_tipo_liquida
FROM cbr_concepto_deuda
where 
id_concepto_deuda = $id_concepto_deuda
EOD;

            //ejecuta y obtiene el resultado del sql
            $records = CN_TABLE::executeSQL($sql);
            //Respuesta y validacion
            if (count($records) > 0) {
                $id_tipo_liquida = $records[0]['id_tipo_liquida'];
            } else {
                $id_tipo_liquida = 0;
            }
            $logger->info("id_tipo_liquida::" . $id_tipo_liquida);

            //Sql
            $sql = <<<EOD
SELECT
    *
FROM cbr_param_gen
where 
parametro = 'PORCENTAJE_ABONO'
and estado = 1
EOD;

            //ejecuta y obtiene el resultado del sql
            $records = CN_TABLE::executeSQL($sql);
            //Respuesta y validacion
            if (count($records) > 0) {
                $porce_abono = $records[0]['valor'];
            } else {
                $porce_abono = 15;
            }
            $request['porce_abono_calc'] = $porce_abono;
            $logger->info("porce_abono::" . $porce_abono);


            //Obtener id_tipo_liquida
            //1-Liq. CANON, 2-Liq. Porcentaje, 3-Liq. Usura, 4-Liq. IPC 
            switch ($id_tipo_liquida) {
                //1-Liq. CANON
                case 1:

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select
tit.*,
tt.aplica_usura,

case 
when tt.aplica_usura=0 
then consulta_sql_interes_normal@CAN.ANM.LOCAL( $vig_ini,$mes_ini,$dia_ini,$vig_fin,$mes_fin,'$fecha_ini','$fecha_fin',nvl(round($valor_capital),0), tt.id_tasa_interes )
--aplica formula con tasa de usuara vigente
else consulta_sql_interes@CAN.ANM.LOCAL( $vig_ini,$mes_ini, $vig_fin,$mes_fin,'$fecha_ini','$fecha_fin',nvl(round($valor_capital),0) )
end as valor_intereses,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias,

case 
when tt.aplica_usura=0 
then 1
else 2 end as id_tasa_interes

from (
    select
    aut.*,
    row_number() over (
        partition by aut.cod_titulo
        order by aut.cod_titulo, aut.estado desc, aut.id_titulo desc
    ) as rn
    from rmn_titulo@CAN.ANM.LOCAL aut
)tit

join ca_titulo_tasa@CAN.ANM.LOCAL tt on tt.id_titulo = tit.id_titulo and tt.estado=1
left join ca_tasa_interes@CAN.ANM.LOCAL ti on tt.id_tasa_interes = ti.id_tasa_interes
left join ca_tasa_interes@CAN.ANM.LOCAL tiact on tiact.vigencia=to_char(sysdate, 'yyyy') and tiact.id_meses=to_char(sysdate, 'mm')

where    
tit.rn = 1 
and tit.cod_titulo = '$cod_titulo'                            
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor_intereses'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                        $id_tasa_interes = $records[0]['id_tasa_interes'];
                        $request['id_tasa_interes'] = $id_tasa_interes;
                    }


                    break;
                //2-Liq. Porcentaje
                case 2:

                    $tasa = 1;
                    $request['id_tasa_interes'] = $tasa;

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select 
                            
consulta_sql_interes_normal@CAN.ANM.LOCAL($vig_ini,$mes_ini,$dia_ini,
$vig_fin,$mes_fin,
'$fecha_ini','$fecha_fin',$valor_capital,$tasa) as valor,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias
                            
from dual 
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                    }

                    break;
                //3-Liq. Usura
                case 3:

                    $tasa = 2;
                    $request['id_tasa_interes'] = $tasa;

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select 
                            
consulta_sql_interes@CAN.ANM.LOCAL($vig_ini,$mes_ini,
$vig_fin,$mes_fin,
'$fecha_ini','$fecha_fin',$valor_capital) as valor,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias
   
from dual  
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                    }

                    break;
                //4-Liq. IPC 
                case 4:

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

                    //VR = VH x (IPC actual/IPC inicial)
                    //Sql
                    $sql = <<<EOD
select 
                            
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('$fecha_fin','yyyy-mm-dd')))
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) ) as valor,
                                
(SELECT
nvl(max(id_ipc),0) 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'))
) as id_ipc_ini,

(SELECT
nvl(max(id_ipc),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('$fecha_fin','yyyy-mm-dd')))
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) )
) as id_ipc_fin 
                            
from dual
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;

                        $id_ipc_ini = $records[0]['id_ipc_ini'];
                        $id_ipc_fin = $records[0]['id_ipc_fin'];
                        if ($id_ipc_ini != 0 && $id_ipc_fin != 0) {
                            $request['id_ipc_ini'] = $id_ipc_ini;
                            $request['id_ipc_fin'] = $id_ipc_fin;
                        }
                    }

                    break;

                default:
                    break;
            }

            $logger->info("valor_interes::" . $valor_interes);
            $saldo = $valor_capital + $valor_interes;
            $request['saldo'] = $saldo;
            $logger->info("saldo::" . $saldo);

            //(capital+intereses)-((capital+intereses)*porce_abono/100)     
            $valor_abono_calc = round(( $saldo * $porce_abono / 100), 0);
            $valor_acuerdo = $saldo - $valor_abono_calc;
            $request['valor_abono_calc'] = $valor_abono_calc;
            $logger->info("valor_abono_calc::" . $valor_abono_calc);
            $request['valor_acuerdo'] = round($valor_acuerdo);
            $logger->info("valor_acuerdo::" . $valor_acuerdo);

            //(capital*2)+intereses
            $valor_embargo = ($valor_capital * 2) + $valor_interes;
            $request['valor_embargo'] = round($valor_embargo);
            $logger->info("valor_embargo::" . $valor_embargo);
        }

        //accion update
        if ($Action == "UPDATE") {

            /**
             * Liquidacion de concepto - 20210707
             */
            $id_concepto_deuda = $request['id_concepto_deuda'];
            $valor_capital = $request['valor_capital'];
            $valor_interes = $request['valor_interes'];
            $cod_titulo = $request['cod_titulo'];

            //Sql
            $sql = <<<EOD
SELECT
nvl(id_tipo_liquida,0) as id_tipo_liquida
FROM cbr_concepto_deuda
where 
id_concepto_deuda = $id_concepto_deuda
EOD;

            //ejecuta y obtiene el resultado del sql
            $records = CN_TABLE::executeSQL($sql);
            //Respuesta y validacion
            if (count($records) > 0) {
                $id_tipo_liquida = $records[0]['id_tipo_liquida'];
            } else {
                $id_tipo_liquida = 0;
            }
            $logger->info("id_tipo_liquida::" . $id_tipo_liquida);

            //Sql
            $sql = <<<EOD
SELECT
    *
FROM cbr_param_gen
where 
parametro = 'PORCENTAJE_ABONO'
and estado = 1
EOD;

            //ejecuta y obtiene el resultado del sql
            $records = CN_TABLE::executeSQL($sql);
            //Respuesta y validacion
            if (count($records) > 0) {
                $porce_abono = $records[0]['valor'];
            } else {
                $porce_abono = 15;
            }
            $request['porce_abono_calc'] = $porce_abono;
            $logger->info("porce_abono::" . $porce_abono);


            //Obtener id_tipo_liquida
            //1-Liq. CANON, 2-Liq. Porcentaje, 3-Liq. Usura, 4-Liq. IPC 
            switch ($id_tipo_liquida) {
                //1-Liq. CANON
                case 1:

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select
tit.*,
tt.aplica_usura,

case 
when tt.aplica_usura=0 
then consulta_sql_interes_normal@CAN.ANM.LOCAL( $vig_ini,$mes_ini,$dia_ini,$vig_fin,$mes_fin,'$fecha_ini','$fecha_fin',nvl(round($valor_capital),0), tt.id_tasa_interes )
--aplica formula con tasa de usuara vigente
else consulta_sql_interes@CAN.ANM.LOCAL( $vig_ini,$mes_ini, $vig_fin,$mes_fin,'$fecha_ini','$fecha_fin',nvl(round($valor_capital),0) )
end as valor_intereses,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias,

case 
when tt.aplica_usura=0 
then 1
else 2 end as id_tasa_interes

from (
    select
    aut.*,
    row_number() over (
        partition by aut.cod_titulo
        order by aut.cod_titulo, aut.estado desc, aut.id_titulo desc
    ) as rn
    from rmn_titulo@CAN.ANM.LOCAL aut
)tit

join ca_titulo_tasa@CAN.ANM.LOCAL tt on tt.id_titulo = tit.id_titulo and tt.estado=1
left join ca_tasa_interes@CAN.ANM.LOCAL ti on tt.id_tasa_interes = ti.id_tasa_interes
left join ca_tasa_interes@CAN.ANM.LOCAL tiact on tiact.vigencia=to_char(sysdate, 'yyyy') and tiact.id_meses=to_char(sysdate, 'mm')

where    
tit.rn = 1 
and tit.cod_titulo = '$cod_titulo'                            
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor_intereses'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                        $id_tasa_interes = $records[0]['id_tasa_interes'];
                        $request['id_tasa_interes'] = $id_tasa_interes;
                    }


                    break;
                //2-Liq. Porcentaje
                case 2:

                    $tasa = 1;
                    $request['id_tasa_interes'] = $tasa;

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select 
                            
consulta_sql_interes_normal@CAN.ANM.LOCAL($vig_ini,$mes_ini,$dia_ini,
$vig_fin,$mes_fin,
'$fecha_ini','$fecha_fin',$valor_capital,$tasa) as valor,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias
                            
from dual 
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                    }

                    break;
                //3-Liq. Usura
                case 3:

                    $tasa = 2;
                    $request['id_tasa_interes'] = $tasa;

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

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

                    //Sql
                    $sql = <<<EOD
select 
                            
consulta_sql_interes@CAN.ANM.LOCAL($vig_ini,$mes_ini,
$vig_fin,$mes_fin,
'$fecha_ini','$fecha_fin',$valor_capital) as valor,
                            
nvl(to_date('$fecha_fin','yyyy-mm-dd')-to_date('$fecha_ini','yyyy-mm-dd')+1,0) as dias
   
from dual  
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;
                        $dias = $records[0]['dias'];
                        $request['dias'] = $dias;
                    }

                    break;
                //4-Liq. IPC 
                case 4:

                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

                    //VR = VH x (IPC actual/IPC inicial)
                    //Sql
                    $sql = <<<EOD
select 
                            
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('$fecha_fin','yyyy-mm-dd')))
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) ) as valor,
                                
(SELECT
nvl(max(id_ipc),0) 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'))
) as id_ipc_ini,

(SELECT
nvl(max(id_ipc),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('$fecha_fin','yyyy-mm-dd')))
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) )
) as id_ipc_fin 
                            
from dual
EOD;

                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Valor de respuesta
                    if (count($records) > 0) {
                        $valor_interes = $records[0]['valor'];
                        $request['valor_interes'] = $valor_interes;

                        $id_ipc_ini = $records[0]['id_ipc_ini'];
                        $id_ipc_fin = $records[0]['id_ipc_fin'];
                        if ($id_ipc_ini != 0 && $id_ipc_fin != 0) {
                            $request['id_ipc_ini'] = $id_ipc_ini;
                            $request['id_ipc_fin'] = $id_ipc_fin;
                        }
                    }

                    break;

                default:
                    break;
            }

            $logger->info("valor_interes::" . $valor_interes);
            $saldo = $valor_capital + $valor_interes;
            $request['saldo'] = $saldo;
            $logger->info("saldo::" . $saldo);

            //(capital+intereses)-((capital+intereses)*porce_abono/100)     
            $valor_abono_calc = round(( $saldo * $porce_abono / 100), 0);
            $valor_acuerdo = $saldo - $valor_abono_calc;
            $request['valor_abono_calc'] = $valor_abono_calc;
            $logger->info("valor_abono_calc::" . $valor_abono_calc);
            $request['valor_acuerdo'] = round($valor_acuerdo);
            $logger->info("valor_acuerdo::" . $valor_acuerdo);

            //(capital*2)+intereses
            $valor_embargo = ($valor_capital * 2) + $valor_interes;
            $request['valor_embargo'] = round($valor_embargo);
            $logger->info("valor_embargo::" . $valor_embargo);
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    protected function validateAdd(\sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a validateAdd");
        
        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */
        $id_debito = $request['id_debito'];

        /*
         *  Generar errores en $errors
         */
        //sentencia sql
        $sql = <<<EOD
SELECT
liq.id_debito,
deb.sec_debito,
deb.id_anhos
FROM cbr_liquida_concepto liq
left join ca_debito deb
on deb.id_debito = liq.id_debito
where
liq.id_debito = $id_debito 
EOD;
        //ejecuta el sql
        $records_rend = CN_TABLE::executeSQL($sql);
        if (count($records_rend) > 0) {

            $sec_debito = $records_rend[0]['sec_debito'];
            $id_anhos = $records_rend[0]['id_anhos'];

            $errors['mensaje'] = "Existen registros con el debito registrado ND.$sec_debito-$id_anhos, favor verificar.";
            $errors['servicio'] = "liquida_concepto";
            $logger->info("Existen registros con el debito registrado ND.$sec_debito-$id_anhos, favor verificar.");
        }

        return $errors;
    }

    protected function validateRemove(\sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a validateRemove");


        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */
        $id_liquida_concepto = $request['id_liquida_concepto'];

        /*
         *  Generar errores en $errors - 20200224
         */
        //Mira si tiene abonos
        //sentencia sql
        $sql = <<<EOD
SELECT
    *
FROM CBR_LIQUIDA_ABONO
where id_liquida_concepto = $id_liquida_concepto
EOD;
        //ejecuta el sql
        $records_rend = CN_TABLE::executeSQL($sql);
        if (count($records_rend) > 0) {

            $errors['mensaje'] = "Existen registros de abonos; no puede eliminar el concepto, favor verificar.";
            $errors['servicio'] = "registro_concepto";
            $logger->info("Existen registros de abonos; no puede eliminar el concepto, favor verificar.");
        }

        return $errors;
    }

    protected function validateUpdate(\sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a validateUpdate");


        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */
        $id_liquida_concepto = $request['id_liquida_concepto'];

        /*
         *  Generar errores en $errors - 20200224
         */
        //Mira si tiene abonos
        //sentencia sql
        $sql = <<<EOD
SELECT
    *
FROM CBR_LIQUIDA_ABONO
where id_liquida_concepto = $id_liquida_concepto
EOD;
        //ejecuta el sql
        $records_rend = CN_TABLE::executeSQL($sql);
        if (count($records_rend) > 0) {

            $errors['mensaje'] = "Existen registros de abonos; no puede modificar el concepto, favor verificar.";
            $errors['servicio'] = "registro_concepto";
            $logger->info("Existen registros de abonos; no puede modificar el concepto, favor verificar.");
        }

        return $errors;
    }

}
