<?php

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

    protected $table_names = array(
        'COM_COMISIONADO',
        'COM_COMISION',
        'PROYECTOS',
        'TIPOS_COMISION',
        'AREA',
        'COM_TIPO_DESTINO',
        'COM_TERCERO',
        'COM_TIPO_COMISIONADO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'COM_COMISION' =>
        array(
            'id_comision' => 'COM_COMISIONADO'
        )
        , 'PROYECTOS' =>
        array(
            'id_proyecto-id' => 'COM_COMISION'
        ),
        'TIPOS_COMISION' =>
        array(
            'id_tipo_comision' => 'COM_COMISION'
        ),
        'AREA' =>
        array(
            'id_area' => 'COM_COMISION'
        ),
        'COM_TIPO_DESTINO' =>
        array(
            'id_tipo_destino' => 'COM_COMISION'
        ),
        'COM_TERCERO' =>
        array(
            'id_tercero' => 'COM_COMISIONADO'
        ),
        'COM_TIPO_COMISIONADO' =>
        array(
            'tipter' => 'COM_TERCERO'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_COMISIONADO' =>
        array(
            'id_comisionado' => 'id_comisionado',
            'id_comision' => 'id_comision',
            'id_tercero' => 'id_tercero',
            'sueldo' => 'sueldo',
            'tarifa' => 'tarifa',
            'num_dias' => 'num_dias',
            'fecha_salida' => 'fecha_salida',
            'fecha_regreso' => 'fecha_regreso',
            'liquida' => 'liquida',
            'porcentaje' => 'porcentaje',
            'medio_dia' => 'medio_dia',
        )
        ,
        'COM_COMISION' =>
        array(
            'id_anhos' => 'id_anhos',
            'no_comision' => 'no_comision',
            'fecha_solicitud' => 'fecha_solicitud',
            'id_tipo_destino' => 'id_tipo_destino',
            'objeto' => 'objeto',
            'agenda' => 'agenda',
            'fecha_inicio' => 'fecha_inicio',
            'fecha_fin' => 'fecha_fin',
            'id_area' => 'id_area',
            'id_tipo_comision' => 'id_tipo_comision',
            'id_original' => 'id_original',
            'estado' => 'estado',
            'fecha_anulacion' => 'fecha_anulacion',
            'motivo_anulacion' => 'motivo_anulacion',
            'activo' => 'activo'
        )
        ,
        'PROYECTOS' =>
        array(
            'descripcion' => 'descripcion_cm',
            'codigo' => 'codigo_cm'
        ),
        'TIPOS_COMISION' =>
        array(
            'descripcion' => 'tipo_comision'
        ),
        'AREA' =>
        array(
            'descripcion' => 'area'
        ),
        'COM_TIPO_DESTINO' =>
        array(
            'descripcion' => 'tipo_destino'
        ),
        'COM_TERCERO' =>
        array(
            'num_doc' => 'num_doc',
            'nombre' => 'nombre',
            'email' => 'email'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
    ); //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(
        'COM_COMISIONADO' =>
        array(
            'id_comisionado,a' => array('!=' => array(-1)),
            'id_comisionado,b' => array('=' => array('id_comisionado')),
            'id_comision' => array('=' => array('id_comision')),
            'id_tercero' => array('=' => array('id_tercero')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'COM_TERCERO' =>
        array(
            'num_doc' => array('=' => array('num_doc'))
        )
    ); //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_comisionado'; //identificador de la tabla
    protected $id_names = array('id_comisionado'); //llave primaria
    protected $field_names = array('id_comision', 'id_tercero', 'sueldo', 'tarifa', 'num_dias',
        'fecha_salida', 'fecha_regreso', 'liquida', 'porcentaje', 'medio_dia'); //campos de la tabla, sin la llave primaria
    protected $has_activo = true;
    protected $table_name = 'COM_COMISIONADO'; //tabla en la cual se aplican los cambios 
    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_comisionado'; //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") {
            $logger->info("Entro a postprocessRequest - ADD");

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

                $sql = <<<EOD
select to_char(sysdate,'YYYY') as ID_ANHOS FROM DUAL
EOD;

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

                $id_anhos = $records[0]['id_anhos'];

                $id_comisionado = $list_data_post[0]['id_comisionado'];
                $id_comision = $list_data_post[0]['id_comision'];
                $id_tercero = $list_data_post[0]['id_tercero'];
                $tarifa = $list_data_post[0]['tarifa'];
                $num_dias = $list_data_post[0]['num_dias'];
                $liquida = $list_data_post[0]['liquida'];
                $porcentaje = $list_data_post[0]['porcentaje'];

                $logger->info("postprocessRequest sueldo::" . $request['sueldo'] . " - tarifa::" . $request['tarifa']);
                $logger->info("postprocessRequest sueldo::" . $list_data_post[0]['sueldo'] . " - tarifa::" . $list_data_post[0]['tarifa']);

                //Actualizacion 4 de Mayo de 2015
                //Se adiciona validacion en la variable que selecciona si se liquida o no viaticos.
                //El sistema estaba tomando la variable como false y por eso ponia el valor en 0


                if ($liquida == "1" || $liquida == 1 || $liquida == true || $liquida == "true") {


                    //CREAR EL REGISTRO DE VIATICOS EN LA TABLA DE OBJETOS GASTO

                    $logger->info("Entro a liquidar -  " . $liquida);
                    $sql = <<<EOD
select * from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1
EOD;

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

                    $id_obj_gasto = $records[0]['id'];
                    $valor = $tarifa * $num_dias;

                    /*
                     * validar $porcentaje null, debe ser mayor a 0 - 20150508
                     */
                    if ($porcentaje == null || $porcentaje == '' || $porcentaje == 0) {
                        $porcentaje = 100;
                    }

                    $valor = $valor * $porcentaje / 100;
                    $valor = round($valor);


                    $logger->info("Entro a tarifa : " . $tarifa);
                    $logger->info("Entro a num_dias : " . $num_dias);
                    $logger->info("Entro a valor : " . $valor);
                    $logger->info("Entro a porcentaje : " . $porcentaje);
                    //20170516 calculamos el monto del iva correspondiente al objeto de gasto
                    $valor_iva=0;
                    $porc_iva=0;
                    if($request['aplica_iva']==1){
                        $porc_iva=$request['porc_iva'];
                        //$valor_iva=($valor*$porc_iva)/100;
                        //20170725 Actualizamos el calculo de la porcion de IVA
                        $valor_iva=$valor-round($valor/(1+$porc_iva/100));
                    }
                
                    $sql = <<<EOD
INSERT INTO COM_COMISIONADO_OBJ (ID_COMISION,ID_TERCERO,ID_OBJ_GASTO,VALOR,OBSERVACIONES,PORC_IVA,VALOR_IVA)
   VALUES ($id_comision,$id_tercero,$id_obj_gasto,$valor,'VALOR CORRESPONDIENTE A VIATICOS',$porc_iva,$valor_iva)
EOD;

                    $this->conn->execute($sql);
                } else {

                    //CREAR EL REGISTRO DE VIATICOS EN LA TABLA DE OBJETOS GASTO CON VALOR 0 CON EL FIN DE EVITAR ERROR EN EL MOMENTO DE GENERAR LA CUENTA POR NULL

                    $logger->info("Entro a no liquidar - " . $liquida);
                    $sql = <<<EOD
select * from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1
EOD;

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

                    $id_obj_gasto = $records[0]['id'];
                    $valor = 0;


                    $sql = <<<EOD
            INSERT INTO COM_COMISIONADO_OBJ (ID_COMISION,ID_TERCERO,ID_OBJ_GASTO,VALOR,OBSERVACIONES)
               VALUES($id_comision,$id_tercero,$id_obj_gasto,$valor,'VALOR CORRESPONDIENTE A VIATICOS')
EOD;

                    $this->conn->execute($sql);
                }
                $this->conn->commit();
                $this->actualizarComisionadoImp($id_tercero, $id_comision);
                
            } catch (Exception $e) {



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

                $sql = <<<EOD
select to_char(sysdate,'YYYY') as ID_ANHOS FROM DUAL
EOD;

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

                $id_anhos = $records[0]['id_anhos'];

                $id_comisionado = $list_data_post[0]['id_comisionado'];
                $id_comision = $list_data_post[0]['id_comision'];
                $id_tercero = $list_data_post[0]['id_tercero'];
                $tarifa = $list_data_post[0]['tarifa'];
                $num_dias = $list_data_post[0]['num_dias'];
                $liquida = $list_data_post[0]['liquida'];
                $porcentaje = $list_data_post[0]['porcentaje'];




                //CREAR EL REGISTRO DE VIATICOS EN LA TABLA DE OBJETOS GASTO


                $sql = <<<EOD
select * from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1
EOD;

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

                $id_obj_gasto = $records[0]['id'];

                $sql = <<<EOD
delete from COM_COMISIONADO_OBJ  where id_comision=$id_comision and id_tercero = $id_tercero 
    and ID_OBJ_GASTO = (select id from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1)
EOD;

                $this->conn->execute($sql);


                $valor = $tarifa * $num_dias;
                $valor = round($valor);

                //Actualizacion 4 de Mayo de 2015
                //Se adiciona validacion en la variable que selecciona si se liquida o no viaticos.
                //El sistema estaba tomando la variable como false y por eso ponia el valor en 0
                
                if ($liquida == "1" || $liquida == 1 || $liquida == true || $liquida == "true") {
                    $logger->info("Entro a liquidar -  " . $liquida);

                    $valor = $valor * $porcentaje / 100;
                    $valor = round($valor);
                    //20170516 Si el comisionado es de regimen comun (aplica IVA) calculamos el monto del iva correspondiente al objeto de gasto
                    $valor_iva=0;
                    $porc_iva=0;
                    if($request['aplica_iva']==1){
                        $porc_iva=$request['porc_iva'];
                        //$valor_iva=($valor*$porc_iva)/100;
                        //20170725 Actualizamos el calculo de la porcion de IVA
                        $valor_iva=$valor-round($valor/(1+$porc_iva/100));
                        
                    }
                    $sql = <<<EOD
            INSERT INTO COM_COMISIONADO_OBJ (ID_COMISION,ID_TERCERO,ID_OBJ_GASTO,VALOR,OBSERVACIONES,PORC_IVA,VALOR_IVA)
               VALUES($id_comision,$id_tercero,$id_obj_gasto,$valor,'VALOR CORRESPONDIENTE A VIATICOS',$porc_iva,$valor_iva)
EOD;

                    $this->conn->execute($sql);
                } else {
                    $logger->info("No Entro a liquidar -  " . $liquida);
                }
                $this->conn->commit();
                $this->actualizarComisionadoImp($id_tercero, $id_comision);
            } catch (Exception $e) {



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

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


            $id_comision = $request['id_comision'];
            $id_tercero = $request['id_tercero'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            $medio_dia = $request['medio_dia'];


            $sql = <<<EOD
select * from com_comision where id_comision = $id_comision
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $id_tipo_viatico = $records[0]['id_tipo_viatico'];
            $id_tipo_destino = $records[0]['id_tipo_destino'];
            $trm = $records[0]['trm'];

            $sql = <<<EOD
select * from com_tercero where id_tercero = $id_tercero
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $sueldo = $records[0]['sueldo'];
            $tipter = $records[0]['tipter'];
            $aplica_iva = $records[0]['aplica_iva'];
            $porcentaje_iva = $records[0]['porcentaje_iva'];

            $sql = <<<EOD
select tab0.*,tab1.porcentaje_sueldo from com_tercero tab0 
    join com_tipo_comisionado tab1 ON tab1.tipter = tab0.tipter 
        where tab0.id_tercero = $id_tercero
EOD;

            $records = CN_TABLE::executeSQL($sql);
            $porcentaje_sueldo = $records[0]['porcentaje_sueldo'];
            //20171605 se envia el porcentaje de IVA y si es de regimen comun (aplica_iva) para usarlos a la hora de almacenar el COM_COMISIONADO_OBJS de ser necesario
            $request['aplica_iva']=0;
            if ($aplica_iva == "1" || $aplica_iva == 1 || $aplica_iva == true || $aplica_iva == "true") {
                
                //20170724 El IVA no afecta al sueldo BASE ticket #6686 
                //$sueldo = $sueldo / (1 + $porcentaje_iva / 100);
                $request['aplica_iva']=1;
                $request['porc_iva']=$porcentaje_iva;
            }

            $sueldo = $sueldo / $porcentaje_sueldo;



            $sql = <<<EOD
select * from com_tarifa_viatico where tipter = '$tipter' and rango_ini<=$sueldo and rango_fin>=$sueldo and id_tipo_viatico = $id_tipo_viatico
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $tarifa = $records[0]['tarifa'];

            if ($id_tipo_destino == 2) {
                $tarifa = $tarifa * $trm;
            }

            $request['tarifa'] = round($tarifa);
            $request['sueldo'] = round($sueldo);
            $logger->info("sueldo::" . $request['sueldo'] . " - tarifa::" . $request['tarifa']);




            $sql = <<<EOD
select (to_date('$fecha_regreso','YYYY-MM-DD') - to_date('$fecha_salida','YYYY-MM-DD'))+ 0.5 AS DIAS from dual 
EOD;

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

            $num_dias = $records[0]['dias'];



            if ($num_dias > 1) {
                $logger->info("entre");
                //Se cambia validacion ,ya que al ser false, estaba entrando, solo se resta el medio dia si es true - 20160715
                //if ($medio_dia == "1" || $medio_dia == 1 || $medio_dia == "true" || $medio_dia == true) {
                if ($medio_dia == "true") {
                    $num_dias = $num_dias - 0.5;
                }
            }


            $request['num_dias'] = $num_dias;
        }

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


            $id_comision = $request['id_comision'];
            $id_tercero = $request['id_tercero'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            $medio_dia = $request['medio_dia'];

            $sql = <<<EOD
select * from com_comision where id_comision = $id_comision
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $id_tipo_viatico = $records[0]['id_tipo_viatico'];
            $id_tipo_destino = $records[0]['id_tipo_destino'];
            $trm = $records[0]['trm'];

            $sql = <<<EOD
select * from com_tercero where id_tercero = $id_tercero
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $sueldo = $records[0]['sueldo'];
            $tipter = $records[0]['tipter'];
            $aplica_iva = $records[0]['aplica_iva'];
            $porcentaje_iva = $records[0]['porcentaje_iva'];

            $sql = <<<EOD
select tab0.*,tab1.porcentaje_sueldo from com_tercero tab0 
    join com_tipo_comisionado tab1 ON tab1.tipter = tab0.tipter 
        where tab0.id_tercero = $id_tercero
EOD;

            $records = CN_TABLE::executeSQL($sql);
            $porcentaje_sueldo = $records[0]['porcentaje_sueldo'];

            $logger->info("Aplica IVA => " . $aplica_iva);
            //20171605 se envia el porcentaje de IVA y si aplica_iva para usarlos a la hora de almacenar el COM_COMISIONADO_OBJS de ser necesario
            $request['aplica_iva']=0;
            if ($aplica_iva == "1" || $aplica_iva == 1 || $aplica_iva == true || $aplica_iva == "true") {
                $logger->info("entre aca");
                $sueldo = $sueldo / (1 + $porcentaje_iva / 100);
                $request['aplica_iva']=1;
                $request['porc_iva']=$porcentaje_iva;
            }

            $sueldo = $sueldo / $porcentaje_sueldo;



            $sql = <<<EOD
select * from com_tarifa_viatico where tipter = '$tipter' and rango_ini<=$sueldo and rango_fin>=$sueldo and id_tipo_viatico = $id_tipo_viatico
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $tarifa = $records[0]['tarifa'];

            if ($id_tipo_destino == 2) {
                $tarifa = $tarifa * $trm;
            }


            $request['tarifa'] = $tarifa;
            $request['sueldo'] = $sueldo;

            $sql = <<<EOD
select (to_date('$fecha_regreso','YYYY-MM-DD') - to_date('$fecha_salida','YYYY-MM-DD'))+0.5 AS DIAS from dual 
EOD;

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

            $num_dias = $records[0]['dias'];

            if ($num_dias >= 1) {
                $logger->info("entre");
                //Se cambia validacion ,ya que al ser false, estaba entrando, solo se resta el medio dia si es true - 20160715
                if ($medio_dia == "true") {
                    $num_dias = $num_dias - 0.5;
                    $logger->info($medio_dia . "::num_dias-0.5::" . $num_dias);
                }
            }


            $logger->info("num_dias::" . $num_dias);
            $request['num_dias'] = $num_dias;
        }

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

            $id_comisionado = $request['id_comisionado'];


            $sql = <<<EOD
select * from com_comisionado  where id_comisionado = $id_comisionado
EOD;

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

            $id_comision = $records[0]['id_comision'];
            $id_tercero = $records[0]['id_tercero'];

            $sql = <<<EOD
select to_char(sysdate,'YYYY') as ID_ANHOS FROM DUAL
EOD;

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

            $id_anhos = $records[0]['id_anhos'];

            $sql = <<<EOD
select * from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1
EOD;

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

            $id_obj_gasto = $records[0]['id'];

            $logger->info("Objeto de Gasto " . $id_obj_gasto);

            $sql = <<<EOD
delete from COM_COMISIONADO_OBJ  where id_comision=$id_comision and id_tercero = $id_tercero 
    and ID_OBJ_GASTO = (select id from objetos_gasto  where ano_fiscal = '$id_anhos' and viatico = 1)
EOD;

            CN_TABLE::executeSQL($sql);
            //se elimina los impuestos
            //Borramos todos los registros de impuestos del comisionado para la comision
                    $sql = <<<EOD
DELETE from com_comisionado_imp where id_comision = $id_comision and id_tercero=$id_tercero
EOD;
            CN_TABLE::executeSQL($sql);
            $logger->info("::Entro a Eliminar Impuestos::".$id_tercero." - ".$id_comision);
            //$this->actualizarComisionadoImp($id_tercero, $id_comision);
        }

        return $request;
    }

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



        $id_comision = $request['id_comision'];
        $id_tercero = $request['id_tercero'];
        $fecha_salida = $request['fecha_salida'];
        $fecha_regreso = $request['fecha_regreso'];


        /*
         *  Validar la operación, ya sea por SQL
         */
        //Validar que el comisionado no tenga comisiones pendientes por legalizar, solo comisiones activas - 20160829
        //Se quita validacion ,para que sea solo un mensaje de notificacion - 20160831
        $sql = <<<EOD
select 
tab4.id_tercero,
tab0.*,
case 
    when tab13.id_cierre is not null then 'CERRADO'
    when tab12.id_radicado is not null then 'RADICADO'
    when tab11.id_cumplido is not null then 'LEGALIZANDO'
    else 'PENDIENTE' end as estado_cumplido
from com_comision tab0
left join com_resolucion tab1 on tab1.id_comision = tab0.id_comision
left join com_cuenta tab2 on tab2.id_resolucion = tab1.id_resolucion
left join com_pago_egreso tab3 on tab3.id_cuenta = tab2.id_cuenta

left join com_comisionado tab4
on tab4.id_comision = tab0.id_comision
    
left join com_cumplido tab11 on tab11.id_pago_egreso = tab3.id_pago_egreso
left join com_radicado tab12 on tab12.id_pago_egreso = tab3.id_pago_egreso
left join com_cierre tab13 on tab13.id_pago_egreso = tab3.id_pago_egreso

where
tab1.id_comision != $id_comision
and tab11.id_cumplido is null
and tab4.id_tercero = $id_tercero   
and tab0.estado = 1                 
EOD;

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

        if (count($records) > 0) {
            $cantidad = $records[0]['no_comision'];

            //$errors['mensaje'] = "El Comisionado tienen comisiones(No. $cantidad) Pendientes por legalizar.";
            //$errors['servicio'] = "comisionado";
        }



        $sql = <<<EOD
select count(id_comisionado) cantidad 
    from com_comisionado 
        where id_comision = $id_comision and id_tercero = $id_tercero 
EOD;

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

        $cantidad = $records[0]['cantidad'];


        if ($cantidad > 0) {

            $errors['mensaje'] = "El Comisionado ya se encuentra programado en esta comisión.";
            $errors['servicio'] = "comisionado";
        }

        $sql = <<<EOD
select to_char(sysdate,'YYYY') as ID_ANHOS FROM DUAL
EOD;

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

        $id_anhos = $records[0]['id_anhos'];

        $sql = <<<EOD
select tab1.CRUCE,tab1.ORIGINAL
from com_comision tab0 
join TIPOS_COMISION tab1 ON tab1.ID_TIPO_COMISION = tab0.ID_TIPO_COMISION

where tab0.id_comision = $id_comision and tab0.id_anhos='$id_anhos'
EOD;

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

        $cruce = $records[0]['cruce'];
        $original = $records[0]['original'];


        if ($cruce == "0") {

            //Si no se permite cruce, verificar que la fecha de inicio no sea anterior al dia actual

            $sql = <<<EOD
select case when to_date('$fecha_salida','YYYY-MM-DD') < TRUNC(SYSDATE) then 1 else 0 END as DIFERENCIA FROM DUAL
EOD;

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

            $diferencia = $records[0]['diferencia'];

            /* if ($diferencia == 1) {

              $errors['mensaje'] = "La fecha de Salida no puede ser menor a la fecha actual";
              $errors['servicio'] = "cuenta";
              } */

            //Si no se permite cruce se debe verificar que el comisionado no se encuentre en otra comision en la misma fecha

            $sql = <<<EOD
select count(tab0.ID_COMISIONADO) cantidad

from COM_COMISIONADO tab0 

WHERE tab0.id_tercero = 2 and 
(
tab0.fecha_salida between TO_DATE('$fecha_salida','YYYY-MM-DD') AND TO_DATE('$fecha_regreso','YYYY-MM-DD') 
OR 
tab0.fecha_regreso between TO_DATE('$fecha_salida','YYYY-MM-DD') AND TO_DATE('$fecha_regreso','YYYY-MM-DD')

)


EOD;

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

            $cantidad = $records[0]['cantidad'];


            if ($cantidad == 1) {

                $errors['mensaje'] = "El comisionado ya se encuentra asociado a otra comision en este rango de fechas.";
                $errors['servicio'] = "comisionado";
            }
        }



        /*
         *  Generar errores en $errors
         */
        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;
    }
    //20170516 Funcion para actualizar la tabla de comisionado Imp borra los registros del tercero y la comision y los recalcula
    public function actualizarComisionadoImp($idtercero,$idcomision) {
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();
            try {
            //20170516 proceso para recalcular los Impuestos Iva e ICA 
                $id_tercero = $idtercero;
                $id_comision = $idcomision;
                $sql = <<<EOD
    select * from com_tercero where id_tercero = $id_tercero
EOD;
                $records = CN_TABLE::executeSQL($sql);
                $aplica_iva = $records[0]['aplica_iva'];
                $aplica_ica=$records[0]['aplica_ica'];
                //Si aplica IVA proceso de generar de retenciones de iva
                if ($aplica_iva == "1" || $aplica_iva == 1 || $aplica_iva == true || $aplica_iva == "true") {
                    //buscamos el codigo del reteIVA para control de comisiones
                    $sql = <<<EOD
select * from com_param_control_comis where parametro = 'COD_IMP_RETIVA'
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $codimp = $records[0]['valor'];
                    //Obtenemos el porcentaje
                    $sql = <<<EOD
select * from ts_im where id= $codimp
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $porcentaje = $records[0]['porcentaje'];

                    //Borramos todos los registros de impuestos de la comision referente a IVA
                    $sql = <<<EOD
DELETE from com_comisionado_imp where id_comision = $id_comision and id_tercero=$id_tercero and id_ts_im=$codimp
EOD;
                    $this->conn->execute($sql);
                    $sql = <<<EOD
select sum(valor) as valor,sum(valor_iva) as valor_iva from com_comisionado_obj where id_comision = $id_comision and id_tercero=$id_tercero
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $valor_base = $records[0]['valor_iva'];
                    $valor=round(($valor_base*$porcentaje)/100);
                    $sql = <<<EOD
            INSERT INTO COM_COMISIONADO_IMP (ID_COMISION,ID_TERCERO,ID_TS_IM,PORCENTAJE,VALOR_BASE,VALOR_IMP)
               VALUES($id_comision,$id_tercero,$codimp,$porcentaje,$valor_base,$valor)
EOD;
                    $this->conn->execute($sql);
                }
                //Desde aqui reencion del ICA
                if ($aplica_ica == "1" || $aplica_ica == 1 || $aplica_ica == true || $aplica_ica == "true") {
                    //buscamos el codigo del reteICA para control de comisiones
                    $sql = <<<EOD
select * from com_param_control_comis where parametro = 'COD_IMP_RETICA'
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $codimp = $records[0]['valor'];
                    //Obtenemos el porcentaje
                    $sql = <<<EOD
select * from ts_im where id= $codimp
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $porcentaje = $records[0]['porcentaje'];

                    //Borramos todos los registros de impuestos de la comision referente a IVA
                    $sql = <<<EOD
DELETE from com_comisionado_imp where id_comision = $id_comision and id_tercero=$id_tercero and id_ts_im=$codimp
EOD;
                    $this->conn->execute($sql);
                    $sql = <<<EOD
select sum(valor) as valor,sum(valor_iva) as valor_iva from com_comisionado_obj where id_comision = $id_comision and id_tercero=$id_tercero
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $valor_base =$records[0]['valor']- $records[0]['valor_iva'];
                    $valor=round(($valor_base*$porcentaje)/100);
                    $sql = <<<EOD
            INSERT INTO COM_COMISIONADO_IMP (ID_COMISION,ID_TERCERO,ID_TS_IM,PORCENTAJE,VALOR_BASE,VALOR_IMP)
               VALUES($id_comision,$id_tercero,$codimp,$porcentaje,$valor_base,$valor)
EOD;
                 $this->conn->execute($sql);
                }
                $this->conn->commit();
            } catch (Exception $e) {

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

}
