<?php

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

    protected $table_names = array(
        'CA_CREDITO_EXCEDENTES',
        'INTERCEROS'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'INTERCEROS' =>
        array(
            'id_mae_ter' => 'CA_CREDITO_EXCEDENTES'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CA_CREDITO_EXCEDENTES' =>
        array(
            'uso_excedente' => 'uso_excedente',
            'boton' => 'boton',
            'id_credito' => 'id_credito',
            'id_anhos' => 'id_anhos',
            'id_punto_venta' => 'id_punto_venta',
            'nombre_pv' => 'nombre_pv',
            'id_tipo_credito' => 'id_tipo_credito',
            'descripcion_tipcre' => 'descripcion_tipcre',
            'sec_credito' => 'sec_credito',
            'id_con_credito' => 'id_con_credito',
            'descripcion_concre' => 'descripcion_concre',
            'desc_corta_concre' => 'desc_corta_concre',
            'fecha_proceso_cre' => 'fecha_proceso_cre',
            'id_bn' => 'id_bn',
            'codigo_bn' => 'codigo_bn',
            'descripcion_bn' => 'descripcion_bn',
            'id_cb' => 'id_cb',
            'numero_cuenta' => 'numero_cuenta',
            'num_doc' => 'num_doc',
            'oficina' => 'oficina',
            'valor' => 'valor',
            'observaciones' => 'observaciones',
            'estado' => 'estado',
            'fecha_anu' => 'fecha_anu',
            'motivo_anu' => 'motivo_anu',
            'fecha' => 'fecha',
            'id_ts_td' => 'id_ts_td',
            'descripcion_td' => 'descripcion_td',
            'usuariolog' => 'usuariolog',
            'id_mae_ter' => 'id_mae_ter',
            'id_excedente' => 'id_excedente',
            'valor_exc' => 'valor_exc',
            'en_uso' => 'en_uso',
            'id_credito_aplicado' => 'id_credito_aplicado',
            'sec_credito_creapli' => 'sec_credito_creapli',
            'fecha_proceso_creapli' => 'fecha_proceso_creapli',
            'valor_creapli' => 'valor_creapli'
        ),
        'INTERCEROS' =>
        array(
            'num_doc' => 'nitocc',
            'razon_soc' => 'razon_soc',
            'num_doc,||, - ,||,razon_soc' => 'tercero'
        )
    ); //por cada tabla especificar los campos del select
    protected $table_field_conditions = array(
        'CA_CREDITO_EXCEDENTES' => array(
            'id_credito,a' => array('!=' => array(-1)),
            'id_credito,b' => array('=' => array('id_credito')),
            'fecha_proceso_cre' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'id_mae_ter' => array('=' => array('id_mae_ter')),
            'estado' => array('=' => array('estado')),
            'en_uso' => array('>=' => array('en_uso')),
            'valor,a' => array('>=' => array('valor_ini')),
            'valor,b' => array('<=' => array('valor_fin')),
            'valor,c' => array('=' => array('valor_exacto')),
            'id_excedente' => array('=' => array('id_excedente')),
            'uso_excedente' => array('=' => array('uso_excedente')),
            'id_credito_aplicado' => array('=' => array('id_credito_aplicado')),
            '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
    protected $fields_orderBy = array(
        'sec_credito'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request


    /*
     * ------------VARIABLES PARA SERVICIO DE SUMATORIA - SUM
     *
     */
    protected $summatory_data = array(
        'CA_CREDITO_EXCEDENTES' => array(
            'fields' => array('valor', 'valor_exc', 'valor_creapli'),
            'labels' => array('sec_credito,Total'),
            'count' => 'id_credito'
        )
    ); //se especifica por tabla los campos de suma y condiciones de filtro

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = false;
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = false;

    /**
     * Metodo para saldo creditos excedentes
     * cantidad de excedentes en uso y sin uso
     * saldo de los excedentes
     *
     * @param sfWebRequest $request
     */
    public function executeSaldo(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 de filtro
             */
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];
            //and id_mae_ter = 1
            $whereTercero = '';
            if (isset($request['id_mae_ter'])) {
                $whereTercero = "and id_mae_ter = " . $request['id_mae_ter'];
            }
            //and en_uso >= 0
            $whereEnUso = '';
            if (isset($request['en_uso'])) {

                if ($request['en_uso']) {
                    $en_uso = 1;
                } else {
                    $en_uso = 0;
                }

                $whereEnUso = "and en_uso >= " . $en_uso;
            }
            //id_credito
            $whereCredito = '';
            if (isset($request['id_credito'])) {
                $whereCredito = "and id_credito = " . $request['id_credito'];
            }

            /*
             * filtro de valor
             */
            $whereExacto = " ";
            if (isset($request['exacto'])) {

                if ($request['exacto'] == 'true') {
                    if (isset($request['valor_exacto'])) {
                        if ($request['valor_exacto'] != "") {
                            $whereExacto = " AND valor = " . $request['valor_exacto'];
                        }
                    }
                } else {
                    if (isset($request['valor_ini'])) {
                        if ($request['valor_ini'] != "") {
                            $whereExacto = " AND valor >= " . $request['valor_ini'];
                        }
                    }
                    if (isset($request['valor_fin'])) {
                        if ($request['valor_fin'] != "") {
                            $whereExacto .= " AND valor <= " . $request['valor_fin'];
                        }
                    }
                }
            }



            /*
             * Consulta para obtener saldo de excedentes
             * y cantidade en uso y sin uso
             */
            //sentencia sql
            $sql = <<<EOD
select

/* sumatoria de saldo credito */
nvl(sum(valor),0) as valor,
/*sumatoria valor de excedentes*/
nvl(sum(valor_exc),0) as valor_exc,
/* CAntidad de excedentes en uso */
nvl(sum(
case
  when en_uso = 1 then 1
  else 0 end
),0) as cant_en_uso,
/* CAntidad de excedentes sin uso */
nvl(sum(
case
  when en_uso = 0 then 1
  else 0 end
),0) as cant_sin_uso,
/* Valor excedentes solo sin uso */
nvl(sum(
case
  when en_uso = 0 then valor_exc
  else 0 end
),0) as saldo_valor_exc

from ca_credito_excedentes

where
fecha_proceso_cre between '$fecha_ini' and '$fecha_fin'
$whereTercero
$whereEnUso
$whereExacto
$whereCredito
EOD;

            //ejecuta el sql
            $records = CN_TABLE::executeSQL($sql);

            //Valida si se obtuvo valores en la consulta
            if (count($records) > 0) {
                //array de filas de consulta para uso del template
                $this->list_data = $records;
            } else {
                $this->list_data = array();
            }

            //datos de cabecera del JSON
            $this->totalRows = count($records);
            $this->startRow = 0;
            $this->endRow = count($records);
        } catch (Exception $e) {

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

    // Validate
    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    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") {
            
        }

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

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

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    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;
    }

}
