<?php

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

    protected $table_names = array(
        'COM_PLAN_PROGRAM_COMIS_V',
        'COM_PLAN_COMISIONES_V',
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'COM_PLAN_COMISIONES_V' =>
        array(
            'id_plan_comisiones' => 'COM_PLAN_PROGRAM_COMIS_V',
            'vigencia' => 'COM_PLAN_PROGRAM_COMIS_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_PLAN_PROGRAM_COMIS_V' =>
        array(
            'id_plan_comisiones' => 'id_plan_comisiones',
            'vigencia' => 'vigencia',
            'id_comisiones' => 'id_comisiones',
            'vigencia_comisiones' => 'vigencia_comisiones',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log',
            'cdp' => 'cdp',
            'vigencia_cdp' => 'vigencia_cdp',
            'cdp,||, - ,||,vigencia_cdp' => 'completo_cdp',
            'estado_general' => 'estado_general',
            'desc_estado_general' => 'desc_estado_general',
            'fecha_estado_general' => 'fecha_estado_general',
        ),
        'COM_PLAN_COMISIONES_V' =>
        array(
            'id_area' => 'id_area',
            'tipcomi' => 'tipcomi',
            'id_proyectos' => 'id_proyectos',
            'fecha' => 'fecha',
            'objetivo' => 'objetivo',
            'actividad' => 'actividad',
            'observaciones' => 'observaciones',
            'fecha_log' => 'fecha_log_planea',
            'usuario_log' => 'usuario_log_planea',
            'justificacion' => 'justificacion',
            'interrupcion' => 'interrupcion',
            'id_original' => 'id_original',
            'vobo' => 'vobo',
            'estado' => 'estado',
            'fecha_estado' => 'fecha_estado',
            'id_usuario_estado' => 'id_usuario_estado',
            'observaciones_estado' => 'observaciones_estado',
            'nivel_rechazo' => 'nivel_rechazo',
            'firmado' => 'firmado',
            'fecha_firmado' => 'fecha_firmado',
            'id_usuario_firmado' => 'id_usuario_firmado',
            'autorizado' => 'autorizado',
            'fecha_autorizado' => 'fecha_autorizado',
            'id_usuario_autorizado' => 'id_usuario_autorizado',
            'observacion_aut' => 'observacion_aut',
            'fecha_salida' => 'fecha_salida',
            'fecha_regreso' => 'fecha_regreso',
            'cod_area' => 'cod_area',
            'area' => 'area',
            'sigla' => 'sigla',
            'descomi' => 'descomi',
            'observ' => 'observ',
            'dcomi' => 'dcomi',
            'ano_fiscal' => 'ano_fiscal',
            'cod_proyecto' => 'cod_proyecto',
            'proyecto' => 'proyecto',
            //'estado_general' => 'estado_general',
            //'desc_estado_general' => 'desc_estado_general',
            //'fecha_estado_general' => 'fecha_estado_general',
            'usuario_estado_general' => 'usuario_estado_general',
            'obs_estado_general' => 'obs_estado_general',
            'num_doc_terlog' => 'num_doc_terlog',
            'razon_soc_terlog' => 'razon_soc_terlog',
            'num_doc_tersup' => 'num_doc_tersup',
            'razon_soc_tersup' => 'razon_soc_tersup',
            'correo' => 'correo',
            'correo_tersup' => 'correo_tersup',
            'num_doc_terest' => 'num_doc_terest',
            'razon_soc_terest' => 'razon_soc_terest',
            'num_doc_terfir' => 'num_doc_terfir',
            'razon_soc_terfir' => 'razon_soc_terfir',
            'num_doc_teraut' => 'num_doc_teraut',
            'razon_soc_teraut' => 'razon_soc_teraut',
            'nitocc' => 'nitocc',
            'codobj' => 'codobj',
            'valor' => 'valor',
            'valor_gasto' => 'valor_gasto',
            'viaticos' => 'viaticos',
            'acumulado_gastos' => 'acumulado_gastos',
            'taxis' => 'taxis',
            'tarifa' => 'tarifa',
            'cod_proyecto,||, - ,||,proyecto' => 'completo_proyecto',
            'num_doc_tersup,||, - ,||,razon_soc_tersup' => 'completo_supervisor',
            'num_doc_terlog,||, - ,||,razon_soc_terlog' => 'completo_programador'
        )
    ); //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_PROGRAM_COMIS_V' => array(
            'id_plan_comisiones,a' => array('!=' => array(-1)),
            'id_plan_comisiones,b' => array('=' => array('id_plan_comisiones')),
            'vigencia' => array('=' => array('vigencia')),
            'id_comisiones' => array('=' => array('id_comisiones')),
            'vigencia_comisiones' => array('=' => array('vigencia_comisiones')),
            'fecha_log' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'usuario_log' => array('=' => array('usuario_log')),
            'estado_general' => array('IN' => array('estado_general')),
            'cdp' => array('=' => array('cdp')),
            'vigencia_cdp' => array('=' => array('vigencia_cdp')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'COM_PLAN_COMISIONES_V' => array(
            'id_plan_comisiones,a' => array('!=' => array(-1)),
            'id_area' => array('=' => array('id_area')),
            'tipcomi' => array('=' => array('tipcomi')),
            'id_proyectos' => array('=' => array('id_proyectos')),
            'interrupcion' => array('=' => array('interrupcion')),
            'vobo' => array('=' => array('vobo')),
            'estado' => array('=' => array('estado')),
            'nivel_rechazo' => array('=' => array('nivel_rechazo')),
            'firmado' => array('=' => array('firmado')),
            'autorizado' => array('=' => array('autorizado')),
        //'estado_general' => array('IN' => array('estado_general'))
        )
    ); //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', 'vigencia_comisiones', 'id_comisiones', 'cdp'
    ); //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;

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

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

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

        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */
//        $id_tipo_doc = $request['id_tipo_doc'];
//        $num_doc = $request['num_doc'];
//        $id_clase_fondo = $request['id_clase_fondo'];

        /*
         *  Validar la operación, ya sea por SQL
         */
//        $sql = <<<EOD
//select * 
//from no_afilia_fondo
//where
//id_tipo_doc = $id_tipo_doc
//and num_doc = '$num_doc'
//and id_clase_fondo = $id_clase_fondo 
//EOD;
//        $records = CN_TABLE::executeSQL($sql);
        /*
         *  Generar errores en $errors
         */
//        if (count($records) > 0) {
//            $errors['mensaje'] = "Ya posee un registro de fondo, para la clase de fondo selecionado.";
//            $errors['servicio'] = "afilia_fondo";
//        }

        return $errors;
    }

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

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            //Comentario
            $request['fecha_log'] = CN_TABLE::fechaSistema();
            $request['usuario_log'] = $request['id_username'];
        }

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

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

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

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

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

        return $request;
    }

    /**
     * Crea la comision segun planeacion y comisionados seleccionados  - 20181113
     * @param sfWebRequest $request
     */
    public function executeAdd(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---function executeUpdate");
        $this->logMessage("---BEGIN Logging request");

        $status = 0;
        $response = array();
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------* Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        $records = array();

        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        /*
         * Formato de fecha
         */
        //Sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS" 
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);

        try {

            /**
             * Variables globales
             */
            $id_plan_comisiones = $request['id_plan_comisiones'];
            $id_vigencia = $request['vigencia'];
            $cdp = $request['cdp'];
            $vigencia_cdp = $request['vigencia_cdp'];
            $texto_comisionados_placom = $request['texto_comisionados_placom'];


            /*
             * variables por defecto para el registro de log
             */
            $id_tabla = $id_plan_comisiones;

            /*
             * obtener id maestro tabla
             */
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('COM_PLAN_COMISIONES');

            /**
              1	CONSULTAR
              2	ACTUALIZAR
              3	ADICIONAR
              4	ELIMINAR
              5	ANULAR
             */
            $id_ope_bd = 2;

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }

            //username
            $username = 'admin';
            if (isset($request['username'])) {
                if (!is_null($request['username']) && $request['username'] != '') {
                    $username = $request['username'];
                }
            }
            //usuario
            $usuario = '0';
            if (isset($request['id_username'])) {
                if (!is_null($request['id_username']) && $request['id_username'] != '') {
                    $usuario = $request['id_username'];
                }
            }

            //comando de la funcionalidad
            $comando = 'sin comando';
            if (isset($request['comando'])) {
                $comando = $request['comando'];
            }

            //construir observacion
            $observacion_log = "'Se intenta crear registro de programacion de comisiones desde la funcionalidad: " . $comando . "'";
            $subject = "";

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $username, $comando, $observacion_log);

            $id_username = $request['id_username'];
            $fecha_sistema = CN_TABLE::fechaSistema();

            /*
             * (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;
                        }
                    }
                }
                $int++;
            }
            $schema_pgn = "";
            $schema_sgr = "";
            $id_planeacion_validacion_pgn = "";
            $id_planeacion_validacion_sgr = "";
            if ($entidadCliente == "2") {
                $schema_pgn = "";
                $schema_sgr = "@SGR.ANM.LOCAL";
                $id_planeacion_validacion_pgn = "and tab0.id_plan_comisiones <> $id_plan_comisiones";
                $id_planeacion_validacion_sgr = "";
            }
            if ($entidadCliente == "3") {
                $schema_pgn = "@WEBSAFI.ANM.LOCAL";
                $schema_sgr = "";
                $id_planeacion_validacion_pgn = "";
                $id_planeacion_validacion_sgr = "and tab0.id_plan_comisiones <> $id_plan_comisiones";
            }

            //Validamos que las fechas de los funcionarios no coincidan con otras planeaciones y programaciones
            $sql = <<<EOD
select 
    tab0.dias,  
    tab0.id_plan_comisiones,                
    tab0.nitocc,
    to_char(fecha_salida,'yyyy-mm-dd')  as fecha_salida,
    to_char(fecha_regreso,'yyyy-mm-dd')  as fecha_regreso                   
from com_plan_comisionados_placom tab0
where
tab0.id_plan_comisiones = $id_plan_comisiones
and tab0.vigencia = $id_vigencia     
and tab0.nitocc in ($texto_comisionados_placom)                       
EOD;
            $records = CN_TABLE::executeSQL($sql);
            foreach ($records as $record) {

                $numdoc = $record['nitocc'];
                $fecha_salida = $record['fecha_salida'];
                $fecha_regreso = $record['fecha_regreso'];
                $id_plan_comisiones = $record['id_plan_comisiones'];
                $dias = $record['dias'];

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

                $records_pla = CN_TABLE::executeSQL($sql);
                $tipcomi = $records_pla[0]['tipcomi'];
                
                /* Si no es extraordinaria s evalida que le comisionado no tenga comisiones pendiente de legalizar
                 * 
                 */
                if($tipcomi != '07') {

                    $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") {
                        throw new Exception("</br>El comisionado $numdoc tiene comisiones pendientes de legalizar , favor verificar.");
                    }*/
                    //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.";
                        //throw new Exception("</br>El comisionado $numdoc tiene comisiones pendientes de legalizar , favor verificar.");
                        throw new Exception($mensaje);
                    }

                    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.";
                        //throw new Exception("</br>El comisionado $numdoc tiene comisiones pendientes de legalizar , favor verificar.");
                        throw new Exception($mensaje);
                    }




                }
                
                /**
                 * Se deja para extraordinaria y emergencia que no valide, pero la nueva resol debe ser de 1 dia o mas - 20210929::LAVILA    
                 * Faltaba omitir la actual - 20211005::LAVILA    
                 */
                if ($tipcomi != '07' and $tipcomi != '02') {
                    //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 $id_planeacion_validacion_pgn
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 $id_planeacion_validacion_sgr
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;

                    $data = CN_TABLE::executeSQL($sql);
                    if (count($data) > 0) {
                        throw new Exception("</br></br>El comisionado tiene comisiones programadas en el mismo rango de fechas($fecha_salida a $fecha_regreso), favor verificar.");
                    }
                } else {
                    $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 $id_planeacion_validacion_pgn
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 $id_planeacion_validacion_sgr
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_tag = CN_TABLE::executeSQL($sql);
                    if (count($records_tag) > 0 && $dias < 1) {
                        //throw new Exception("</br></br>El registro debe ser por lo menos de 1 dia, no se permite menos, favor verificar.");
                    }
                }
            }

            //Validamos que el CDP tenga disponivilidad
            //Sql
            $sql = <<<EOD
select tab0.valor, nvl(cdp.SALDO,0) as saldo_cdp,nvl(cdp.SALDO,0)-tab0.valor as saldo_post_comis,cdp.CDP
from
(select sum(planobj.valor) as valor,id_plan_comisiones,planobj.vigencia
from com_plan_comisionados_objs_v planobj
where
planobj.id_plan_comisiones = $id_plan_comisiones
and planobj.vigencia = $id_vigencia     
and planobj.nitocc in ($texto_comisionados_placom) 
group by planobj.id_plan_comisiones,planobj.vigencia
)tab0
left join com_plan_comisiones pl on pl.ID_PLAN_COMISIONES=tab0.ID_PLAN_COMISIONES and pl.VIGENCIA = tab0.VIGENCIA
left join PROYECTOS_VIATICO pro on pro.ID_PROYECTOS_VIATICO=pl.ID_PROYECTOS_VIATICO
left join PROYECTOS pro1 on pro1.id = pl.id_proyectos
left join (select cdp,sum(saldo) as saldo from pr_cdps_v group by cdp) cdp on cdp.CDP = nvl(pro.ID_CDP_GLOBAL,pro1.ID_CDP_GLOBAL)
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeSQL($sql);
            $saldo_cdp = $records[0]['saldo_post_comis'];
            //$cdp_valida = $records[0]['cdp'];
            if ($saldo_cdp < 0) {
                throw new Exception("</br>El CDP $cdp ,no cuenta con saldo suficiente.");
            } else {

                //Obtener secuencia de comisiones
                $id_comisiones = 1;
                $vigencia_comisiones = date('Y'); //anho completo cuatro digitos
                //Sql
                $sql = <<<EOD
SELECT
consecutivo_comision as id_comisiones
FROM consecutivos 
where vigencia = $vigencia_comisiones 
EOD;
                //Ejecutar SQL
                $records_sec = CN_TABLE::executeSQL($sql);

                if (count($records_sec) > 0) {

                    $id_comisiones = $records_sec[0]['id_comisiones'];

                    //Actualizamos secuencia de comisiones 
                    $sql = <<<EOD
update consecutivos 
set consecutivo_comision = $id_comisiones + 1
where vigencia = $vigencia_comisiones 
EOD;
                    //Ejecutar SQL
                    $this->conn->execute($sql);
                } else {

                    //Crea secuencia de comisiones 
                    $sql = <<<EOD
insert into CONSECUTIVOS (ID,CONSECUTIVO_COMISION,VIGENCIA)
values ( (SELECT max(id)+1 FROM CONSECUTIVOS) ,$id_comisiones+1,$vigencia_comisiones)
EOD;
                    //Ejecutar SQL
                    $this->conn->execute($sql);
                }

                //Creo registro tabla COMISIONES
                $sql = <<<EOD
insert into comisiones
(ID,
CODARE,
TIPCOMI,
CODPRO,
FECHA,
OBJETIVO,
ACTIVIDAD,
OBSERVA,
CREATED_AT,
UPDATE_AT,
USERNAME,
ESTADO,
ACTIVO,
VIGENCIA,
JUSTIFICACION,
INTERRUPCION,
ID_ORIGINAL,
DESTINOS_ADD,
FECHA_LOG,
VOBO,
MARCA_AUTOMATICO,
ID_PROYECTOS,
ID_PROYECTOS_VIATICO)
   
select
$id_comisiones as id,
placom.cod_area as codare,
placom.tipcomi as tipcomi,
placom.cod_proyecto as codpro,
trunc(sysdate) as fecha,
placom.objetivo as objetivo,
placom.actividad as actividad,
placom.observaciones as observa,
trunc(sysdate) as created_at,
null as update_at,
(SELECT
    max(us.id)
FROM usuarios us where us.nitocc = placom.num_doc_terlog) as username,
1 as estado,
1 as activo,
$vigencia_comisiones as vigencia,
null as justificacion,
case when placom.interrupcion = 1 then 1 else null end as interrupcion,
placom.id_original as id_original,
null as destinos_add,
sysdate as fecha_log,
placom.vobo as vobo,
1 as marca_automatico,
id_proyectos,
id_proyectos_viatico
   
from com_plan_comisiones_v placom

where
placom.id_plan_comisiones = $id_plan_comisiones
and placom.vigencia = $id_vigencia 
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear destinos de comision
                $sql = <<<EOD
Insert into destinos 
(CODMUN,
ID_COMISION,
ORDEN,
ESTADO,
OBSERVACION,
VIGENCIA,
CODDEPTO)
   
select
plades.codmun as codmun,
$id_comisiones as id_comision,
plades.orden as orden,
plades.estado as estado,
plades.observaciones as observacion,
$vigencia_comisiones as vigencia,
plades.id_depto as coddepto

from com_plan_destinos plades

where
plades.id_plan_comisiones = $id_plan_comisiones
and plades.vigencia = $id_vigencia   
and plades.estado = 1     
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear comisionados planta Tipter-02
                $sql = <<<EOD
Insert into comisionados_planta  
(ID_COMISION,
NITOCC,
ID_TRANSPORTE,
SUELDO,
CARGO,
FECHA_SALIDA,
DIAS,
CODREG,
TOTAL_COMISION,
ESTADO,
FECHA_REGRESO,
VIGENCIA,
GASTOS_TAXIS,
DIAS_MANU,
HORA_SALIDA,
HORA_REGRESO,
LIQUIDAR_VIA,
DIAS_TARIFA_A,
DIAS_TARIFA_B,
PORCENTAJE_DIA,
JUSTIFICACION_POR
)
   
select
$id_comisiones as id_comision,
placomis.nitocc as nitocc,
placomis.id_transporte as id_transporte,
placomis.sueldo as sueldo,
placomis.cargo as cargo,
placomis.fecha_salida as fecha_salida,
placomis.dias as dias,
placomis.codreg as codreg,
placomis.valor as total_comision,
placomis.estado as estado,
placomis.fecha_regreso as fecha_regreso,
$vigencia_comisiones as vigencia,
placomis.taxis as gastos_taxis,
placomis.dias_manu as dias_manu,
placomis.hora_salida,
placomis.hora_regreso,
placomis.liquidar_via,
placomis.dias_tarifa_a,
placomis.dias_tarifa_b,
placomis.porcentaje_dia,
placomis.justificacion_por                    

from com_plan_comisionados_placom_v placomis

where
placomis.id_plan_comisiones = $id_plan_comisiones
and placomis.vigencia = $id_vigencia  
and placomis.tipter = '02'       
and placomis.estado = 1         
and placomis.nitocc in ($texto_comisionados_placom)     
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear comisionados contrato Tipter-01
                $sql = <<<EOD
Insert into comisionados_contrato 
(ID_COMISION,
NITOCC,
ID_TRANSPORTE,
SUELDO,
CARGO,
FECHA_SALIDA,
DIAS,
CODREG,
TOTAL_COMISION,
ESTADO,
FECHA_REGRESO,
VIGENCIA,
GASTOS_TAXIS,
DIAS_MANU,
HORA_SALIDA,
HORA_REGRESO,
LIQUIDAR_VIA,
DIAS_TARIFA_A,
DIAS_TARIFA_B,
PORCENTAJE_DIA,
JUSTIFICACION_POR
)
   
select
$id_comisiones as id_comision,
placomis.nitocc as nitocc,
placomis.id_transporte as id_transporte,
placomis.sueldo as sueldo,
placomis.cargo as cargo,
placomis.fecha_salida as fecha_salida,
placomis.dias as dias,
placomis.codreg as codreg,
placomis.valor as total_comision,
placomis.estado as estado,
placomis.fecha_regreso as fecha_regreso,
$vigencia_comisiones as vigencia,
placomis.taxis as gastos_taxis,
placomis.dias_manu as dias_manu,
placomis.hora_salida,
placomis.hora_regreso,
placomis.liquidar_via,
placomis.dias_tarifa_a,
placomis.dias_tarifa_b,
placomis.porcentaje_dia,
placomis.justificacion_por

from com_plan_comisionados_placom_v placomis

where
placomis.id_plan_comisiones = $id_plan_comisiones
and placomis.vigencia = $id_vigencia  
and placomis.tipter = '01'       
and placomis.estado = 1  
and placomis.nitocc in ($texto_comisionados_placom)   
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear objetos de gasto
                //Campos nuevos de tarifa tiquete y dias - 20190904
                $sql = <<<EOD
Insert into comisionados_objs 
(NITOCC,
CODOBJ,
ID_COMISION,
VALOR,
ESTADO,
VIGENCIA,
OBSERVA,
VIATICOS,
TAXIS,
TARIFA,
ID_OBJ_GASTO,
TARIFA_TIQUETE,
CANT_DIA_SAL,
CANT_DIA_REG,
VL_TARIFA_A,
VL_TARIFA_B
)
   
select
planobj.nitocc as nitocc,
planobj.codobj as codobj,
$id_comisiones as id_comision,
planobj.valor as valor,
planobj.estado as estado,
$vigencia_comisiones as vigencia,
planobj.observaciones as observa,
planobj.viaticos as viaticos,
planobj.taxis as taxis,
planobj.tarifa as tarifa,
planobj.id_obj_gasto,
planobj.tarifa_tiquete,
planobj.cant_dia_sal,
planobj.cant_dia_reg,
planobj.vl_tarifa_a,
planobj.vl_tarifa_b                   

from com_plan_comisionados_objs_v planobj

where
planobj.id_plan_comisiones = $id_plan_comisiones
and planobj.vigencia = $id_vigencia  
and planobj.estado = 1    
and planobj.nitocc in ($texto_comisionados_placom)    
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear destinos de comisionados
                $sql = <<<EOD
Insert into destinos_comisionados
(NITOCC,
ID_COMISION,
CODMUN,
ORDEN,
ESTADO,
VIGENCIA,
ID_TRANSPORTE)
   
select
plandescom.nitocc as nitocc,
$id_comisiones as id_comision,
plandescom.codmun as codmun,
plandescom.orden as orden,
plandescom.estado as estado,
$vigencia_comisiones as vigencia,
plandescom.id_transporte as id_transporte

from com_plan_destinos_comisiona_v plandescom

where
plandescom.id_plan_comisiones = $id_plan_comisiones
and plandescom.vigencia = $id_vigencia  
and plandescom.estado = 1  
and plandescom.nitocc in ($texto_comisionados_placom)      
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //Crear tarifas de comisionados
                $sql = <<<EOD
Insert into tarifas_destino
(NITOCC,
ID_COMISION,
VIGENCIA,
ID_TARIFA,
NUM_VIAJES,
TOTAL,
CODMUN,
ID_TRANSPORTE,
PLACA_VEHICULO,
TIPO_VEHICULO,
RECORRIDO_VEHICULO,
DISTANCIA) 
    
select
plantardes.nitocc as nitocc,
$id_comisiones as id_comision,
$vigencia_comisiones as vigencia,
plantardes.id_tarifa as id_tarifa,
plantardes.num_viajes as num_viajes,
plantardes.total as total,
plantardes.codmun as codmun,
plantardes.id_transporte as id_transporte,
plantardes.placa_vehiculo,
plantardes.tipo_vehiculo,
plantardes.recorrido_vehiculo,
plantardes.distancia    

from com_plan_tarifas_destino_v plantardes

where
plantardes.id_plan_comisiones = $id_plan_comisiones
and plantardes.vigencia = $id_vigencia  
and plantardes.nitocc in ($texto_comisionados_placom) 
and plantardes.id_tarifa is not null
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);


                //Creo registro tabla COM_PLAN_PROGRAM_COMIS
                $sql = <<<EOD
Insert into COM_PLAN_PROGRAM_COMIS (ID_PLAN_COMISIONES,VIGENCIA,ID_COMISIONES,VIGENCIA_COMISIONES,
    FECHA_LOG,USUARIO_LOG,CDP,VIGENCIA_CDP) 
values ('$id_plan_comisiones','$id_vigencia','$id_comisiones','$vigencia_comisiones',
    trunc(sysdate),'$id_username','$cdp','$vigencia_cdp')
EOD;
                //Ejecutar SQL
                $this->conn->execute($sql);

                //construir observacion
                $observacion_log = "'Se crear registro de programacion de comisiones desde la funcionalidad: " . $comando . "'";
                $id_tabla = $id_comisiones;
                $id_ope_bd = 3;

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $username, $comando, $observacion_log);


                $this->conn->commit();
                $this->status = 0;
                $this->list_data = $response;
                $this->logMessage("[com_plan_program_comis] Exitoso");
            }
        } catch (Exception $e) {

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

            $this->status = 1;
            $this->mensajeError = "[com_plan_program_comis] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[com_plan_program_comis] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
