<?php

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

    protected $table_names = array(
        'COM_PLAN_COMISIONADOS_PLACOM_V',
        'TRANSPORTES',
        'REGIONALES',
        'COM_TIPO_COMISIONADO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'TRANSPORTES' =>
        array(
            'id_transporte-id' => 'COM_PLAN_COMISIONADOS_PLACOM_V'
        ),
        'REGIONALES' =>
        array(
            'codreg' => 'COM_PLAN_COMISIONADOS_PLACOM_V'
        ),
        'COM_TIPO_COMISIONADO' =>
        array(
            'tipter' => 'COM_PLAN_COMISIONADOS_PLACOM_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_PLAN_COMISIONADOS_PLACOM_V' =>
        array(
            'num_doc' => 'num_doc',
            'razsoc' => 'razsoc',
            'num_doc,||, - ,||,razsoc' => 'completo_ter',
            'tipter_ter' => 'tipter_ter',
            'tipoter_text' => 'tipoter_text',
            'tipter_ter,||, - ,||,tipoter_text' => 'completo_tipter',
            'nitocc' => 'nitocc',
            'id_plan_comisiones' => 'id_plan_comisiones',
            'vigencia' => 'vigencia',
            'id_transporte' => 'id_transporte',
            'sueldo' => 'sueldo',
            'cargo' => 'cargo',
            'fecha_salida' => 'fecha_salida',
            'dias' => 'dias',
            'codreg' => 'codreg',
            'total_comision' => 'total_comision',
            'estado' => 'estado',
            'fecha_regreso' => 'fecha_regreso',
            'gastos_taxis' => 'gastos_taxis',
            'dias_manu' => 'dias_manu',
            'tipter' => 'tipter',
            'codobj' => 'codobj',
            'valor' => 'valor',
            'valor_gasto' => 'valor_gasto',
            'viaticos' => 'viaticos',
            'acumulado_gastos' => 'acumulado_gastos',
            'taxis' => 'taxis',
            'tarifa' => 'tarifa',
            'dias_tiempo' => 'dias_tiempo',
            'hora_salida' => 'hora_salida',
            'hora_regreso' => 'hora_regreso',
            'hora_salida_sel' => 'hora_salida_sel',
            'hora_regreso_sel' => 'hora_regreso_sel',
            'dias_tarifa_a' => 'dias_tarifa_a',
            'dias_tarifa_b' => 'dias_tarifa_b',
            'porcentaje_dia' => 'porcentaje_dia',
            'justificacion_por' => 'justificacion_por'
        ),
        'TRANSPORTES' =>
        array(
            'descripcion' => 'descripcion_trans'
        ),
        'REGIONALES' =>
        array(
            'desreg' => 'desreg',
            'abreviatura' => 'abreviatura'
        ),
        'COM_TIPO_COMISIONADO' =>
        array(
            'descripcion' => 'tipo_comisionado'
        )
    ); //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
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * EJEMPLO: 'titular' => array('NULL' => array('titular')),
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'COM_PLAN_COMISIONADOS_PLACOM_V' => array(
            'id_plan_comisiones,a' => array('!=' => array(-1)),
            'id_plan_comisiones,b' => array('=' => array('id_plan_comisiones')),
            'num_doc' => array('=' => array('num_doc')),
            'vigencia' => array('=' => array('vigencia')),
            'programado' => array('=' => array('programado')),
            'id_transporte' => array('=' => array('id_transporte')),
            'codreg' => array('=' => array('codreg')),
            'tipter' => array('=' => array('tipter')),
            '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(
        'vigencia', 'id_plan_comisiones', 'tipoter_text', 'nitocc'
    ); //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 = null; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('nitocc', 'id_plan_comisiones', 'vigencia'); //llave primaria
    protected $field_names = array('id_transporte', 'sueldo', 'cargo', 'fecha_salida',
        'dias', 'codreg', 'total_comision', 'estado', 'fecha_regreso', 'gastos_taxis',
        'dias_manu', 'tipter', 'dias_tiempo', 'hora_salida', 'hora_regreso', 'liquidar_via',
        'dias_tarifa_a', 'dias_tarifa_b', 'porcentaje_dia', 'justificacion_por'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'COM_PLAN_COMISIONADOS_PLACOM'; //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

    /*
     * campos para fecha sistema
     */
//    protected $campo_fecha_sistema = array(
//        'fecha'
//    );

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

        /*
         * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

        $int = 0;
        foreach ($array as $routeName => $routeData) {
            //echo $routeName . "\n";
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadCliente = $value;
                    }
                }
            }
            if ('entidad_nombre' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadNombre = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            if ('jasper_url' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $url_jasper = $value;
                    }
                }
            }
            //$url_presup = "http://10.0.100.66/presupuesto/web/index.php/pr_resolucion_comis/";
            $int++;
        }

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

        //Validar sueldo mayor a 0
        if ($request['sueldo'] <= "0") {
            $errors['mensaje'] = "El sueldo del contratista debe ser mayor a cero(0).";
            $errors['servicio'] = "com_plan_comisionados_placom";
        }
        //20190506 Validamos que la fecha de regreso de la comision sea al menos 3 dias antes de la fecha de 
        //finalizacion de contrato activo del contratista
        //ademas que el contratista tenga contrato activo en Radicacion Virtual de cuentas
        //Aplica solo cuando el tercero es contratista
        //TIPO TERCERO 01-Contratista 02-Funcionario
        if ($request['tipter'] == "01") {

            $schema = "";
            if ($entidadCliente == "3") {
                $schema = "@WEBSAFI.ANM.LOCAL";
            }

            $numdoc = $request['num_doc'];
            $fecha = $request['fecha_regreso'];

            $sql = <<<EOD
select *
from rvc_contratista$schema tab1 
where tab1.num_doc='$numdoc' and tab1.omite_contrato = 0
EOD;

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


            if (count($records) > 0) {
                $sql = <<<EOD
select to_char(tab0.fecha_fin,'dd/mm/yyyy') as fecha_fin,
case when tab0.fecha_fin-3<to_date('$fecha','yyyy-mm-dd') then 'NO' else 'SI' end as fecha_valida
from rvc_contrato$schema tab0
left join rvc_contratista$schema tab1 on tab1.id_contratista=tab0.id_contratista
where tab0.estado=1 and tab1.num_doc='$numdoc'
order by tab0.fecha_fin DESC
EOD;

                $records = CN_TABLE::executeSQL($sql);
                if (count($records) > 0) {
                    $fecha_valida = $records[0]['fecha_valida'];
                    $fecha_fin_contrato = $records[0]['fecha_fin'];
                    if ($fecha_valida == "NO") {
                        $errors['mensaje'] = "El contrato del contratista termina el $fecha_fin_contrato, No puede programar una comision con fecha de regreso mayor a tres dias antes a la finalizacion del contrato.";
                        $errors['servicio'] = "com_plan_comisionados_placom";
                    }
                } else {
                    $errors['mensaje'] = "El contratista no tiene ningun contrato activo.";
                    $errors['servicio'] = "com_plan_comisionados_placom";
                }
            }

            /*
             * Caso Aranda 107693, valdiaciones nuevas para contratista - 20241025
             * Solo ANM
              • Si el contrato es SGR no se pueden hacer comisiones por ANM y si es ANM no se puede en SGR
             */
            $sql = <<<EOD
select 
tab0.id_contrato,
LISTAGG(rpcdp.cdp, ', ') WITHIN GROUP(ORDER BY rpcdp.id_rps_cdps_contrato) as cdp,
LISTAGG(rpcdp.tipo_recurso, ', ') WITHIN GROUP(ORDER BY rpcdp.id_rps_cdps_contrato) as tipo_recurso,
nvl(sum(case when rpcdp.tipo_recurso = 0 then 1 else 0 end),0) as cantpgn,
nvl(sum(case when rpcdp.tipo_recurso = 1 then 1 else 0 end),0) as cantsgr
                    
from rvc_contrato$schema tab0
left join rvc_contratista$schema tab1 on tab1.id_contratista=tab0.id_contratista
left join rvc_rps_cdps_contrato$schema rpcdp on rpcdp.id_contrato = tab0.id_contrato
                    
where tab0.estado=1 and tab1.num_doc='$numdoc'
group by tab0.id_contrato
order by tab0.id_contrato desc
EOD;

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

                $cantpgn = $records[0]['cantpgn'];
                $cantsgr = $records[0]['cantsgr'];

                if ($entidadCliente == "3") {
                    if ($cantpgn >= 1 && $cantsgr == 0) {
                        $errors['mensaje'] = "Si el contrato es ANM no se pueden hacer comisiones por SGR, verificar.";
                        $errors['servicio'] = "com_plan_comisionados_placom";
                    }
                } else {
                    if ($cantsgr >= 1 && $cantpgn == 0) {
                        $errors['mensaje'] = "Si el contrato es SGR no se pueden hacer comisiones por ANM, verificar.";
                        $errors['servicio'] = "com_plan_comisionados_placom";
                    }
                }
            }


            /*
             * Caso Aranda 107693, valdiaciones nuevas para contratista - 20241025
             * Solo ANM
              • Si el rubro del CDP del proyecto es de funcionamiento y el rubro del contrato del contratista es de inversión.
              • Si el rubro del CDP del proyecto es de inversión y el rubro del contrato del contratista es de funcionamiento.
              • Si el rubro del CDP y del contratista es de la misma clase funcionamiento o inversión Si permitir la programación.
             */
            //Para validar que si coincide la salida con un regreso, sea de 1 dia por lo menos - 20210929::LAVILA   
            $schema_pgn = "";
            $schema_sgr = "";
            if ($entidadCliente == "3") {
                $schema_pgn = "@WEBSAFI.ANM.LOCAL";
                $schema_sgr = "";
            }else{
                $schema_pgn = "";
                $schema_sgr = "@SGR.ANM.LOCAL";                
            }

            $sql = <<<EOD
select 
tab0.id_contrato,

LISTAGG(rpcdp.cdp, ', ') WITHIN GROUP(ORDER BY rpcdp.id_rps_cdps_contrato) as cdp,
LISTAGG(extract(year from rpcdp.fecha_cdp), ', ') WITHIN GROUP(ORDER BY rpcdp.id_rps_cdps_contrato) as vig_cdp,
LISTAGG(tab3.id_cdp , ', ') WITHIN GROUP(ORDER BY tab3.id_cdp) as  ID_PR_CDP_CPO,
LISTAGG(apro.id_rubro, ', ') WITHIN GROUP(ORDER BY apro.id_rubro) as id_rubro,
LISTAGG(rub.id_clase_presup, ', ') WITHIN GROUP(ORDER BY apro.id_rubro) as id_clase_presup,

--LISTAGG(rub.rubro, ', ') WITHIN GROUP(ORDER BY apro.id_rubro) as codigo_rubro,
to_char(wm_concat(distinct rub.rubro)) as codigo_rubro,

nvl(sum(case when rub.id_clase_presup = 8 then 1 else 0 end),0) as func,
nvl(sum(case when rub.id_clase_presup = 9 then 1 else 0 end),0) as inv

from rvc_contrato$schema tab0
left join rvc_contratista$schema tab1 on tab1.id_contratista=tab0.id_contratista
left join rvc_rps_cdps_contrato$schema rpcdp on rpcdp.id_contrato = tab0.id_contrato

left join (

    select
    0 as sgr,
    cdpcpo.ID_cdp,
    cdpcpo.ano_fiscal,
    cdpcpo.id_vigencia,
    asig.id_apropiacion
    from pr_cdp_cpo$schema_pgn cdpcpo
    left join pr_cpo_asign$schema_pgn cpoasig on cpoasig.ID_PR_CDP_CPO = cdpcpo.ID and cpoasig.ano_fiscal = cdpcpo.ano_fiscal and cpoasig.id_vigencia = cdpcpo.id_vigencia
    left join pr_asig_presup$schema_pgn asig on asig.id = cpoasig.id_asign
    union

    select
    1 as sgr,
    cdpcpo.ID_cdp,
    cdpcpo.ano_fiscal,
    cdpcpo.id_vigencia,
    asig.id_apropiacion
    from pr_cdp_cpo$schema_sgr cdpcpo
    left join pr_cpo_asign$schema_sgr cpoasig on cpoasig.ID_PR_CDP_CPO = cdpcpo.ID and cpoasig.ano_fiscal = cdpcpo.ano_fiscal and cpoasig.id_vigencia = cdpcpo.id_vigencia
    left join pr_asig_presup$schema_sgr asig on asig.id = cpoasig.id_asign

)tab3 on tab3.id_cdp = rpcdp.cdp and tab3.ano_fiscal = extract(year from rpcdp.fecha_cdp) and tab3.id_vigencia = 1 and tab3.sgr = rpcdp.TIPO_RECURSO

left join pr_apropiacion_pgnsgr_v$schema apro on apro.id = tab3.id_apropiacion and apro.sgr = rpcdp.TIPO_RECURSO

left join pr_rubro_pgnsgr_v$schema rub on rub.id_rubro = apro.id_rubro and rub.sgr = rpcdp.TIPO_RECURSO

where tab0.estado=1 and tab1.num_doc='$numdoc'

group by tab0.id_contrato

order by tab0.id_contrato desc
EOD;

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

                $func = $records[0]['func'];
                $inv = $records[0]['inv'];
                $codigo_rubro = $records[0]['codigo_rubro'];

                //Si el contrato tiene clase presup por ambos A y C, no verifica nada mas
                if ($func == 0 || $inv == 0) {

                    $id_plan_comisiones = $request['id_plan_comisiones'];
                    $vigencia = $request['vigencia'];

                    $sql = <<<EOD
select 
tab0.id_plan_comisiones,
tab0.vigencia,

LISTAGG(tab0.id_proyectos_viatico, ', ') WITHIN GROUP(ORDER BY tab0.id_proyectos_viatico) as id_proyectos_viatico,
LISTAGG(proy.id_cdp_global, ', ') WITHIN GROUP(ORDER BY proy.id_cdp_global) as id_cdp_global,
LISTAGG(rub.id_clase_presup, ', ') WITHIN GROUP(ORDER BY apro.id_rubro) as id_clase_presup,

--LISTAGG(rub.codigo_rubro, ', ') WITHIN GROUP(ORDER BY apro.id_rubro) as codigo_rubroproy,
to_char(wm_concat(distinct rub.codigo_rubro)) as codigo_rubroproy,
to_char(wm_concat(distinct proy.id_cdp_global)) as id_cdp_global_unico,

nvl(sum(case when rub.id_clase_presup = 8 then 1 else 0 end),0) as funcproy,
nvl(sum(case when rub.id_clase_presup = 9 then 1 else 0 end),0) as invproy

from com_plan_comisiones tab0
left join proyectos_viatico proy on proy.id_proyectos_viatico = tab0.id_proyectos_viatico

left join pr_cdp_cpo cdpcpo on cdpcpo.id_cdp = proy.id_cdp_global and cdpcpo.ano_fiscal in ( tab0.vigencia, tab0.vigencia-1 ) and cdpcpo.id_vigencia = 1
left join pr_cpo_asign cpoasig on cpoasig.ID_PR_CDP_CPO = cdpcpo.ID and cpoasig.ano_fiscal = cdpcpo.ano_fiscal and cpoasig.id_vigencia = cdpcpo.id_vigencia
left join pr_asig_presup asig on asig.id = cpoasig.id_asign

left join pr_apropiacion apro on apro.id = asig.id_apropiacion

left join pr_codif_presup rub on rub.id_rubro = apro.id_rubro

where tab0.id_plan_comisiones = $id_plan_comisiones and tab0.vigencia = $vigencia
and tab0.id_proyectos_viatico is not null

group by tab0.id_plan_comisiones,
tab0.vigencia

order by tab0.id_plan_comisiones desc
EOD;

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

                        $funcproy = $records[0]['funcproy'];
                        $invproy = $records[0]['invproy'];
                        $codigo_rubroproy = $records[0]['codigo_rubroproy'];
                        $id_cdp_global_unico = $records[0]['id_cdp_global_unico'];

                        if ($funcproy > 0 && $func == 0) {
                            $errors['mensaje'] = "Mensaje de validación: El rubro del CDP $id_cdp_global_unico es el ($codigo_rubroproy) y el rubro del contrato del contratista es ($codigo_rubro), No puede generar la programación.";
                            $errors['servicio'] = "com_plan_comisionados_placom";
                        }

                        if ($invproy > 0 && $inv == 0) {
                            $errors['mensaje'] = "Mensaje de validación: El rubro del CDP $id_cdp_global_unico es el ($codigo_rubroproy) y el rubro del contrato del contratista es ($codigo_rubro), No puede generar la programación.";
                            $errors['servicio'] = "com_plan_comisionados_placom";
                        }
                    }
                }
            }
        }

        //$errors['mensaje'] = "ERROR DE PRUEBA";
        //$errors['servicio'] = "com_plan_comisionados_placom";
        $id_plan_comisiones = $request['id_plan_comisiones'];
        $vigencia = $request['vigencia'];
        //Obtenemos el Tipo de comision
        $sql = <<<EOD
select tipcomi
from com_plan_comisiones tab0
where id_plan_comisiones = $id_plan_comisiones and vigencia = $vigencia
EOD;

        $records = CN_TABLE::executeSQL($sql);
        $tipcomi = $records[0]['tipcomi'];
        //Si tipo comision extraordinaria validar que fecha de salida sea mayo igual a fecha actual ticket 19892
        if ($tipcomi == '02') {
            $fecha_actual = strtotime(date("d-m-Y H:i:00", time()));
            $fecha_salida = strtotime($request['fecha_salida'] . "23:59:59");
            if ($fecha_salida < $fecha_actual) {
                $errors['mensaje'] = "Para comisiones extraordinarias la fecha de salida del funcionario debe ser igual o mayor a la fecha actual.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

        /**
         * Se deja tambien para extraordinaria, pero la nueva resol debe ser de 1 dia o mas - 20210929::LAVILA        
         */
        if ($tipcomi != '07' and $tipcomi != '02') {//Si es emergencia o extraordinaria omitimos validacion de fecha del funcionario
            //if ($tipcomi != '07') {//Añadimos comisiones extraordinarias de l avalidacion de fechas del funcionario ticket 19892
            /**
             * Validacion para que el comisionado, no tenga en el mismo rango de fechas otra planeacion activa - 20190902
             */
            $schema_pgn = "";
            $schema_sgr = "";
            if ($entidadCliente == "2") {
                $schema_pgn = "";
                $schema_sgr = "@SGR.ANM.LOCAL";
            }
            if ($entidadCliente == "3") {
                $schema_pgn = "@WEBSAFI.ANM.LOCAL";
                $schema_sgr = "";
            }

            $numdoc = $request['num_doc'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            //se agrega left en pr_resoluciones para la validacion, solo se valida anulacion de resol, no activa de planeacion - 20210716::LAVILA
            $sql = <<<EOD
SELECT
0 as sgr 
FROM com_plan_comisionados_placom$schema_pgn tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_pgn tab0
    left join pr_resoluciones$schema_pgn tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
    or
    to_date('$fecha_regreso','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION                    

union

SELECT
1 as sgr 
FROM com_plan_comisionados_placom$schema_sgr tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_sgr tab0
    left join pr_resoluciones$schema_sgr tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
    or
    to_date('$fecha_regreso','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION  
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0) {
                $errors['mensaje'] = "</br>El comisionado tiene comisiones programadas en el mismo rango de fechas($fecha_salida a $fecha_regreso), favor verificar.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        } else {

            //Para validar que si coincide la salida con un regreso, sea de 1 dia por lo menos - 20210929::LAVILA   
            $schema_pgn = "";
            $schema_sgr = "";
            if ($entidadCliente == "2") {
                $schema_pgn = "";
                $schema_sgr = "@SGR.ANM.LOCAL";
            }
            if ($entidadCliente == "3") {
                $schema_pgn = "@WEBSAFI.ANM.LOCAL";
                $schema_sgr = "";
            }

            $numdoc = $request['num_doc'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            $dias = $request['dias'];
            $sql = <<<EOD
SELECT
0 as sgr 
FROM com_plan_comisionados_placom$schema_pgn tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_pgn tab0
    left join pr_resoluciones$schema_pgn tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') = tab0.fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION                    

union

SELECT
1 as sgr 
FROM com_plan_comisionados_placom$schema_sgr tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_sgr tab0
    left join pr_resoluciones$schema_sgr tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') = tab0.fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION  
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0 && $dias < 1) {
                // 20220119 Se comenta validacion segun ticket 27300
                //$errors['mensaje'] = "</br>El registro debe ser por lo menos de 1 dias, no se permite menos, favor verificar.";
                //$errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

        $sql = <<<EOD
SELECT  ID,
PARAMETRO,
nvl(VALOR,0) as VALOR
FROM COM_PARAM_CONTROL_COMIS
WHERE 1=1 AND PARAMETRO = 'CANT_LEGAL_PEND_COMIS_ORDINARIAS'
EOD;
        $CantDiasOrdinarias = CN_TABLE::executeSQL($sql);

        $sql = <<<EOD
SELECT  ID,
PARAMETRO,
nvl(VALOR,0) as VALOR
FROM COM_PARAM_CONTROL_COMIS
WHERE 1=1 AND PARAMETRO = 'CANT_LEGAL_PEND_COMIS_EXTRAORDINARIAS'
EOD;
        $CantDiasExtraordinarias = CN_TABLE::executeSQL($sql);
        $sql = <<<EOD
SELECT  ID,
PARAMETRO,
nvl(VALOR,0) as VALOR
FROM COM_PARAM_CONTROL_COMIS
WHERE 1=1 AND PARAMETRO = 'DIAS_LEGALIZAR'
EOD;
        $DiasLegalizar = CN_TABLE::executeSQL($sql);

        $dias_para_legalizar = $DiasLegalizar[0]['valor'];
        $cant_dias_extra = $CantDiasExtraordinarias[0]['valor'];
        $cant_dias_ordi = $CantDiasOrdinarias[0]['valor'];

        //ticket 15704 Valida que el funcionario no tenga una legalizacion vencida
        /**
         * Validacion para que el comisionado, no tenga en el mismo rango de fechas otra planeacion activa - 20190902
         * SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7
         */
        $schema_pgn = "";
        $schema_sgr = "";
        if ($entidadCliente == "2") {
            $schema_pgn = "";
            $schema_sgr = "@SGR.ANM.LOCAL";
        }
        if ($entidadCliente == "3") {
            $schema_pgn = "@WEBSAFI.ANM.LOCAL";
            $schema_sgr = "";
        }
        $numdoc = $request['num_doc'];

        $sql = <<<EOD
SELECT DISTINCT 
tab.dias as dias_com,
tab.fecha_salida,
tab.fecha_regreso,
dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) as fecha_tope_legalizacion,
tab.nitocc,
prrpc.ID as ID_PR_RP_COMIS, 
prrpc.id_comision as COMISION,
prrpc.FECHA_PROCESO as FECHA_REGISTRO,
tipco.DESCOMI as DESCOMI,
prresol.FECHA_FUNCIONARIO as FEC_FUN,
prresol.FECHA_COMISIONADO as FEC_COM, 
prresol.RESOLUCION as RESOLU,
area.descripcion as area, 
avan.dias_comi as DIASC, 
avan.fecha_ini_comi as FEC_SAL_C,
case when com.interrupcion=1 then 'I' else '' end as interr,
0 as SGR

FROM PR_RP_COMIS$schema_pgn prrpc

left join (
  SELECT
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.id_rp_comis
    ORDER BY aut.fecha_proceso desc, id_cierre_comision desc
   ) AS rn
  from PR_CIERRE_COMISION$schema_pgn aut
)tab1
on prrpc.id=tab1.id_rp_comis and prrpc.id_vigencia=tab1.id_vigencia and prrpc.vigencia= tab1.vigencia
and tab1.rn = 1

left join (
    select 
    tab.id_comision,
    tab.nitocc,
    min(tab.fecha_salida) as fecha_salida,
    sum(tab.dias) as dias,
    max(tab.fecha_regreso) as fecha_regreso,
    tab.vigencia
    from (
    
        select 
        complan.id_comision,
        complan.nitocc,
        complan.fecha_salida,
        complan.dias,
        complan.fecha_regreso,
        complan.vigencia
        from comisionados_planta$schema_pgn complan
        where
        complan.estado = 1
    
        union
        
        select 
        comcont.id_comision,
        comcont.nitocc,
        comcont.fecha_salida,
        comcont.dias,
        comcont.fecha_regreso,
        comcont.vigencia
        from comisionados_contrato$schema_pgn comcont
        where
        comcont.estado = 1
        
    )tab
    
    group by
    tab.id_comision,
    tab.nitocc,
    tab.vigencia
)tab
on tab.nitocc=prrpc.id_tercero and tab.id_comision=prrpc.id_comision and tab.vigencia=prrpc.vigencia



JOIN COMISIONES$schema_pgn com ON prrpc.vigencia = com.vigencia AND prrpc.id_comision = com.id
JOIN TIPOS_COMISION$schema_pgn tipco ON com.TIPCOMI = tipco.TIPCOMI
LEFT JOIN PR_RESOL_COMIS$schema_pgn prresol ON prrpc.NO_ACTO_ADMIN = prresol.id 
JOIN PR_RP_COMPROMISO$schema_pgn prrpcomp ON prrpc.ID = prrpcomp.ID_RP AND prrpc.ID_VIGENCIA = prrpcomp.ID_VIGENCIA AND prrpc.VIGENCIA = prrpcomp.VIGENCIA
JOIN PROYECTOS$schema_pgn pro ON pro.codigo = com.codpro and pro.ano_fiscal = com.vigencia
JOIN AREAS$schema_pgn area ON pro.id_area_lider = area.id_area
LEFT JOIN PR_AVANCES_COMISIONES$schema_pgn avan ON prrpc.id = avan.id_rp_comis and prrpc.id_vigencia = avan.id_vigencia and prrpc.vigencia = avan.vigencia

LEFT JOIN(
    select legal.id_rp_comis as id, legal.id_vigencia, legal.vigencia, ter.num_doc, sum(legal.v_bruto) as valor
    from PR_LEGALIZACION_COMIS$schema_pgn legal
    join INTERCEROS$schema_pgn ter ON legal.id_tercero = ter.id_mae_ter
    group by legal.id_rp_comis, legal.id_vigencia, legal.vigencia, ter.num_doc 
)legal ON legal.id =  prrpc.id
and legal.num_doc = ''||prrpc.id_tercero
and legal.id_vigencia = prrpc.id_vigencia
and prrpc.vigencia = legal.vigencia


WHERE 
prrpc.ESTADO = 1 
and prrpc.vigencia>2019                
and dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) <= sysdate
and avan.ID_AVANCES_COMISIONES is null
and tab.nitocc = '$numdoc'
                
union
                
SELECT DISTINCT 
tab.dias as dias_com,
tab.fecha_salida,
tab.fecha_regreso,
dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) as fecha_tope_legalizacion,
tab.nitocc,
prrpc.ID as ID_PR_RP_COMIS, 
prrpc.id_comision as COMISION,
prrpc.FECHA_PROCESO as FECHA_REGISTRO,
tipco.DESCOMI as DESCOMI,
prresol.FECHA_FUNCIONARIO as FEC_FUN,
prresol.FECHA_COMISIONADO as FEC_COM, 
prresol.RESOLUCION as RESOLU,
area.descripcion as area, 
avan.dias_comi as DIASC, 
avan.fecha_ini_comi as FEC_SAL_C,
case when com.interrupcion=1 then 'I' else '' end as interr,
1 as SGR

FROM PR_RP_COMIS$schema_sgr prrpc

left join (
  SELECT
   aut.*,
   ROW_NUMBER() OVER (
    partition by aut.id_rp_comis
    ORDER BY aut.fecha_proceso desc, id_cierre_comision desc
   ) AS rn
  from PR_CIERRE_COMISION$schema_sgr aut
)tab1
on prrpc.id=tab1.id_rp_comis and prrpc.id_vigencia=tab1.id_vigencia and prrpc.vigencia= tab1.vigencia
and tab1.rn = 1

left join (
    select 
    tab.id_comision,
    tab.nitocc,
    min(tab.fecha_salida) as fecha_salida,
    sum(tab.dias) as dias,
    max(tab.fecha_regreso) as fecha_regreso,
    tab.vigencia
    from (
    
        select 
        complan.id_comision,
        complan.nitocc,
        complan.fecha_salida,
        complan.dias,
        complan.fecha_regreso,
        complan.vigencia
        from comisionados_planta$schema_sgr complan
        where
        complan.estado = 1
    
        union
        
        select 
        comcont.id_comision,
        comcont.nitocc,
        comcont.fecha_salida,
        comcont.dias,
        comcont.fecha_regreso,
        comcont.vigencia
        from comisionados_contrato$schema_sgr comcont
        where
        comcont.estado = 1
        
    )tab
    
    group by
    tab.id_comision,
    tab.nitocc,
    tab.vigencia
)tab
on tab.nitocc=prrpc.id_tercero and tab.id_comision=prrpc.id_comision and tab.vigencia=prrpc.vigencia



JOIN COMISIONES$schema_sgr com ON prrpc.vigencia = com.vigencia AND prrpc.id_comision = com.id
JOIN TIPOS_COMISION$schema_sgr tipco ON com.TIPCOMI = tipco.TIPCOMI
LEFT JOIN PR_RESOL_COMIS$schema_sgr prresol ON prrpc.NO_ACTO_ADMIN = prresol.id 
JOIN PR_RP_COMPROMISO$schema_sgr prrpcomp ON prrpc.ID = prrpcomp.ID_RP AND prrpc.ID_VIGENCIA = prrpcomp.ID_VIGENCIA AND prrpc.VIGENCIA = prrpcomp.VIGENCIA
JOIN PROYECTOS$schema_sgr pro ON pro.codigo = com.codpro and pro.ano_fiscal = com.vigencia
JOIN AREAS$schema_sgr area ON pro.id_area_lider = area.id_area
LEFT JOIN PR_AVANCES_COMISIONES$schema_sgr avan ON prrpc.id = avan.id_rp_comis and prrpc.id_vigencia = avan.id_vigencia and prrpc.vigencia = avan.vigencia

LEFT JOIN(
    select legal.id_rp_comis as id, legal.id_vigencia, legal.vigencia, ter.num_doc, sum(legal.v_bruto) as valor
    from PR_LEGALIZACION_COMIS$schema_sgr legal
    join INTERCEROS$schema_sgr ter ON legal.id_tercero = ter.id_mae_ter
    group by legal.id_rp_comis, legal.id_vigencia, legal.vigencia, ter.num_doc 
)legal ON legal.id =  prrpc.id
and legal.num_doc = ''||prrpc.id_tercero
and legal.id_vigencia = prrpc.id_vigencia
and prrpc.vigencia = legal.vigencia


WHERE 
prrpc.ESTADO = 1 
and prrpc.vigencia>2019                
and dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) <= sysdate
and avan.ID_AVANCES_COMISIONES is null
and tab.nitocc = '$numdoc'                
                
EOD;
        $records = CN_TABLE::executeSQL($sql);
        /* if (count($records) > 0 && $tipcomi != "07") {
          $errors['mensaje'] = "</br>El comisionado tiene comisiones pendientes de legalizar , favor verificar.";
          $errors['servicio'] = "com_plan_comisionados_placom";
          } */
        //Nueva validación: Validar comisiones en estado legalizando, bloqueado por soportes 20221111

        $sql = <<<EOD
SELECT DISTINCT 
              tab.dias as dias_com,
              tab.fecha_salida,
              tab.fecha_regreso,
              dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) as fecha_tope_legalizacion,
              tab.nitocc,
              prrpc.ID as ID_PR_RP_COMIS, 
              prrpc.id_comision as COMISION,
              prrpc.FECHA_PROCESO as FECHA_REGISTRO,
              tipco.DESCOMI as DESCOMI,
              prresol.FECHA_FUNCIONARIO as FEC_FUN,
              prresol.FECHA_COMISIONADO as FEC_COM, 
              prresol.RESOLUCION as RESOLU,
              area.descripcion as area, 
              avan.dias_comi as DIASC, 
              avan.fecha_ini_comi as FEC_SAL_C,
              case when com.interrupcion=1 then 'I' else '' end as interr,
               0 as SGR

              FROM PR_RP_COMIS$schema_pgn prrpc

              left join (
                SELECT
                aut.*,
                ROW_NUMBER() OVER (
                  partition by aut.id_rp_comis
                  ORDER BY aut.fecha_proceso desc, id_cierre_comision desc
                ) AS rn
                from PR_CIERRE_COMISION$schema_pgn aut
              )tab1
              on prrpc.id=tab1.id_rp_comis and prrpc.id_vigencia=tab1.id_vigencia and prrpc.vigencia= tab1.vigencia
              and tab1.rn = 1

              left join (
                  select 
                  tab.id_comision,
                  tab.nitocc,
                  min(tab.fecha_salida) as fecha_salida,
                  sum(tab.dias) as dias,
                  max(tab.fecha_regreso) as fecha_regreso,
                  tab.vigencia
                  from (
                  
                      select 
                      complan.id_comision,
                      complan.nitocc,
                      complan.fecha_salida,
                      complan.dias,
                      complan.fecha_regreso,
                      complan.vigencia
                      from comisionados_planta$schema_pgn complan
                      where
                      complan.estado = 1
                  
                      union
                      
                      select 
                      comcont.id_comision,
                      comcont.nitocc,
                      comcont.fecha_salida,
                      comcont.dias,
                      comcont.fecha_regreso,
                      comcont.vigencia
                      from comisionados_contrato$schema_pgn comcont
                      where
                      comcont.estado = 1
                      
                  )tab
                  
                  group by
                  tab.id_comision,
                  tab.nitocc,
                  tab.vigencia
              )tab
              on tab.nitocc=prrpc.id_tercero and tab.id_comision=prrpc.id_comision and tab.vigencia=prrpc.vigencia



              JOIN COMISIONES$schema_pgn com ON prrpc.vigencia = com.vigencia AND prrpc.id_comision = com.id
              JOIN TIPOS_COMISION$schema_pgn tipco ON com.TIPCOMI = tipco.TIPCOMI
              LEFT JOIN PR_RESOL_COMIS$schema_pgn prresol ON prrpc.NO_ACTO_ADMIN = prresol.id 
              JOIN PR_RP_COMPROMISO$schema_pgn prrpcomp ON prrpc.ID = prrpcomp.ID_RP AND prrpc.ID_VIGENCIA = prrpcomp.ID_VIGENCIA AND prrpc.VIGENCIA = prrpcomp.VIGENCIA
              JOIN PROYECTOS$schema_pgn pro ON pro.codigo = com.codpro and pro.ano_fiscal = com.vigencia
              JOIN AREAS$schema_pgn area ON pro.id_area_lider = area.id_area
              LEFT JOIN PR_AVANCES_COMISIONES$schema_pgn avan ON prrpc.id = avan.id_rp_comis and prrpc.id_vigencia = avan.id_vigencia and prrpc.vigencia = avan.vigencia

              LEFT JOIN(
                  select legal.id_rp_comis as id, legal.id_vigencia, legal.vigencia, ter.num_doc, sum(legal.v_bruto) as valor
                  from PR_LEGALIZACION_COMIS$schema_pgn legal
                  join INTERCEROS$schema_pgn ter ON legal.id_tercero = ter.id_mae_ter
                  group by legal.id_rp_comis, legal.id_vigencia, legal.vigencia, ter.num_doc 
              )legal ON legal.id =  prrpc.id
              and legal.num_doc = ''||prrpc.id_tercero
              and legal.id_vigencia = prrpc.id_vigencia
              and prrpc.vigencia = legal.vigencia
              WHERE 
              prrpc.ESTADO = 1 
              and prrpc.vigencia>2019                
              and dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) <= sysdate
              and avan.ID_AVANCES_COMISIONES is not null
              and tab1.id_tipo_nov_comis in (30,34)
              and tab.nitocc = '$numdoc'

              UNION

              SELECT DISTINCT 
                tab.dias as dias_com,
                tab.fecha_salida,
                tab.fecha_regreso,
                dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) as fecha_tope_legalizacion,
                tab.nitocc,
                prrpc.ID as ID_PR_RP_COMIS, 
                prrpc.id_comision as COMISION,
                prrpc.FECHA_PROCESO as FECHA_REGISTRO,
                tipco.DESCOMI as DESCOMI,
                prresol.FECHA_FUNCIONARIO as FEC_FUN,
                prresol.FECHA_COMISIONADO as FEC_COM, 
                prresol.RESOLUCION as RESOLU,
                area.descripcion as area, 
                avan.dias_comi as DIASC, 
                avan.fecha_ini_comi as FEC_SAL_C,
                case when com.interrupcion=1 then 'I' else '' end as interr,
                1 as SGR

                FROM PR_RP_COMIS$schema_sgr prrpc

                left join (
                  SELECT
                  aut.*,
                  ROW_NUMBER() OVER (
                    partition by aut.id_rp_comis
                    ORDER BY aut.fecha_proceso desc, id_cierre_comision desc
                  ) AS rn
                  from PR_CIERRE_COMISION$schema_sgr aut
                )tab1
                on prrpc.id=tab1.id_rp_comis and prrpc.id_vigencia=tab1.id_vigencia and prrpc.vigencia= tab1.vigencia
                and tab1.rn = 1

                left join (
                    select 
                    tab.id_comision,
                    tab.nitocc,
                    min(tab.fecha_salida) as fecha_salida,
                    sum(tab.dias) as dias,
                    max(tab.fecha_regreso) as fecha_regreso,
                    tab.vigencia
                    from (
                    
                        select 
                        complan.id_comision,
                        complan.nitocc,
                        complan.fecha_salida,
                        complan.dias,
                        complan.fecha_regreso,
                        complan.vigencia
                        from comisionados_planta$schema_sgr complan
                        where
                        complan.estado = 1
                    
                        union
                        
                        select 
                        comcont.id_comision,
                        comcont.nitocc,
                        comcont.fecha_salida,
                        comcont.dias,
                        comcont.fecha_regreso,
                        comcont.vigencia
                        from comisionados_contrato$schema_sgr comcont
                        where
                        comcont.estado = 1
                        
                    )tab
                    
                    group by
                    tab.id_comision,
                    tab.nitocc,
                    tab.vigencia
                )tab
                on tab.nitocc=prrpc.id_tercero and tab.id_comision=prrpc.id_comision and tab.vigencia=prrpc.vigencia



                JOIN COMISIONES$schema_sgr com ON prrpc.vigencia = com.vigencia AND prrpc.id_comision = com.id
                JOIN TIPOS_COMISION$schema_sgr tipco ON com.TIPCOMI = tipco.TIPCOMI
                LEFT JOIN PR_RESOL_COMIS$schema_sgr prresol ON prrpc.NO_ACTO_ADMIN = prresol.id 
                JOIN PR_RP_COMPROMISO$schema_sgr prrpcomp ON prrpc.ID = prrpcomp.ID_RP AND prrpc.ID_VIGENCIA = prrpcomp.ID_VIGENCIA AND prrpc.VIGENCIA = prrpcomp.VIGENCIA
                JOIN PROYECTOS$schema_sgr pro ON pro.codigo = com.codpro and pro.ano_fiscal = com.vigencia
                JOIN AREAS$schema_sgr area ON pro.id_area_lider = area.id_area
                LEFT JOIN PR_AVANCES_COMISIONES$schema_sgr avan ON prrpc.id = avan.id_rp_comis and prrpc.id_vigencia = avan.id_vigencia and prrpc.vigencia = avan.vigencia

                LEFT JOIN(
                    select legal.id_rp_comis as id, legal.id_vigencia, legal.vigencia, ter.num_doc, sum(legal.v_bruto) as valor
                    from PR_LEGALIZACION_COMIS$schema_sgr legal
                    join INTERCEROS$schema_sgr ter ON legal.id_tercero = ter.id_mae_ter
                    group by legal.id_rp_comis, legal.id_vigencia, legal.vigencia, ter.num_doc 
                )legal ON legal.id =  prrpc.id
                and legal.num_doc = ''||prrpc.id_tercero
                and legal.id_vigencia = prrpc.id_vigencia
                and prrpc.vigencia = legal.vigencia


                WHERE 
                prrpc.ESTADO = 1 
                and prrpc.vigencia>2019                
                and dias_habiles ( trunc(tab.fecha_regreso) , $dias_para_legalizar) <= sysdate
                and avan.ID_AVANCES_COMISIONES is not null
                and tab1.id_tipo_nov_comis in (30,34)
                and tab.nitocc = '$numdoc'                
EOD;
        $records_dos = CN_TABLE::executeSQL($sql);

        $total_rec = count($records) + count($records_dos);

        if ($total_rec >= $cant_dias_ordi && $tipcomi == "01") {
            $comisionRP = array();
            foreach ($records as $rec) {
                $planComision = $rec['comision'];
                $entidad = ($rec['sgr'] == "1") ? "SGR" : "PGN";
                $rp = $rec['id_pr_rp_comis'];
                $texto = "Plan de comision $planComision de $entidad RP $rp";
                array_push($comisionRP, $texto);
            }
            foreach ($records_dos as $rec) {
                $planComision = $rec['comision'];
                $entidad = ($rec['sgr'] == "1") ? "SGR" : "PGN";
                $rp = $rec['id_pr_rp_comis'];
                $texto = "Plan de comision $planComision de $entidad RP $rp";
                array_push($comisionRP, $texto);
            }
            $comisionesPendientes = implode(",", $comisionRP);
            $mensaje = "El comisionado tiene mas de $cant_dias_ordi comision(es) programada(s) sin legalizar: $comisionesPendientes, favor verificar.";
            // $errors['mensaje'] = "</br>El comisionado tiene comisiones pendientes de legalizar , favor verificar."; 
            $errors['mensaje'] = $mensaje;
            $errors['servicio'] = "com_plan_comisionados_placom";
        }

        if ($total_rec >= $cant_dias_extra && $tipcomi == "02") {
            $comisionRP = array();
            foreach ($records as $rec) {
                $planComision = $rec['comision'];
                $entidad = ($rec['sgr'] == "1") ? "SGR" : "PGN";
                $rp = $rec['id_pr_rp_comis'];
                $texto = "Plan de comision $planComision de $entidad RP $rp";
                array_push($comisionRP, $texto);
            }
            foreach ($records_dos as $rec) {
                $planComision = $rec['comision'];
                $entidad = ($rec['sgr'] == "1") ? "SGR" : "PGN";
                $rp = $rec['id_pr_rp_comis'];
                $texto = "Plan de comision $planComision de $entidad RP $rp";
                array_push($comisionRP, $texto);
            }
            $comisionesPendientes = implode(",", $comisionRP);
            $mensaje = "El comisionado tiene mas de $cant_dias_extra comision(es) programada(s) sin legalizar: $comisionesPendientes, favor verificar.";
            // $errors['mensaje'] = "</br>El comisionado tiene comisiones pendientes de legalizar , favor verificar.";
            $errors['mensaje'] = $mensaje;
            $errors['servicio'] = "com_plan_comisionados_placom";
        }
        /*
         *  Generar errores en $errors
         */
        //Aplica solo cuando el tercero es contratista
        if ($request['tipter'] == "01") {
            //Verifica que este en RVC activo - 20201001::LAVILA
            $sql = <<<EOD
SELECT
    *
FROM rvc_contratista$schema_pgn
WHERE 
num_doc = '$numdoc'
and estado = 1 
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) < 1) {
                $errors['mensaje'] = "El comisionado no se encuentra activo en RVC, favor verificar.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

        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;

        /*
         * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

        $int = 0;
        foreach ($array as $routeName => $routeData) {
            //echo $routeName . "\n";
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadCliente = $value;
                    }
                }
            }
            if ('entidad_nombre' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadNombre = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            if ('jasper_url' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $url_jasper = $value;
                    }
                }
            }
            //$url_presup = "http://10.0.100.66/presupuesto/web/index.php/pr_resolucion_comis/";
            $int++;
        }


        /*
         * Variables request
         */
        if ($request['sueldo'] <= "0") {
            $errors['mensaje'] = "El sueldo del contratista debe ser mayor a cero(0).";
            $errors['servicio'] = "com_plan_comisionados_placom";
        }
        /**
         * Validacion para que el comisionado, no tenga en el mismo rango de fechas otra planeacion activa - 20190902
         * SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7 -
         */
        $schema_pgn = "";
        $schema_sgr = "";
        if ($entidadCliente == "2") {
            $schema_pgn = "";
            $schema_sgr = "@SGR.ANM.LOCAL";
        }
        if ($entidadCliente == "3") {
            $schema_pgn = "@WEBSAFI.ANM.LOCAL";
            $schema_sgr = "";
        }

        $id_plan_comisiones = $request['id_plan_comisiones'];
        $vigencia = $request['vigencia'];
        //Obtenemos el Tipo de comision
        $sql = <<<EOD
select tipcomi
from com_plan_comisiones tab0
where id_plan_comisiones = $id_plan_comisiones and vigencia = $vigencia
EOD;

        $records = CN_TABLE::executeSQL($sql);
        $tipcomi = $records[0]['tipcomi'];
        //Si tipo comision extraordinaria validar que fecha de salida sea mayo igual a fecha actual ticket 19892
        if ($tipcomi == '02') {
            $fecha_actual = strtotime(date("d-m-Y H:i:00", time()));
            $fecha_salida = strtotime($request['fecha_salida'] . "23:59:59");
            if ($fecha_salida < $fecha_actual) {
                $errors['mensaje'] = "Para comisiones extraordinarias la fecha de salida del funcionario debe ser igual o mayo a la fecha actual.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

        /**
         * Se deja tambien para extraordinaria, pero la nueva resol debe ser de 1 dia o mas - 20210929::LAVILA        
         */
        if ($tipcomi != '07' and $tipcomi != '02') {//Si es emergencia o extraordinaria omitimos validacion de fecha del funcionario
            //if ($tipcomi != '07') {//Añadimos comisiones extraordinarias de l avalidacion de fechas del funcionario ticket 19892
            $numdoc = $request['num_doc'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            $sql = <<<EOD
SELECT
0 as sgr 
FROM com_plan_comisionados_placom$schema_pgn tab0
                left join (select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
from com_comisionados_resol_v$schema_pgn tab0
left join pr_resoluciones$schema_pgn tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and tab0.id_plan_comisiones != $id_plan_comisiones and tab0.vigencia = $vigencia 
and (
    to_date('$fecha_salida','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
    or
    to_date('$fecha_regreso','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION 

union

SELECT
1 as sgr 
FROM com_plan_comisionados_placom$schema_sgr tab0
left join (select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
from com_comisionados_resol_v$schema_sgr tab0
left join pr_resoluciones$schema_sgr tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and tab0.id_plan_comisiones != $id_plan_comisiones and tab0.vigencia = $vigencia 
and (
    to_date('$fecha_salida','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
    or
    to_date('$fecha_regreso','yyyy-mm-dd') BETWEEN tab0.fecha_salida and fecha_regreso
)  
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION 
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0) {
                $errors['mensaje'] = "</br>El comisionado tiene comisiones programadas en el mismo rango de fechas($fecha_salida a $fecha_regreso), favor verificar.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        } else {

            //Para validar que si coincide la salida con un regreso, sea de 1 dia por lo menos - 20210929::LAVILA   
            $schema_pgn = "";
            $schema_sgr = "";
            if ($entidadCliente == "2") {
                $schema_pgn = "";
                $schema_sgr = "@SGR.ANM.LOCAL";
            }
            if ($entidadCliente == "3") {
                $schema_pgn = "@WEBSAFI.ANM.LOCAL";
                $schema_sgr = "";
            }

            $numdoc = $request['num_doc'];
            $fecha_salida = $request['fecha_salida'];
            $fecha_regreso = $request['fecha_regreso'];
            $dias = $request['dias'];
            $sql = <<<EOD
SELECT
0 as sgr 
FROM com_plan_comisionados_placom$schema_pgn tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_pgn tab0
    left join pr_resoluciones$schema_pgn tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') = tab0.fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION                    

union

SELECT
1 as sgr 
FROM com_plan_comisionados_placom$schema_sgr tab0
                    
left join (
    select tab0.id_plan_comisiones,tab0.vigencia,tab0.nitocc,tab0.estado_resolucion,tab1.id_resoluciones
    from com_comisionados_resol_v$schema_sgr tab0
    left join pr_resoluciones$schema_sgr tab1 on tab0.id_resol_comis = tab1.id_resol_orig and tab1.id_tipo_resol = 2
)tab1 
on tab0.ID_PLAN_COMISIONES=tab1.id_plan_comisiones and tab0.VIGENCIA = tab1.vigencia and tab0.NITOCC = tab1.nitocc
                    
where
tab0.nitocc = '$numdoc' and tab0.estado = 1 
and (
    to_date('$fecha_salida','yyyy-mm-dd') = tab0.fecha_regreso
) 
and tab1.id_resoluciones is null --ANULACION PRESUP RESOL
--and tab1.estado_resolucion = 1--RESOL ACTIVA PLANEACION  
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0 && $dias < 1) {
                // 20220119 Se comenta validacion segun ticket 27300
                // $errors['mensaje'] = "</br>El registro debe ser por lo menos de 1 dias, no se permite menos, favor verificar.";
                // $errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

        /*
         *  Generar errores en $errors
         */
        //Aplica solo cuando el tercero es contratista
        if ($request['tipter'] == "01") {
            //Verifica que este en RVC activo - 20201001::LAVILA
            $sql = <<<EOD
SELECT
    *
FROM rvc_contratista$schema_pgn
WHERE 
num_doc = '$numdoc'
and estado = 1 
EOD;

            $records = CN_TABLE::executeSQL($sql);
            if (count($records) < 1) {
                $errors['mensaje'] = "El comisionado no se encuentra activo en RVC, favor verificar.";
                $errors['servicio'] = "com_plan_comisionados_placom";
            }
        }

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

        $porcentaje_dia = 100;
        if (!isset($request['porcentaje_dia'])) {
            $request['porcentaje_dia'] = $porcentaje_dia;
        }

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            $request['nitocc'] = $request['num_doc'];
        }

        //accion update
        if ($Action == "UPDATE") {
            $request['nitocc'] = $request['num_doc'];
        }

        //accion remove
        if ($Action == "REMOVE") {
            $request['nitocc'] = $request['num_doc'];
        }

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

        $tarifa_a = 0;
        $tarifa_b = 0;

        /*
         * Procesar Request
         */
        //accion add
        //20190723 Se redondean todos los valores calculados al entero menor mas cercano 
        if ($Action == "ADD") {


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

            $id_plan_comisiones = $request['id_plan_comisiones'];
            $vigencia = $request['vigencia'];

            $nitocc = $request['nitocc'];
            $id_transporte = $request['id_transporte'];

            $liquidar_via = $request['liquidar_via'];
            $tipter = $request['tipter'];
            $sueldo = $request['sueldo'];
            $dias = $request['dias'];

            //mirar si es de 02-planta o 01-contrato - 20130625 actualizar
            if ($tipter == '01') {
                $sueldo = round($sueldo * 70 / 100);
            }

            $sql = <<<EOD
select * from com_tipo_comisionado where tipter = '$tipter' 
EOD;

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

            $id_tipo_comisionado = $tipo_tarifa = $records[0]['id_tipo_comisionado'];


            //Obtener id_obj_gasto por tipter si esta parametrizado - 20190801
            //campo id_tipo_comisionado = 0, para que tome tanto comisionado como funcionario viaticos - 20191217
            $sql = <<<EOD
SELECT
    *
FROM objetos_gasto_v
where
viatico = 1
and ano_fiscal = $vigencia
and ( id_tipo_comisionado = $id_tipo_comisionado or id_tipo_comisionado = 0 )
order by
codigo desc     
EOD;
            //ejecuta el sql
            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0) {
                $codobj = $records[0]['codigo'];
                $id_obj_gasto = $records[0]['id'];
            } else {
                $codobj = '06';
                $id_obj_gasto = 100;
            }

            //borra si tenia y crea nuevo
            $sql = <<<EOD
delete from
COM_PLAN_COMISIONADOS_OBJS 
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia  
and nitocc = '$nitocc'   
and codobj = '$codobj'   
EOD;

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

            //Genera objetos gasto segun la planeacion de comision
            if ($liquidar_via == 'true') {

                $viaticoa = 0;
                $viaticob = 0;

                //sentencia SQL
                $sql = <<<EOD
select 
* 
from nviatico
where
tipo_tarifa = $tipo_tarifa
and '$sueldo' between rango1 and rango2 
and estado = 1 
EOD;

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

                if (count($records_tarifa) > 0) {
                    $tarifa_a = $viaticoa = $records_tarifa[0]['viaticoa'];
                    $tarifa_b = $viaticob = $records_tarifa[0]['viaticob'];
                }

                /**
                 * Verificar si la persona tiene trasnporte con tiquete aereo - 20190902
                 */
                $sql = <<<EOD
SELECT
    *
FROM com_plan_tarifas_destino_v
where
nitocc = '$nitocc'
and id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia 
and aplica_tiquete = 1 
order by
tope_max desc  
EOD;

                $records_tarifa_tiq = CN_TABLE::executeSQL($sql);
                $tarifa_tiquete = 0;
                $viatico_tiquete = 0;
                $cant_dia_sal = 0;
                $cant_dia_reg = 0;
                if (count($records_tarifa_tiq) > 0) {
                    $logger->info("Verificar si la persona tiene trasnporte con tiquete aereo");

                    $tarifa_tiquete = $viaticoa;

                    /**
                      1. Cuando el comisionado pernocte el sistema liquidará un día de viáticos
                      2. Cuando el comisionado no pernocte el sistema liquidará 0.5 días de la tarifa del viático.
                      3. Cuando el comisionado registre la hora de salida del primer día de su comisión después de las 11:00 am, y pernocte el sistema le liquidará 0.5 días del viático.
                      4. Cuando el comisionado registre la hora de regreso del último día de su comisión antes de las 4:30 pm, el sistema le liquidará 0.5 días del viático.
                     */
                    $sql = <<<EOD
SELECT

fecha_salida as fecha_salida,
fecha_regreso as fecha_regreso,
(fecha_regreso - fecha_salida) as dif,
case when (fecha_regreso - fecha_salida) >= 1 then 1 else 0 end as si_pernocta,

case 
when hora_salida is null and (fecha_regreso - fecha_salida) >= 1 then 1
when hora_salida is null and (fecha_regreso - fecha_salida) <= 0 then 0.5
when to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' ' || hora_salida,'yyyy-mm-dd hh24:mi') <= to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' 11:00','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 1
when to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' ' || hora_salida,'yyyy-mm-dd hh24:mi')  > to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' 11:00','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5 
when hora_salida is not null and (fecha_regreso - fecha_salida) <= 0 then 0.5
else 0 end as cant_dia_sal,

case 
when hora_regreso is null and (fecha_regreso - fecha_salida) >= 1 then 0.5
when hora_regreso is null and (fecha_regreso - fecha_salida) <= 0 then 0
when to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' ' || hora_regreso,'yyyy-mm-dd hh24:mi') <= to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' 16:30','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5
when to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' ' || hora_regreso,'yyyy-mm-dd hh24:mi')  > to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' 16:30','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5 
when hora_regreso is not null and (fecha_regreso - fecha_salida) <= 0 then 0
else 0 end as cant_dia_reg

FROM com_plan_comisionados_placom
                            
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
EOD;

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

                    if (count($records_tarifa_dia) > 0) {

                        $cant_dia_sal = $records_tarifa_dia[0]['cant_dia_sal'];
                        $cant_dia_reg = $records_tarifa_dia[0]['cant_dia_reg'];
                        //Calculo viticos por dias tiquetes
                        $viatico_tiquete = floor($tarifa_tiquete * ($cant_dia_sal + $cant_dia_reg));
                    }
                }



                /**
                 * Validar si tiene transporte contratato(tope_max > 0)  - 20190801
                 */
                $sql = <<<EOD
SELECT
    *
FROM com_plan_tarifas_destino_v
where
nitocc = '$nitocc'
and id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia 
and tope_max > 0  
order by
tope_max desc 
EOD;

                $records_tarifa_des = CN_TABLE::executeSQL($sql);
                $tag_trans = true;
                if (count($records_tarifa_des) > 0) {

                    $distancia = $records_tarifa_des[0]['distancia'];
                    $tope_max = $records_tarifa_des[0]['tope_max'];

                    //tope max segun transporte
                    if ($distancia <= $tope_max) {
                        $viaticoa = $records_tarifa_des[0]['valor_auxilio'];
                        $viaticob = $records_tarifa_des[0]['valor_auxilio'];
                        $tag_trans = false;
                    }
                }

                //si algo segun tarifa
                if (count($records_tarifa_des) > 0) {
                    if ($records_tarifa_des[0]['tarifa_transporte'] == 2) {
                        //RANGO 2: Comisionado SI usa durante la comisión TRANSPORTE CONTRATADO TERRESTRE
                        $tarifa = $viaticob;
                    } else {
                        $tarifa = $viaticoa;
                    }
                } else {
                    //RANGO 1: Comisionado NO hace uso del TRANSPORTE CONTRATADO TERRESTRE
                    $tarifa = $viaticoa;
                }

                //calculo viaticos
                $dias = $dias - $cant_dia_sal - $cant_dia_reg;
                $logger->info("Verificar dias:: " . $dias);
                $logger->info("Verificar tarifa:: " . $tarifa);
                $logger->info("Verificar tarifa_tiquete:: " . $tarifa_tiquete);
                $logger->info("Verificar viatico_tiquete:: " . $viatico_tiquete);

                $viaticos = $viatico_tiquete + floor($tarifa * $dias);
                $logger->info("Verificar viaticos:: " . $viaticos);

                /*
                 * Validaciones nuevas #18873 - 20201014
                 */
                $sql = <<<EOD
SELECT
    *
FROM transportes
where id = $id_transporte
and aplica_dias_tarifa = 1 
EOD;

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

                    $dias_tarifa_a = $request['dias_tarifa_a'];
                    $dias_tarifa_b = $request['dias_tarifa_b'];

                    if (!$tag_trans) {
                        if ($dias_tarifa_a > 0) {
                            $tarifa_a = $tarifa;
                        }
                        if ($dias_tarifa_b > 0) {
                            $tarifa_b = $tarifa;
                        }
                    } else {

                        $logger->info("Verificar dias_tarifa_a:: " . $dias_tarifa_a);
                        $logger->info("Verificar dias_tarifa_b:: " . $dias_tarifa_b);

//                    if ($records_aplicatr[0]['tarifa_transporte'] == 2) {
//                        $tarifa_a = $tarifa_b;
//                    }

                        $viaticos = round(($tarifa_a * $dias_tarifa_a) + ($tarifa_b * $dias_tarifa_b));
                        $logger->info("Verificar viaticos segun dias:: " . $viaticos);
                    }
                } else {
                    $tarifa_a = 0;
                    $tarifa_b = 0;
                    $dias_tarifa_a = 0;
                    $dias_tarifa_b = 0;
                }

                /**
                 * 20201019::LAVILA
                 * En este caso, las especificaciones de cálculo de viáticos para comisiones de 0.5 días, quedará de la siguiente manera:

                  Al seleccionar porcentaje:
                  - Valor fijo: $50.000
                  - 25% - de Tarifa día
                  - 50% - de Tarifa día

                  Donde:

                  Tarifa día: Es la que corresponde al sueldo y tipo de transporte
                  Tarifa Normal: Desaparece, teniendo en cuenta que es igual a la opción 50%
                 */
                $porcentaje_dia = 100;
                if (isset($request['porcentaje_dia']) && $request['porcentaje_dia'] != 100) {
                    $porcentaje_dia = $request['porcentaje_dia'];

                    $viaticos = round($tarifa * $porcentaje_dia / 100);
                    if (count($records_aplicatr) > 0 && $tag_trans) {
                        if ($dias_tarifa_a > $dias_tarifa_b) {
                            $viaticos = round($tarifa_a * $porcentaje_dia / 100);
                        } else {
                            $viaticos = round($tarifa_b * $porcentaje_dia / 100);
                        }
                    }
                }

                $logger->info("Verificar viaticos porcentaje($porcentaje_dia):: " . $viaticos);
                if ($porcentaje_dia == 0) {
                    $tarifa = $viaticos = 50000;

                    if ($dias_tarifa_a > 0) {
                        $tarifa_a = $tarifa;
                    }
                    if ($dias_tarifa_b > 0) {
                        $tarifa_b = $tarifa;
                    }
                }
                $logger->info("Verificar viaticos porcentaje valor fijo:: " . $viaticos);


                //calculo taxis 
                $sql = <<<EOD
select nvl(sum(tardes.total),0) as total
from com_plan_tarifas_destino tardes
left join transportes trans
on trans.id = tardes.id_transporte
where
tardes.id_plan_comisiones = $id_plan_comisiones
and tardes.vigencia = $vigencia
and tardes.nitocc = '$nitocc'
--and trans.id_objeto_gasto is null
and trans.aplica_tarifa_taxis = 1  
EOD;

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

                $taxis = $records_taxi[0]['total'];

                $observaciones = '';
                if ($taxis > 0) {
                    $observaciones = '$' . $taxis . ' para taxis. ';

                    /**
                     * Incidente #21160, taxis en objeto separado - 20210326::LAVILA
                     */
                    $sql = <<<EOD
select valor from com_param_control_comis where parametro = 'CODIGO_OBJETO_TRANSPORTE'   
EOD;
                    //ejecuta el sql
                    $records = CN_TABLE::executeSQL($sql);
                    if (count($records) > 0) {
                        $codigo_objeto_transporte = $records[0]['valor'];

                        $sql = <<<EOD
SELECT
    *
FROM objetos_gasto_v
where
codigo in ( $codigo_objeto_transporte )
and ano_fiscal = $vigencia
order by
codigo desc     
EOD;
                        //ejecuta el sql
                        $records = CN_TABLE::executeSQL($sql);
                        if (count($records) > 0) {
                            $codobj_trans = $records[0]['codigo'];
                            $id_obj_gasto_trans = $records[0]['id'];

                            $valor_trans = $taxis;

                            $sql = <<<EOD
SELECT
    *
FROM com_plan_comisionados_objs
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
and id_obj_gasto = $id_obj_gasto_trans   
EOD;
                            //ejecuta el sql
                            $records = CN_TABLE::executeSQL($sql);
                            if (count($records) > 0) {
                                $sql = <<<EOD
update com_plan_comisionados_objs
set valor = valor - taxis + $taxis, taxis = $taxis, observaciones = '$observaciones'
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
and id_obj_gasto = $id_obj_gasto_trans 
EOD;
                            } else {
                                $sql = <<<EOD
Insert into COM_PLAN_COMISIONADOS_OBJS (NITOCC,CODOBJ,ID_PLAN_COMISIONES,VIGENCIA,
    VALOR,ESTADO,OBSERVACIONES,VIATICOS,TAXIS,TARIFA,ID_OBJ_GASTO,
        TARIFA_TIQUETE,CANT_DIA_SAL,CANT_DIA_REG, vl_tarifa_a, vl_tarifa_b) 
values ('$nitocc','$codobj_trans','$id_plan_comisiones','$vigencia',
    '$valor_trans','1','$observaciones','0','$taxis','0','$id_obj_gasto_trans',
        0, 0, 0, 0, 0) 
EOD;
                            }

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

                            $observaciones = '';
                            $taxis = 0;
                        }
                    }
                }

                //valor total
                $valor = floor($viaticos + $taxis);

                $sql = <<<EOD
Insert into COM_PLAN_COMISIONADOS_OBJS (NITOCC,CODOBJ,ID_PLAN_COMISIONES,VIGENCIA,
    VALOR,ESTADO,OBSERVACIONES,VIATICOS,TAXIS,TARIFA,ID_OBJ_GASTO,
        TARIFA_TIQUETE,CANT_DIA_SAL,CANT_DIA_REG, vl_tarifa_a, vl_tarifa_b) 
values ('$nitocc','$codobj','$id_plan_comisiones','$vigencia',
    '$valor','1','$observaciones','$viaticos','$taxis','$tarifa','$id_obj_gasto',
        $tarifa_tiquete, $cant_dia_sal, $cant_dia_reg, $tarifa_a, $tarifa_b) 
EOD;

                //ejecut6ar sql
                $this->conn->execute($sql);
            }

            //Genera destinos segun la planeacion de comision
            //20190409 se generan los destinos con estado inactivo
            $sql = <<<EOD
insert into com_plan_destinos_comisionados
select
$nitocc as nitocc,
id_plan_comisiones as id_plan_comisiones,
vigencia as vigencia,
codmun as codmun,
orden as orden,
0 as estado,
$id_transporte as id_transporte
 
from com_plan_destinos

where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia 
EOD;

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

            $this->conn->commit();
        }

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

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

            $id_plan_comisiones = $request['id_plan_comisiones'];
            $vigencia = $request['vigencia'];

            $nitocc = $request['nitocc'];
            $id_transporte = $request['id_transporte'];

            $liquidar_via = $request['liquidar_via'];
            $tipter = $request['tipter'];
            $sueldo = $request['sueldo'];
            $dias = $request['dias'];

            //mirar si es de 02-planta o 01-contrato - 20130625 actualizar
            if ($tipter == '01') {
                $sueldo = round($sueldo * 70 / 100);
            }

            $sql = <<<EOD
select * from com_tipo_comisionado where tipter = '$tipter' 
EOD;

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

            $id_tipo_comisionado = $tipo_tarifa = $records[0]['id_tipo_comisionado'];


            //Obtener id_obj_gasto por tipter si esta parametrizado - 20190801
            //campo id_tipo_comisionado = 0, para que tome tanto comisionado como funcionario viaticos - 20191217
            $sql = <<<EOD
SELECT
    *
FROM objetos_gasto_v
where
viatico = 1
and ano_fiscal = $vigencia
and ( id_tipo_comisionado = $id_tipo_comisionado or id_tipo_comisionado = 0 )
order by
codigo desc     
EOD;
            //ejecuta el sql
            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0) {
                $codobj = $records[0]['codigo'];
                $id_obj_gasto = $records[0]['id'];
            } else {
                $codobj = '06';
                $id_obj_gasto = 100;
            }

            //borra si tenia y crea nuevo
            $sql = <<<EOD
delete from
COM_PLAN_COMISIONADOS_OBJS 
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia  
and nitocc = '$nitocc'   
and codobj = '$codobj'   
EOD;

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

            //Genera objetos gasto segun la planeacion de comision
            if ($liquidar_via == 'true') {

                $viaticoa = 0;
                $viaticob = 0;

                //sentencia SQL
                $sql = <<<EOD
select 
* 
from nviatico
where
tipo_tarifa = $tipo_tarifa
and '$sueldo' between rango1 and rango2 
and estado = 1 
EOD;

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

                if (count($records_tarifa) > 0) {
                    $tarifa_a = $viaticoa = $records_tarifa[0]['viaticoa'];
                    $tarifa_b = $viaticob = $records_tarifa[0]['viaticob'];
                }

                /**
                 * Verificar si la persona tiene trasnporte con tiquete aereo - 20190902
                 */
                $sql = <<<EOD
SELECT
    *
FROM com_plan_tarifas_destino_v
where
nitocc = '$nitocc'
and id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia 
and aplica_tiquete = 1 
order by
tope_max desc  
EOD;

                $records_tarifa_tiq = CN_TABLE::executeSQL($sql);
                $tarifa_tiquete = 0;
                $viatico_tiquete = 0;
                $cant_dia_sal = 0;
                $cant_dia_reg = 0;
                if (count($records_tarifa_tiq) > 0) {
                    $logger->info("Verificar si la persona tiene trasnporte con tiquete aereo");

                    $tarifa_tiquete = $viaticoa;

                    /**
                      1. Cuando el comisionado pernocte el sistema liquidará un día de viáticos
                      2. Cuando el comisionado no pernocte el sistema liquidará 0.5 días de la tarifa del viático.
                      3. Cuando el comisionado registre la hora de salida del primer día de su comisión después de las 11:00 am, y pernocte el sistema le liquidará 0.5 días del viático.
                      4. Cuando el comisionado registre la hora de regreso del último día de su comisión antes de las 4:30 pm, el sistema le liquidará 0.5 días del viático.
                     */
                    $sql = <<<EOD
SELECT

fecha_salida as fecha_salida,
fecha_regreso as fecha_regreso,
(fecha_regreso - fecha_salida) as dif,
case when (fecha_regreso - fecha_salida) >= 1 then 1 else 0 end as si_pernocta,

case 
when hora_salida is null and (fecha_regreso - fecha_salida) >= 1 then 1
when hora_salida is null and (fecha_regreso - fecha_salida) <= 0 then 0.5
when to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' ' || hora_salida,'yyyy-mm-dd hh24:mi') <= to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' 11:00','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 1
when to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' ' || hora_salida,'yyyy-mm-dd hh24:mi')  > to_date(to_char(fecha_salida,'yyyy-mm-dd') || ' 11:00','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5 
when hora_salida is not null and (fecha_regreso - fecha_salida) <= 0 then 0.5
else 0 end as cant_dia_sal,

case 
when hora_regreso is null and (fecha_regreso - fecha_salida) >= 1 then 0.5
when hora_regreso is null and (fecha_regreso - fecha_salida) <= 0 then 0
when to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' ' || hora_regreso,'yyyy-mm-dd hh24:mi') <= to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' 16:30','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5
when to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' ' || hora_regreso,'yyyy-mm-dd hh24:mi')  > to_date(to_char(fecha_regreso,'yyyy-mm-dd') || ' 16:30','yyyy-mm-dd hh24:mi') and (fecha_regreso - fecha_salida) >= 1 then 0.5 
when hora_regreso is not null and (fecha_regreso - fecha_salida) <= 0 then 0
else 0 end as cant_dia_reg

FROM com_plan_comisionados_placom
                            
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
EOD;

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

                    if (count($records_tarifa_dia) > 0) {

                        $cant_dia_sal = $records_tarifa_dia[0]['cant_dia_sal'];
                        $cant_dia_reg = $records_tarifa_dia[0]['cant_dia_reg'];
                        //Calculo viticos por dias tiquetes
                        $viatico_tiquete = floor($tarifa_tiquete * ($cant_dia_sal + $cant_dia_reg));
                    }
                }



                /**
                 * Validar si tiene transporte contratato(tope_max > 0)  - 20190801
                 */
                $sql = <<<EOD
SELECT
    *
FROM com_plan_tarifas_destino_v
where
nitocc = '$nitocc'
and id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia 
and tope_max > 0  
order by
tope_max desc 
EOD;

                $records_tarifa_des = CN_TABLE::executeSQL($sql);
                $tag_trans = true;
                if (count($records_tarifa_des) > 0) {

                    $distancia = $records_tarifa_des[0]['distancia'];
                    $tope_max = $records_tarifa_des[0]['tope_max'];

                    //tope max segun transporte
                    if ($distancia <= $tope_max) {
                        $viaticoa = $records_tarifa_des[0]['valor_auxilio'];
                        $viaticob = $records_tarifa_des[0]['valor_auxilio'];
                        $tag_trans = false;
                    }
                }

                //si algo segun tarifa
                if (count($records_tarifa_des) > 0) {
                    if ($records_tarifa_des[0]['tarifa_transporte'] == 2) {
                        //RANGO 2: Comisionado SI usa durante la comisión TRANSPORTE CONTRATADO TERRESTRE
                        $tarifa = $viaticob;
                    } else {
                        $tarifa = $viaticoa;
                    }
                } else {
                    //RANGO 1: Comisionado NO hace uso del TRANSPORTE CONTRATADO TERRESTRE
                    $tarifa = $viaticoa;
                }

                //calculo viaticos
                $dias = $dias - $cant_dia_sal - $cant_dia_reg;
                $logger->info("Verificar dias:: " . $dias);
                $logger->info("Verificar tarifa:: " . $tarifa);
                $logger->info("Verificar tarifa_tiquete:: " . $tarifa_tiquete);
                $logger->info("Verificar viatico_tiquete:: " . $viatico_tiquete);

                $viaticos = $viatico_tiquete + floor($tarifa * $dias);
                $logger->info("Verificar viaticos:: " . $viaticos);

                /*
                 * Validaciones nuevas #18873 - 20201014
                 */
                $sql = <<<EOD
SELECT
    *
FROM transportes
where id = $id_transporte
and aplica_dias_tarifa = 1 
EOD;

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

                    $dias_tarifa_a = $request['dias_tarifa_a'];
                    $dias_tarifa_b = $request['dias_tarifa_b'];

                    if (!$tag_trans) {
                        if ($dias_tarifa_a > 0) {
                            $tarifa_a = $tarifa;
                        }
                        if ($dias_tarifa_b > 0) {
                            $tarifa_b = $tarifa;
                        }
                    } else {

                        $logger->info("Verificar dias_tarifa_a:: " . $dias_tarifa_a);
                        $logger->info("Verificar dias_tarifa_b:: " . $dias_tarifa_b);

//                    if ($records_aplicatr[0]['tarifa_transporte'] == 2) {
//                        $tarifa_a = $tarifa_b;
//                    }

                        $viaticos = round(($tarifa_a * $dias_tarifa_a) + ($tarifa_b * $dias_tarifa_b));
                        $logger->info("Verificar viaticos segun dias:: " . $viaticos);
                    }
                } else {
                    $tarifa_a = 0;
                    $tarifa_b = 0;
                    $dias_tarifa_a = 0;
                    $dias_tarifa_b = 0;
                }

                /**
                 * 20201019::LAVILA
                 * En este caso, las especificaciones de cálculo de viáticos para comisiones de 0.5 días, quedará de la siguiente manera:

                  Al seleccionar porcentaje:
                  - Valor fijo: $50.000
                  - 25% - de Tarifa día
                  - 50% - de Tarifa día

                  Donde:

                  Tarifa día: Es la que corresponde al sueldo y tipo de transporte
                  Tarifa Normal: Desaparece, teniendo en cuenta que es igual a la opción 50%
                 */
                $porcentaje_dia = 100;
                if (isset($request['porcentaje_dia']) && $request['porcentaje_dia'] != 100) {
                    $porcentaje_dia = $request['porcentaje_dia'];

                    $viaticos = round($tarifa * $porcentaje_dia / 100);
                    if (count($records_aplicatr) > 0 && $tag_trans) {
                        if ($dias_tarifa_a > $dias_tarifa_b) {
                            $viaticos = round($tarifa_a * $porcentaje_dia / 100);
                        } else {
                            $viaticos = round($tarifa_b * $porcentaje_dia / 100);
                        }
                    }
                }

                $logger->info("Verificar viaticos porcentaje($porcentaje_dia):: " . $viaticos);
                if ($porcentaje_dia == 0) {
                    $tarifa = $viaticos = 50000;

                    if ($dias_tarifa_a > 0) {
                        $tarifa_a = $tarifa;
                    }
                    if ($dias_tarifa_b > 0) {
                        $tarifa_b = $tarifa;
                    }
                }
                $logger->info("Verificar viaticos porcentaje valor fijo:: " . $viaticos);


                //calculo taxis 
                $sql = <<<EOD
select nvl(sum(tardes.total),0) as total
from com_plan_tarifas_destino tardes
left join transportes trans
on trans.id = tardes.id_transporte
where
tardes.id_plan_comisiones = $id_plan_comisiones
and tardes.vigencia = $vigencia
and tardes.nitocc = '$nitocc'
--and trans.id_objeto_gasto is null
and trans.aplica_tarifa_taxis = 1  
EOD;

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

                $taxis = $records_taxi[0]['total'];

                $observaciones = '';
                if ($taxis > 0) {
                    $observaciones = '$' . $taxis . ' para taxis. ';

                    /**
                     * Incidente #21160, taxis en objeto separado - 20210326::LAVILA
                     */
                    $sql = <<<EOD
select valor from com_param_control_comis where parametro = 'CODIGO_OBJETO_TRANSPORTE'   
EOD;
                    //ejecuta el sql
                    $records = CN_TABLE::executeSQL($sql);
                    if (count($records) > 0) {
                        $codigo_objeto_transporte = $records[0]['valor'];

                        $sql = <<<EOD
SELECT
    *
FROM objetos_gasto_v
where
codigo in ( $codigo_objeto_transporte )
and ano_fiscal = $vigencia
order by
codigo desc     
EOD;
                        //ejecuta el sql
                        $records = CN_TABLE::executeSQL($sql);
                        if (count($records) > 0) {
                            $codobj_trans = $records[0]['codigo'];
                            $id_obj_gasto_trans = $records[0]['id'];

                            $valor_trans = $taxis;

                            $sql = <<<EOD
SELECT
    *
FROM com_plan_comisionados_objs
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
and id_obj_gasto = $id_obj_gasto_trans   
EOD;
                            //ejecuta el sql
                            $records = CN_TABLE::executeSQL($sql);
                            if (count($records) > 0) {
                                $sql = <<<EOD
update com_plan_comisionados_objs
set valor = valor - taxis + $taxis, taxis = $taxis, observaciones = '$observaciones'
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
and id_obj_gasto = $id_obj_gasto_trans 
EOD;
                            } else {
                                $sql = <<<EOD
Insert into COM_PLAN_COMISIONADOS_OBJS (NITOCC,CODOBJ,ID_PLAN_COMISIONES,VIGENCIA,
    VALOR,ESTADO,OBSERVACIONES,VIATICOS,TAXIS,TARIFA,ID_OBJ_GASTO,
        TARIFA_TIQUETE,CANT_DIA_SAL,CANT_DIA_REG, vl_tarifa_a, vl_tarifa_b) 
values ('$nitocc','$codobj_trans','$id_plan_comisiones','$vigencia',
    '$valor_trans','1','$observaciones','0','$taxis','0','$id_obj_gasto_trans',
        0, 0, 0, 0, 0) 
EOD;
                            }

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

                            $observaciones = '';
                            $taxis = 0;
                        }
                    }
                }

                //valor total
                $valor = floor($viaticos + $taxis);

                $sql = <<<EOD
Insert into COM_PLAN_COMISIONADOS_OBJS (NITOCC,CODOBJ,ID_PLAN_COMISIONES,VIGENCIA,
    VALOR,ESTADO,OBSERVACIONES,VIATICOS,TAXIS,TARIFA,ID_OBJ_GASTO,
        TARIFA_TIQUETE,CANT_DIA_SAL,CANT_DIA_REG, vl_tarifa_a, vl_tarifa_b) 
values ('$nitocc','$codobj','$id_plan_comisiones','$vigencia',
    '$valor','1','$observaciones','$viaticos','$taxis','$tarifa','$id_obj_gasto',
        $tarifa_tiquete, $cant_dia_sal, $cant_dia_reg, $tarifa_a, $tarifa_b) 
EOD;

                //ejecutar sql
                $this->conn->execute($sql);
            }

            $this->conn->commit();
        }

        //accion remove
        if ($Action == "REMOVE") {
            /**
             * Al elminar un registro elimina para cada comisionado que tenga - 20181026
             */
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            $id_plan_comisiones = $request['id_plan_comisiones'];
            $vigencia = $request['vigencia'];

            $nitocc = $request['nitocc'];

            //delete objetos gasto segun la planeacion de comision
            $sql = <<<EOD
delete
from com_plan_destinos_comisionados
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
EOD;

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

            //delete destinos planeacion de comision
            $sql = <<<EOD
delete
from com_plan_comisionados_objs
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $vigencia
and nitocc = '$nitocc'
EOD;

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

            $this->conn->commit();
        }

        return $request;
    }

}
