<?php

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

    protected $table_names = array(
        'NO_CONCEPTOS_V',
        'NO_TIPO_CONCEPTO',
        'INTERCEROS_V',
        'PR_RUBRO_PRESUP_V',
        'PROYECTOS',
        'NO_CLASE_FONDO',
        'NO_NIVEL_CONCEPTOS'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_TIPO_CONCEPTO' =>
        array(
            'id_tipo_concepto' => 'NO_CONCEPTOS_V'
        ),
        'INTERCEROS_V, LEFT' =>
        array(
            'id_acreedor-id_mae_ter' => 'NO_CONCEPTOS_V'
        ),
        'PR_RUBRO_PRESUP_V, LEFT' =>
        array(
            'id_rubro' => 'NO_CONCEPTOS_V'
        ),
        'PROYECTOS, LEFT' =>
        array(
            'id_cpo-id' => 'NO_CONCEPTOS_V'
        ),
        'NO_CLASE_FONDO, LEFT' =>
        array(
            'id_clase_fondo' => 'NO_CONCEPTOS_V'
        ),
        'NO_NIVEL_CONCEPTOS, LEFT' =>
        array(
            'id_concep_nomina' => 'NO_CONCEPTOS_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_CONCEPTOS_V' =>
        array(
            'id_concep_nomina' => 'id_concep_nomina',
            'codigo' => 'codigo',
            'descripcion' => 'descripcion',
            'codigo,||, - ,||,descripcion' => 'completo',
            'id_tipo_concepto' => 'id_tipo_concepto',
            'abreviatura' => 'abreviatura',
            'operador' => 'operador',
            'operadoropcional' => 'operadoropcional',
            'cod2' => 'cod2',
            'cod3' => 'cod3',
            'abre2' => 'abre2',
            'abre3' => 'abre3',
            'cod2,||, - ,||,abre2' => 'com_cod2',
            'cod3,||, - ,||,abre3' => 'com_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',
            'aplica_certif' => 'aplica_certif',
            'cant_uvt' => 'cant_uvt',
            'aplica_vacac' => 'aplica_vacac',
            'pago_func' => 'pago_func',
            'id_tipo_concepto_org' => 'id_tipo_concepto_org',
            'id_lista_conceptos_siif' => 'id_lista_conceptos_siif',
            'aplica_novka' => 'aplica_novka',
            'aplica_asig_basica' => 'aplica_asig_basica',
            'aplica_desc_adic_vac' => 'aplica_desc_adic_vac',
            'factor_salarial' => 'factor_salarial',
            'id_concepto_patronal' => 'id_concepto_patronal'
        ),
        'NO_TIPO_CONCEPTO' =>
        array(
            'codigo' => 'codigo_concepto',
            'descripcion' => 'descripcion_concepto',
            'codigo,||, - ,||,descripcion' => 'completo_tipo'
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => 'num_doc_tercero',
            'razon_soc' => 'razon_soc',
            'num_doc,||, - ,||,razon_soc' => 'completo_tercero'
        ),
        'PR_RUBRO_PRESUP_V' =>
        array(
            'rubro' => 'rubro',
            'descripcion' => 'descripcion_rub',
            'rubro,||, - ,||,descripcion' => 'completo_rubro',
            'id_agrup_rec' => 'id_agrup_rec'
        ),
        'PROYECTOS' =>
        array(
            'codigo' => 'cod_proyecto',
            'descripcion' => 'descripcion_proy',
            'codigo,||, - ,||,descripcion' => 'completo_proy'
        ),
        'NO_CLASE_FONDO' =>
        array(
            'codigo' => 'cod_clase',
            'descripcion' => 'descripcion_clase',
            'codigo,||, - ,||,descripcion' => 'completo_clase'
        )/* ,Se quita ya que duplica los registros - 20200818
              'NO_NIVEL_CONCEPTOS' =>
              array(
              'id_nivel_conceptos'=>'id_nivel_conceptos',
              'id_com_esc'=>'id_com_esc'
              ) */
    ); //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_CONCEPTOS_V' => array(
            'id_concep_nomina,a' => array('!=' => array(-1)),
            'id_concep_nomina,b' => array('=' => array('id_concep_nomina')),
            'id_concep_nomina,c' => array('!=' => array('id_concep_nomina_not')),
            'id_tipo_concepto' => array('=' => array('id_tipo_concepto')),
            'id_clase_fondo' => array('=' => array('id_clase_fondo')),
            'aplica_certif' => array('=' => array('aplica_certif')),
            'id_acreedor' => array('=' => array('id_acreedor')),
            'aplica_vacac' => array('=' => array('aplica_vacac')),
            'aplica_novka' => array('=' => array('aplica_novka')),
            'pago_func' => array('=' => array('pago_func')),
            'estado' => array('=' => array('estado')),
            'codigo' => array('=' => array('codigo')),
            'descripcion' => array('LIKEALLPLUS' => array('descripcion', '%')),
            'factor_salarial' => array('=' => array('factor_salarial')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'NO_TIPO_CONCEPTO' => array(
            'codigo' => array('=' => array('codigo_concepto'))
        ),
        'NO_NIVEL_CONCEPTOS' => array(
            'id_com_esc' => array('=' => array('id_com_esc'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'NO_CONCEPTOS_V' =>
        array(
            'codigo' => array('LIKE' => array('input', '%')),
            'descripcion' => array('LIKEALLPLUS' => array('input', '%'))
        )
    ); // filtros de condicion or
    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'codigo'
    ); //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 = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Area';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;



    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_concep_nomina'; //identificador de la tabla
    protected $id_names = array('id_concep_nomina'); //llave primaria
    protected $field_names = array('codigo', 'descripcion', 'id_tipo_concepto', 'abreviatura', 'operador',
        'id_concep_ajuste', 'id_concep_rein', 'id_acreedor', 'id_rubro', 'id_cpo', 'estado', 'aplica_descuento',
        'id_clase_fondo', 'usa_dias_calen', 'aplica_certif', 'cant_uvt', 'aplica_vacac', 'pago_func',
        'id_tipo_concepto_org', 'id_lista_conceptos_siif', 'aplica_novka', 'aplica_asig_basica', 'aplica_desc_adic_vac', 'factor_salarial', 'id_concepto_patronal'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_CONCEP_NOMINA'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //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_concep_nomina'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = 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;



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

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

            try {

                //Validacion
                if (isset($request['id_rubro']) && isset($request['id_agrup_rec'])) {

                    $id_rubro = $request['id_rubro'];
                    $id_agrup_rec = $request['id_agrup_rec'];

                    //Actualiza pr_rubro_agrup_rec - 20240126::LAVILA
                    $sql = <<<EOD
update pr_rubro_agrup_rec set id_agrup_rec = $id_agrup_rec where id_rubro = $id_rubro 
EOD;
                    $this->conn->execute($sql);
                }

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

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

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

            try {

                //Validacion
                if (isset($request['id_rubro']) && isset($request['id_agrup_rec'])) {

                    $id_rubro = $request['id_rubro'];
                    $id_agrup_rec = $request['id_agrup_rec'];

                    //Actualiza pr_rubro_agrup_rec - 20240126::LAVILA
                    $sql = <<<EOD
update pr_rubro_agrup_rec set id_agrup_rec = $id_agrup_rec where id_rubro = $id_rubro 
EOD;
                    $this->conn->execute($sql);
                }

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

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

        return $request;
    }

}
