<?php

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

    protected $table_names = array(
        'CBR_ABONO_CUOTA',
        'CBR_DETALLE_CUOTA',
        'CBR_PLANIFICA_FP',
        'CBR_FACILIDAD_PAGO_V',
        'CBR_PROCESO_COACTIVO',
        'CBR_AVOCA_CONOC',
        'CBR_REMISION_TITULO',
        'CBR_TITULO_MINERO_V',
        'CBR_ACTUALIZA_TITULO_V',
        'CBR_TIPO_DOCUMENTO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CBR_DETALLE_CUOTA' =>
        array(
            'id_detalle_cuota' => 'CBR_ABONO_CUOTA'
        ),
        'CBR_PLANIFICA_FP' =>
        array(
            'id_planifica_fp' => 'CBR_DETALLE_CUOTA'
        ),
        'CBR_FACILIDAD_PAGO_V' =>
        array(
            'id_facilidad_pago' => 'CBR_PLANIFICA_FP'
        ),
        'CBR_PROCESO_COACTIVO,LEFT' =>
        array(
            'id_proceso_coactivo' => 'CBR_FACILIDAD_PAGO_V'
        ),
        'CBR_AVOCA_CONOC,LEFT' =>
        array(
            'id_avoca_conoc' => 'CBR_FACILIDAD_PAGO_V'
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'id_remision_titulo' => 'CBR_FACILIDAD_PAGO_V'
        ),
        'CBR_TITULO_MINERO_V,LEFT' =>
        array(
            'cod_titulo' => 'CBR_REMISION_TITULO'
        ),
        'CBR_ACTUALIZA_TITULO_V,LEFT' =>
        array(
            'cod_titulo' => 'CBR_REMISION_TITULO'
        ),
        'CBR_TIPO_DOCUMENTO,LEFT' =>
        array(
            'id_tipo_documento' => 'CBR_AVOCA_CONOC'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CBR_ABONO_CUOTA' =>
        array(
            'id_abono_cuota' => 'id_abono_cuota',
            'id_detalle_cuota' => 'id_detalle_cuota',
            'fecha_abono' => 'fecha_abono',
            'valor_abono' => 'valor_abono',
            'valor_bruto' => 'valor_bruto',
            'dias_mora' => 'dias_mora',
            'valor_int_mora' => 'valor_int_mora',
            'valor_int_corri' => 'valor_int_corri',
            'valor_abono_capital' => 'valor_abono_capital',
            'valor_diferencia' => 'valor_diferencia',
            'id_abono_cuota_dif' => 'id_abono_cuota_dif',
            'num_doc_sop' => 'num_doc_sop'
        ),
        'CBR_DETALLE_CUOTA' =>
        array(
            'id_planifica_fp' => 'id_planifica_fp',
            'numero_cuota' => 'numero_cuota',
            'fecha_cuota' => 'fecha_cuota',
            'valor_cuota' => 'valor_cuota',
            'fecha_cuota_habil' => 'fecha_cuota_habil'
        ),
        'CBR_PLANIFICA_FP' =>
        array(
            'id_facilidad_pago' => 'id_facilidad_pago',
            'fecha_inicio' => 'fecha_inicio',
            'valor_total' => 'valor_total',
            'numero_cuotas' => 'numero_cuotas'
        ),
        'CBR_FACILIDAD_PAGO_V' =>
        array(
            'id_remision_titulo' => 'id_remision_titulo',
            'id_proceso_coactivo' => 'id_proceso_coactivo',
            'id_avoca_conoc' => 'id_avoca_conoc',
            'fecha_registro' => 'fecha_registro'
        ),
        'CBR_PROCESO_COACTIVO' =>
        array(
            'no_proceso' => 'no_proceso',
            'fecha' => 'fecha_coactivo',
            'id_anhos' => 'id_anhos'
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'numero_remision' => 'numero_remision',
            'anho_remision' => 'anho_remision',
            'fecha_remision' => 'fecha_remision',
            'estado' => 'estado',
            'cod_titulo' => 'cod_titulo'
        ),
        'CBR_AVOCA_CONOC' =>
        array(
            'no_auto' => 'no_auto',
            'fecha' => 'fecha_avoca',
            'id_tipo_documento' => 'id_tipo_documento'
        ),
        'CBR_TITULO_MINERO_V' =>
        array(
            'mineral' => 'mineral_deb',
            'id_debito' => 'id_debito',
            'id_mineral' => 'id_mineral_deb'
        ),
        'CBR_ACTUALIZA_TITULO_V' =>
        array(
            'id_mineral' => 'id_mineral',
            'mineral' => 'mineral',
            'cod_mineral' => 'cod_mineral'
        ),
        'CBR_TIPO_DOCUMENTO' =>
        array(
            'descripcion' => 'descripcion_tipdoc'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'numero_cuota', 'fecha_abono'
    ); //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_ABONO_CUOTA' =>
        array(
            'id_abono_cuota,a' => array('!=' => array(-1)),
            'id_abono_cuota,b' => array('=' => array('id_abono_cuota')),
            'id_detalle_cuota' => array('=' => array('id_detalle_cuota')),
            'id_abono_cuota_dif' => array('=' => array('id_abono_cuota_dif')),
            'fecha_abono' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    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_abono_cuota'; //identificador de la tabla
    protected $id_names = array('id_abono_cuota'); //llave primaria
    protected $field_names = array('id_detalle_cuota', 'fecha_abono', 'valor_abono', 'valor_bruto', 'dias_mora', 'valor_int_mora',
        'valor_int_corri', 'valor_abono_capital', 'valor_diferencia', 'id_abono_cuota_dif', 'num_doc_sop'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CBR_ABONO_CUOTA'; //tabla en la cual se aplican los cambios 
    protected $has_activo = false; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia
    protected $has_secuencia = false; //si posee secuencia la tabla - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD


    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_abono_cuota'; //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") {


            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            try {

                $id_detalle_cuota = $list_data_post[0]['id_detalle_cuota'];

                /*
                 * Validar que no queda saldo pendiente - 20151127
                 */
                $sql = <<<EOD
select 
* 
from cbr_detalle_cuota_v
where 
id_detalle_cuota = $id_detalle_cuota  
EOD;
                $records = CN_TABLE::executeSQL($sql);

                if (count($records) > 0) {

                    $pagada = $records[0]['pagada'];
                    $valor_saldo = $records[0]['valor_saldo'];

                    if ($valor_saldo <= 0) {
                        
                        //actualizar que la cuota este paga
                        $sql = <<<EOD
UPDATE CBR_DETALLE_CUOTA SET PAGADA = 1 where id_detalle_cuota = $id_detalle_cuota
EOD;

                        $this->conn->execute($sql);
                        
                        
                        /**
                         * Genera un registro de terminacion de la facilidad de pago 
                         * si es la ultima cuota de pago - 20200522
                         */
                        $sql = <<<EOD
Insert into CBR_TERMINACION_FP (
ID_TERMINACION_FP,
ID_FACILIDAD_PAGO,
NO_AUTO,
FECHA,
DETALLE_PLANTILLA,
OBSERVACIONES,
ADJUNTO,
ID_PLANTILLA,
ID_TIPO_DOCUMENTO,
FECHA_LOG,
USUARIO_LOG,
FECHA_APRUEBA,
USUARIO_APRUEBA
)

select
null as ID_TERMINACION_FP,
pla.id_facilidad_pago as ID_FACILIDAD_PAGO,
null as NO_AUTO,
trunc(sysdate) as FECHA,
'Sin registro de Plantilla' as DETALLE_PLANTILLA,
'Pago de Planificación: ' || pla.descripcion as OBSERVACIONES,
null as ADJUNTO,
null as ID_PLANTILLA,
3 as ID_TIPO_DOCUMENTO,
sysdate as FECHA_LOG,
pla.usuario_log as USUARIO_LOG,
null as FECHA_APRUEBA,
null as USUARIO_APRUEBA

from cbr_detalle_cuota det

join cbr_planifica_fp pla
on pla.id_planifica_fp = det.id_planifica_fp

where
det.id_detalle_cuota = $id_detalle_cuota
and det.pagada = 1 
and det.numero_cuota = pla.numero_cuotas

and pla.id_facilidad_pago not in (select id_facilidad_pago from cbr_terminacion_fp where observaciones  like '%Pago de Planif%' and no_auto is null) 
EOD;

                        $this->conn->execute($sql);
                    } else {
                        $errors['mensaje'] = "Saldo pendiente de pago, favor verificar.";
                        $errors['servicio'] = "abono_cuota";
                    }
                }

                $this->conn->commit();
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
            }
        }

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

            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            //Sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD" 
EOD;
            //Ejecutar SQL
            CN_TABLE::executeSQL($sql);

            try {

                $id_detalle_cuota = $request['id_detalle_cuota'];
                $fecha_abono = $request['fecha_abono'];
                $valor_abono = $request['valor_abono'];
                $request['valor_bruto'] = $valor_bruto = $valor_abono;

                /**
                 * Traigo la cuota anterior, para revisar si tiene saldo a favor o en contra - 20151127
                 */
                $sql = <<<EOD
select 
detcuo.*,
plaf.fecha_inicio,
plaf.numero_cuotas,
plaf.id_tasa_interes_mora,
plaf.id_tasa_interes_corriente,
tasamor.valor as tasa_mora,
tasacor.valor as tasa_corri
from cbr_detalle_cuota_v detcuo
join cbr_planifica_fp plaf on plaf.id_planifica_fp = detcuo.id_planifica_fp
left join ca_tasa_interes tasamor on tasamor.id_tasa_interes = plaf.id_tasa_interes_mora
left join ca_tasa_interes tasacor on tasacor.id_tasa_interes = plaf.id_tasa_interes_corriente
where detcuo.id_detalle_cuota = $id_detalle_cuota 
EOD;

                $records = CN_TABLE::executeSQL($sql);

                if (count($records) > 0) {

                    //datos del detalle cuota
                    $id_planifica_fp = $records[0]['id_planifica_fp'];
                    $numero_cuota = $records[0]['numero_cuota'];
                    $fecha_cuota = $records[0]['fecha_cuota'];
                    $valor_cuota = $records[0]['valor_cuota'];
                    $valor_int_corri = $records[0]['valor_int_corri'];
                    $valor_total = $records[0]['valor_total'];
                    $tasa_mora = $records[0]['tasa_mora'];
                    $tasa_corri = $records[0]['tasa_corri'];

                    $valor_int_corri_dif = $valor_int_corri - $records[0]['valor_int_corri_abocuo'];

                    //Traigo la cuota anterior segun la planifica_fp y numero de cuota de pago
                    $sql = <<<EOD
select 
* 
from cbr_detalle_cuota_v
where 
id_planifica_fp = $id_planifica_fp
and numero_cuota < $numero_cuota
order by
numero_cuota desc 
EOD;

                    $records_cuoant = CN_TABLE::executeSQL($sql);

                    if (count($records_cuoant) > 0) {
                        //Cuotas anteriores
                        $logger->info("Tiene Cuotas anteriores");
                        $numero_cuota_cuoant = $records_cuoant[0]['numero_cuota'];
                        $valor_saldo_cuoant = $records_cuoant[0]['valor_saldo'];
                        $id_detalle_cuota_cuoant = $records_cuoant[0]['id_detalle_cuota'];

                        //Verifica si la cuota anterior tiene saldo a favor o en contra
                        if ($valor_saldo_cuoant <= 0) {
                            $logger->info("Cuota anterior con saldo a favor o cero");
                            //Restar valor para pago cuota nueva
                            $valor_bruto = $request['valor_bruto'] = $valor_abono - $valor_saldo_cuoant;

                            /*
                             * Valor es diferente de 0, se coloca el id_abono_cuota_dif
                             */
                            if ($valor_saldo_cuoant != 0) {

                                $sql = <<<EOD
select 
* 
from cbr_abono_cuota
where 
id_detalle_cuota = $id_detalle_cuota_cuoant
order by
id_detalle_cuota desc,
fecha_abono desc,
id_abono_cuota desc 
EOD;

                                $records_detant = CN_TABLE::executeSQL($sql);

                                $request['id_abono_cuota_dif'] = $records_detant[0]['id_abono_cuota'];
                            }

                            /**
                             * Otros campos de la cuota
                             */
                            $capital = $valor_cuota;
                            $tasa_mora = $tasa_mora;
                            $fecha_ini = $fecha_cuota;
                            $fecha_fin = $fecha_abono;
                            $valores_cuota = CN_TABLE::valoresCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin, $valor_bruto, $valor_int_corri_dif);
                            /*
                             * interes mora
                             */
                            $request['dias_mora'] = $valores_cuota['dias_mora'];
                            $request['valor_int_mora'] = $valores_cuota['valor_int_mora'];

                            /*
                             * interes corriente 
                             */
                            $request['valor_int_corri'] = $valores_cuota['valor_int_corri'];

                            /*
                             * capital y diferencia
                             */
                            $request['valor_abono_capital'] = $valores_cuota['valor_abono_capital'];
                            $request['valor_diferencia'] = $valores_cuota['valor_diferencia'];
                        } else {
                            $logger->info("Cuota anterior sin saldo a favor o cero");
                            //Pagar cuota anterior, pago pendiente

                            $valor_int_corri_dif_cuoan = $records_cuoant[0]['valor_int_corri'] - $records_cuoant[0]['valor_int_corri_abocuo'];

                            $sql = <<<EOD
select 
* 
from cbr_abono_cuota
where 
id_detalle_cuota = $id_detalle_cuota_cuoant
order by
id_detalle_cuota desc,
fecha_abono desc,
id_abono_cuota desc 
EOD;

                            $records_detant = CN_TABLE::executeSQL($sql);
                            if (count($records_detant) > 0) {

                                //$valor_bruto_detant = $records_detant[0]['valor_diferencia'];
                                $valor_bruto_detant = $valor_saldo_cuoant;


                                /**
                                 * Otros campos de la cuota
                                 */
                                $capital = $valor_bruto_detant;
                                $tasa_mora = $tasa_mora;
                                $fecha_ini = $records_detant[0]['fecha_abono']; //fecha abono del pago anterior
                                $fecha_fin = $fecha_abono;


                                /*
                                 * interes mora
                                 */
                                $interes_mora = CN_TABLE::calculoInteresMoraCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin);
                                $dias_mora = round($interes_mora['dias_mora']);
                                $valor_int_mora = round($interes_mora['valor_int_mora']);

                                $valor_bruto = $valor_bruto_detant + $valor_int_mora;


                                $valores_cuota = CN_TABLE::valoresCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin, $valor_bruto, $valor_int_corri_dif_cuoan);
                                /*
                                 * interes mora
                                 */
                                $dias_mora_cuoant = $valores_cuota['dias_mora'];
                                $valor_int_mora_cuoant = $valores_cuota['valor_int_mora'];

                                /*
                                 * interes corriente 
                                 */
                                $valor_int_corri_cuoant = $valores_cuota['valor_int_corri'];

                                /*
                                 * capital y diferencia
                                 */
                                $valor_abono_capital_cuoant = $valores_cuota['valor_abono_capital'];
                                $valor_diferencia_cuoant = $valores_cuota['valor_diferencia'];

                                /*
                                 * Insertar pago de cuota anterior
                                 */
                                $sql = <<<EOD
Insert into CBR_ABONO_CUOTA (ID_ABONO_CUOTA,ID_DETALLE_CUOTA,FECHA_ABONO,VALOR_ABONO,VALOR_BRUTO,
    DIAS_MORA,VALOR_INT_MORA,VALOR_INT_CORRI,VALOR_ABONO_CAPITAL,VALOR_DIFERENCIA,ID_ABONO_CUOTA_DIF) 
values (null,$id_detalle_cuota_cuoant,to_date('$fecha_abono','YYYY-MM-DD'),'$valor_bruto','$valor_bruto',
    $dias_mora_cuoant,'$valor_int_mora_cuoant','$valor_int_corri_cuoant','$valor_abono_capital_cuoant','$valor_diferencia_cuoant',null)
EOD;
                                //Ejecutar SQL
                                $this->conn->execute($sql);


                                //Actualizar cuota paga, cuota anterior - 20151130
                                $sql = <<<EOD
UPDATE CBR_DETALLE_CUOTA SET PAGADA = 1 where id_detalle_cuota = $id_detalle_cuota_cuoant 
EOD;
                                //Ejecutar SQL
                                $this->conn->execute($sql);


                                /**
                                 * Cuota de pago del abono, actual
                                 */
                                //Restar valor para pago cuota nueva
                                $valor_bruto = $request['valor_bruto'] = $valor_abono - $valor_bruto;

                                /**
                                 * Otros campos de la cuota
                                 */
                                $capital = $valor_cuota;
                                $tasa_mora = $tasa_mora;
                                $fecha_ini = $fecha_cuota;
                                $fecha_fin = $fecha_abono;
                                $valores_cuota = CN_TABLE::valoresCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin, $valor_bruto, $valor_int_corri_dif);
                                /*
                                 * interes mora
                                 */
                                $request['dias_mora'] = $valores_cuota['dias_mora'];
                                $request['valor_int_mora'] = $valores_cuota['valor_int_mora'];

                                /*
                                 * interes corriente 
                                 */
                                $request['valor_int_corri'] = $valores_cuota['valor_int_corri'];

                                /*
                                 * capital y diferencia
                                 */
                                $request['valor_abono_capital'] = $valores_cuota['valor_abono_capital'];
                                $request['valor_diferencia'] = $valores_cuota['valor_diferencia'];

                                //ultimo pago de cuota insertada, por pago cuota pendiente - 20151130
                                $sql = <<<EOD
select 
* 
from cbr_abono_cuota
where 
id_detalle_cuota = $id_detalle_cuota_cuoant
order by
id_detalle_cuota desc,
fecha_abono desc,
id_abono_cuota desc 
EOD;

                                $records_detant = CN_TABLE::executeSQL($sql);

                                $request['id_abono_cuota_dif'] = $records_detant[0]['id_abono_cuota'];
                            }
                        }
                    } else {

                        //Traigo cuota con pago pendiente de saldo
                        $sql = <<<EOD
select 
* 
from cbr_detalle_cuota_v
where 
id_planifica_fp = $id_planifica_fp
and numero_cuota = $numero_cuota
order by
numero_cuota desc 
EOD;

                        $records_cuoant = CN_TABLE::executeSQL($sql);

                        if (count($records_cuoant) > 0) {

                            $numero_cuota_cuoant = $records_cuoant[0]['numero_cuota'];
                            $valor_saldo_cuoant = $records_cuoant[0]['valor_saldo'];
                            $id_detalle_cuota_cuoant = $records_cuoant[0]['id_detalle_cuota'];

                            $sql = <<<EOD
select 
* 
from cbr_abono_cuota
where 
id_detalle_cuota = $id_detalle_cuota_cuoant
order by
id_detalle_cuota desc,
fecha_abono desc,
id_abono_cuota desc 
EOD;

                            $records_detant = CN_TABLE::executeSQL($sql);

                            //no hay pagos para la misma cuota
                            if (count($records_detant) == 0) {

                                //Sino hay cuotas pagar cuota filtrada
                                $logger->info("Sino hay cuotas anteriores pagar cuota filtrada");
                                /**
                                 * Otros campos de la cuota
                                 */
                                $capital = $valor_cuota;
                                $tasa_mora = $tasa_mora;
                                $fecha_ini = $fecha_cuota;
                                $fecha_fin = $fecha_abono;
                                $valores_cuota = CN_TABLE::valoresCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin, $valor_bruto, $valor_int_corri_dif);
                                /*
                                 * interes mora
                                 */
                                $request['dias_mora'] = $valores_cuota['dias_mora'];
                                $request['valor_int_mora'] = $valores_cuota['valor_int_mora'];

                                /*
                                 * interes corriente 
                                 */
                                $request['valor_int_corri'] = $valores_cuota['valor_int_corri'];

                                /*
                                 * capital y diferencia
                                 */
                                $request['valor_abono_capital'] = $valores_cuota['valor_abono_capital'];
                                $request['valor_diferencia'] = $valores_cuota['valor_diferencia'];
                            } else {
                                $logger->info("Cuota abonada pendiente de saldo");

                                //Pagar cuota de abono
                                $fecha_cuota = $records_detant[0]['fecha_abono'];

                                /**
                                 * Otros campos de la cuota
                                 */
                                $capital = $valor_saldo_cuoant;
                                $tasa_mora = $tasa_mora;
                                $fecha_ini = $fecha_cuota; //fecha abono del pago anterior
                                $fecha_fin = $fecha_abono;
                                $valores_cuota = CN_TABLE::valoresCuota($capital, $tasa_mora, $fecha_ini, $fecha_fin, $valor_bruto, $valor_int_corri_dif);
                                /*
                                 * interes mora
                                 */
                                $request['dias_mora'] = $valores_cuota['dias_mora'];
                                $request['valor_int_mora'] = $valores_cuota['valor_int_mora'];

                                /*
                                 * interes corriente 
                                 */
                                $request['valor_int_corri'] = $valores_cuota['valor_int_corri'];

                                /*
                                 * capital y diferencia
                                 */
                                $request['valor_abono_capital'] = $valores_cuota['valor_abono_capital'];
                                $request['valor_diferencia'] = $valores_cuota['valor_diferencia'];


                                $request['id_abono_cuota_dif'] = $records_detant[0]['id_abono_cuota'];
                            }
                        }
                    }
                }

                $this->conn->commit();
                $logger->info("Termino proceso de preprocessRequest");
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
            }
        }

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

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

        return $request;
    }

    protected function validateAdd(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */
        $id_detalle_cuota = $request['id_detalle_cuota'];

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
select 
* 
from cbr_detalle_cuota_v
where 
id_detalle_cuota = $id_detalle_cuota 
EOD;
        $records = CN_TABLE::executeSQL($sql);

        /*
         *  Generar errores en $errors
         */
        if (count($records) > 0) {

            $pagada = $records[0]['pagada'];
            $valor_saldo = $records[0]['valor_saldo'];

            //valida que este pagada la cuota
            if ($pagada == 1) {
                $errors['mensaje'] = "La cuota ya esta paga, favor verificar.";
                $errors['servicio'] = "abono_cuota";
            }

            if ($valor_saldo <= 0) {
                $errors['mensaje'] = "El saldo de la cuota ya esta pago, favor verificar.";
                $errors['servicio'] = "abono_cuota";
            }
        }

        return $errors;
    }

    protected function validateRemove(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    protected function validateUpdate(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

}
