<?php

/**
 * certif_ingre_reten actions.
 *
 * @package    nomina
 * @subpackage certif_ingre_reten
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class certif_ingre_retenActions extends sfQuery {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    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.id_anhos , tab0.num_doc  ';
        }


        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $id_anhos = $request['id_anhos'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            /*
             * Variables opcionales
             */
            //funcionario
            if (isset($request['num_doc'])) {
                $whereFuncionarioNumDoc = " AND tab0.num_doc = " . $request['num_doc'];
            } else {
                $whereFuncionarioNumDoc = ' ';
            }
            //funcionario
            if (isset($request['id_tipo_doc'])) {
                $whereFuncionarioTipoDoc = " AND tab0.id_tipo_doc = " . $request['id_tipo_doc'];
            } else {
                $whereFuncionarioTipoDoc = ' ';
            }

            /*
             * Variables opcionales
             */

            //retiro - true por 1 y false por 0
            if (isset($request['retiro'])) {
                if ($request['retiro'] == 'true') {
                    //Si es true
                    $retiro = 1;
                    $whereRetiro = " AND tab0.retiro = 1 ";
                } elseif ($request['retiro'] == '0') {
                    //Si es 0
                    $retiro = 0;
                    $whereRetiro = " AND tab0.retiro = 0 ";
                } else {
                    //Si es false
                    $retiro = 0;
                    $whereRetiro = " ";
                }
            } else {
                $whereRetiro = " ";
            }


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

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (


select tab0.* from(

    SELECT DISTINCT  
    case when nomb.fecha_termina between  to_date( '$fecha_ini', 'YYYY-MM-DD') and to_date( '$fecha_fin', 'YYYY-MM-DD')
    then 1 else 0 end as retiro,
    nomb.fecha_termina,
    tab0.id_tipo_doc as id_tipo_doc, tab0.num_doc as num_doc, 
    tab0.id_anhos as id_anhos, tab1.tipo_documento as tipo_documento, 
    
    translate(tab1.primer_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as primer_nombre, 
    translate(tab1.segundo_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as segundo_nombre, 
    translate(tab1.primer_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as primer_apellido, 
    translate(tab1.segundo_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as segundo_apellido, 
    translate(tab1.nombre_completo,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as nombre_completo, 
    translate(tab1.nombre_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as nombre_apellido, 
                    
    to_char(tab1.fecha_nace, 'YYYY-MM-DD') as fecha_nace, tab1.email as email, 
    tab1.tel as telefono, tab1.direccion as direccion, tab1.pais_nace as pais_nace, 
    tab1.depto_nace as depto_nace, tab1.muni_nace as muni_nace, tab1.genero as genero, 
    tab1.estado_civil as estado_civil, tab1.tipo_sangre as tipo_sangre, 
    tab3.id_consecutivo_certif as id_consecutivo_certif, tab3.secuencia as secuencia 
    
    FROM NO_CERTIF_INGRE_RETEN tab0  
    
    JOIN NO_DATOS_FUNCIONARIO_V tab1 ON tab0.id_tipo_doc = tab1.id_tipo_doc AND tab0.num_doc = tab1.num_doc  
    JOIN NO_CONCEPTOS_V tab2 ON tab0.id_concep_nomina = tab2.id_concep_nomina  
    LEFT JOIN NO_CONSECUTIVO_CERTIF tab3 ON tab0.id_tipo_doc = tab3.id_tipo_doc AND tab0.num_doc = tab3.num_doc 
    AND tab0.id_anhos = tab3.id_anhos 
    
    left join no_nombramiento_v nomb
    on tab0.id_tipo_doc = nomb.id_tipo_doc and tab0.num_doc = nomb.num_doc
    
    WHERE  
    tab0.id_certif_ingre_reten != '-1' 
    AND tab0.id_anhos = $id_anhos 
    $whereFuncionarioNumDoc  $whereFuncionarioTipoDoc
    
    /*COL :: se bloque a ingrid arteaga para que no salga en el certificado - 20150304*/  
    --and ( tab0.num_doc != 25282982 and tab0.id_anhos = 2014 )                
    and (
      case when ( tab0.num_doc = 25282982 and tab0.id_anhos = 2014 ) then 0 
      else 1 end
    ) = 1

)tab0
WHERE
1 = 1
$whereRetiro
       
)
EOD;


            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];


            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

select tab0.* from(

    SELECT DISTINCT  
    case when nomb.fecha_termina between  to_date( '$fecha_ini', 'YYYY-MM-DD') and to_date( '$fecha_fin', 'YYYY-MM-DD')
    then 1 else 0 end as retiro,
    nomb.fecha_termina,
    tab0.id_tipo_doc as id_tipo_doc, tab0.num_doc as num_doc, 
    tab0.id_anhos as id_anhos, tab1.tipo_documento as tipo_documento, 
    
    translate(tab1.primer_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as primer_nombre, 
    translate(tab1.segundo_nombre,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as segundo_nombre, 
    translate(tab1.primer_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as primer_apellido, 
    translate(tab1.segundo_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as segundo_apellido, 
    translate(tab1.nombre_completo,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as nombre_completo, 
    translate(tab1.nombre_apellido,'áéíóúÁÉÍÓÚñÑ','aeiouAEIOUnN') as nombre_apellido, 
                    
    to_char(tab1.fecha_nace, 'YYYY-MM-DD') as fecha_nace, tab1.email as email, 
    tab1.tel as telefono, tab1.direccion as direccion, tab1.pais_nace as pais_nace, 
    tab1.depto_nace as depto_nace, tab1.muni_nace as muni_nace, tab1.genero as genero, 
    tab1.estado_civil as estado_civil, tab1.tipo_sangre as tipo_sangre, 
    tab3.id_consecutivo_certif as id_consecutivo_certif, tab3.secuencia as secuencia 
    
    FROM NO_CERTIF_INGRE_RETEN tab0  
    
    JOIN NO_DATOS_FUNCIONARIO_V tab1 ON tab0.id_tipo_doc = tab1.id_tipo_doc AND tab0.num_doc = tab1.num_doc  
    JOIN NO_CONCEPTOS_V tab2 ON tab0.id_concep_nomina = tab2.id_concep_nomina  
    LEFT JOIN NO_CONSECUTIVO_CERTIF tab3 ON tab0.id_tipo_doc = tab3.id_tipo_doc AND tab0.num_doc = tab3.num_doc 
    AND tab0.id_anhos = tab3.id_anhos 
    
    left join no_nombramiento_v nomb
    on tab0.id_tipo_doc = nomb.id_tipo_doc and tab0.num_doc = nomb.num_doc
    
    WHERE  
    tab0.id_certif_ingre_reten != '-1' 
    AND tab0.id_anhos = $id_anhos 
    $whereFuncionarioNumDoc  $whereFuncionarioTipoDoc   
    
    /*COL :: se bloque a ingrid arteaga para que no salga en el certificado - 20150304*/        
    --and ( tab0.num_doc != 25282982 and tab0.id_anhos = 2014 )                
    and (
      case when ( tab0.num_doc = 25282982 and tab0.id_anhos = 2014 ) then 0 
      else 1 end
    ) = 1 

)tab0
WHERE
1 = 1
$whereRetiro
    
$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[res_autoliquida_consol] Consulta exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'NO_CERTIF_INGRE_RETEN',
        'NO_DATOS_FUNCIONARIO_V',
        'NO_CONCEPTOS_V',
        'NO_CONSECUTIVO_CERTIF'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'id_tipo_doc' => 'NO_CERTIF_INGRE_RETEN',
            'num_doc' => 'NO_CERTIF_INGRE_RETEN'
        ),
        'NO_CONCEPTOS_V' =>
        array(
            'id_concep_nomina' => 'NO_CERTIF_INGRE_RETEN'
        ),
        'NO_CONSECUTIVO_CERTIF, LEFT' =>
        array(
            'id_tipo_doc' => 'NO_CERTIF_INGRE_RETEN',
            'num_doc' => 'NO_CERTIF_INGRE_RETEN',
            'id_anhos' => 'NO_CERTIF_INGRE_RETEN'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_CERTIF_INGRE_RETEN' =>
        array(
//            'id_certif_ingre_reten' => 'id_certif_ingre_reten',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'id_anhos' => 'id_anhos'//,
//            'id_concep_nomina' => 'id_concep_nomina',
//            'valor_enero' => 'valor_enero',
//            'valor_febrero' => 'valor_febrero',
//            'valor_marzo' => 'valor_marzo',
//            'valor_abril' => 'valor_abril',
//            'valor_mayo' => 'valor_mayo',
//            'valor_junio' => 'valor_junio',
//            'valor_julio' => 'valor_julio',
//            'valor_agosto' => 'valor_agosto',
//            'valor_septiembre' => 'valor_septiembre',
//            'valor_octubre' => 'valor_octubre',
//            'valor_noviembre' => 'valor_noviembre',
//            'valor_diciembre' => 'valor_diciembre',
//            'valor_total' => 'valor_total'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'tipo_documento' => 'tipo_documento',
            'primer_nombre' => 'primer_nombre',
            'segundo_nombre' => 'segundo_nombre',
            'primer_apellido' => 'primer_apellido',
            'segundo_apellido' => 'segundo_apellido',
            'nombre_completo' => 'nombre_completo',
            'nombre_apellido' => 'nombre_apellido',
            'fecha_nace' => 'fecha_nace',
            'email' => 'email',
            'tel' => 'telefono',
            'direccion' => 'direccion',
            'pais_nace' => 'pais_nace',
            'depto_nace' => 'depto_nace',
            'muni_nace' => 'muni_nace',
            'genero' => 'genero',
            'estado_civil' => 'estado_civil',
            'tipo_sangre' => 'tipo_sangre'
        ),
//        'NO_CONCEPTOS_V' =>
//        array(
//            'codigo' => 'codigo',
//            'descripcion' => 'descripcion',
//            'codigo,||, - ,||,descripcion' => 'completo',
//            'id_tipo_concepto' => 'id_tipo_concepto',
//            'abreviatura' => 'abreviatura',
//            'operador' => 'operador',
//            'operadoropcional' => 'operadoropcional',
//            'cod2' => 'cod2',
//            'cod3' => 'cod3',
//            'id_concep_ajuste' => 'id_concep_ajuste',
//            'id_concep_rein' => 'id_concep_rein',
//            'id_acreedor' => 'id_acreedor',
//            'id_rubro' => 'id_rubro',
//            'id_cpo' => 'id_cpo',
//            'estado' => 'estado',
//            'aplica_descuento' => 'aplica_descuento',
//            'id_clase_fondo' => 'id_clase_fondo',
//            'usa_dias_calen' => 'usa_dias_calen'
//        ),
        'NO_CONSECUTIVO_CERTIF' =>
        array(
            'id_consecutivo_certif' => 'id_consecutivo_certif',
            'secuencia' => 'secuencia'
        )
    ); //por cada tabla especificar los campos del select

    /*
     * 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(
        'NO_CERTIF_INGRE_RETEN' => array(
            'id_certif_ingre_reten,a' => array('!=' => array(-1)),
            'id_certif_ingre_reten,b' => array('=' => array('id_certif_ingre_reten')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'num_doc' => array('=' => array('num_doc')),
            'id_anhos' => array('=' => array('id_anhos')),
            'id_concep_nomina' => array('=' => array('id_concep_nomina')),
            '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 $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'id_anhos', 'num_doc'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = false;
    //si es servicio para filtro agregar campo
    protected $filtro = 'Certificado Ingreso y Retenciones';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

    // 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;
    }

}
