<?php

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

    protected $table_names = array(
        'RVC_FORMATO_PAGO_V',
        'RVC_CONTRATO_V',
        'RVC_CONTRATISTA',
        'RVC_TIPO_REGIMEN',
        'RVC_NUMERO_PAGO',
        'RVC_TIPO_RIESGO',
        'CIUDAD',
        'TS_UVT',
        'NO_SMDLV',
        'TIPO_DOCUMENTO',
        'RVC_DECLARA_JURA_NOV_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'RVC_CONTRATO_V' =>
        array(
            'id_contrato' => 'RVC_FORMATO_PAGO_V'
        ),
        'RVC_CONTRATISTA,LEFT' =>
        array(
            'id_contratista' => 'RVC_FORMATO_PAGO_V'
        ),
        'RVC_TIPO_REGIMEN,LEFT' =>
        array(
            'id_tipo_regimen' => 'RVC_CONTRATISTA'
        ),
        'RVC_NUMERO_PAGO,LEFT' =>
        array(
            'id_numero_pago' => 'RVC_FORMATO_PAGO_V'
        ),
        'RVC_TIPO_RIESGO,LEFT' =>
        array(
            'id_tipo_riesgo' => 'RVC_FORMATO_PAGO_V'
        ),
        'CIUDAD,LEFT' =>
        array(
            'id_ciudad-id' => 'RVC_CONTRATISTA'
        ),
        'TS_UVT,LEFT' =>
        array(
            'year-vigencia' => 'RVC_CONTRATO_V'
        ),
        'NO_SMDLV,LEFT' =>
        array(
            'year-vigencia' => 'RVC_CONTRATO_V'
        ),
        'TIPO_DOCUMENTO,LEFT' =>
        array(
            'id_tipo_doc' => 'RVC_CONTRATISTA'
        ),
        'RVC_DECLARA_JURA_NOV_V,LEFT' =>
        array(
            'id_declara_jura_nov' => 'RVC_FORMATO_PAGO_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'RVC_FORMATO_PAGO_V' =>
        array(
            'id_formato_pago' => 'id_formato_pago',
            'id_contratista' => 'id_contratista',
            'id_contrato' => 'id_contrato',
            'id_numero_pago' => 'id_numero_pago',
            'fecha_ini_pago' => 'fecha_ini_pago',
            'fecha_fin_pago' => 'fecha_fin_pago',
            'valor_mensual' => 'valor_mensual',
            'valor_iva_reg' => 'valor_iva_reg',
            'dias_liq' => 'dias_liq',
            'valor_pagar' => 'valor_pagar',
            'numero_planilla' => 'numero_planilla',
            'valor_ingresos' => 'valor_ingresos',
            'aporte_salud' => 'aporte_salud',
            'aporte_pension' => 'aporte_pension',
            'aporte_fsp' => 'aporte_fsp',
            'aporte_arl' => 'aporte_arl',
            'id_tipo_riesgo' => 'id_tipo_riesgo',
            'aporte_volun_pen' => 'aporte_volun_pen',
            'aporte_volun_afc' => 'aporte_volun_afc',
            'valor_intereses_vivienda' => 'valor_intereses_vivienda',
            'valor_dependientes' => 'valor_dependientes',
            'valor_medicina' => 'valor_medicina',
            'valor_total_reten' => 'valor_total_reten',
            'valor_base_reten' => 'valor_base_reten',
            'valor_retencion' => 'valor_retencion',
            'tarifa_reten' => 'tarifa_reten',
            'valor_iva' => 'valor_iva',
            'tarifa_iva' => 'tarifa_iva',
            'valor_ica' => 'valor_ica',
            'valor_ica_extra' => 'valor_ica_extra',
            'tarifa_ica' => 'tarifa_ica',
            'valor_a_pagar' => 'valor_a_pagar',
            'valor_comisiones' => 'valor_comisiones',
            'valor_base_ica' => 'valor_base_ica',
            'fecha_log' => 'fecha_log',
            'fecha_creacion' => 'fecha_creacion',
            'usuario_log' => 'usuario_log',
            'valor_embargo' => 'valor_embargo',
            'valor_contrato' => 'valor_contrato',
            'valor_ing_comisiones' => 'valor_ing_comisiones',
            'adjunto_salud' => 'adjunto_salud',
            'adjunto_pension' => 'adjunto_pension',
            'adjunto_fsp' => 'adjunto_fsp',
            'adjunto_arl' => 'adjunto_arl',
            'adjunto_afc' => 'adjunto_afc',
            'adjunto_volunt' => 'adjunto_volunt',
            'adjunto_vivienda' => 'adjunto_vivienda',
            'adjunto_depen' => 'adjunto_depen',
            'adjunto_medicina' => 'adjunto_medicina',
            'adjunto_factura' => 'adjunto_factura',
            'estado' => 'estado',
            'fecha_estado' => 'fecha_estado',
            'observaciones_estado' => 'observaciones_estado',
            'firmado' => 'firmado',
            'fecha_firmado' => 'fecha_firmado',
            'revisado' => 'revisado',
            'fecha_revisado' => 'fecha_revisado',
            'usuario_revisado' => 'usuario_revisado',
            'observacion_rev' => 'observacion_rev',
            'autorizado' => 'autorizado',
            'fecha_autorizado' => 'fecha_autorizado',
            'usuario_autorizado' => 'usuario_autorizado',
            'observacion_aut' => 'observacion_aut',
            'radicado' => 'radicado',
            'fecha_radicado' => 'fecha_radicado',
            'usuario_estado' => 'usuario_estado',
            'numero_radicado' => 'numero_radicado',
            'nivel_rechazo' => 'nivel_rechazo',
            'aprobado' => 'aprobado',
            'fecha_aprobado' => 'fecha_aprobado',
            'usuario_aprobado' => 'usuario_aprobado',
            'observaciones_aprob' => 'observaciones_aprob',
            'estado_general' => 'estado_general',
            'desc_estado_general' => 'desc_estado_general',
            'obs_estado_general' => 'obs_estado_general',
            'valor_deduccion' => 'valor_deduccion',
            'adjunto_planilla_opcional' => 'adjunto_planilla_opcional',
            'adjunto_cert_salud' => 'adjunto_cert_salud',
            'adjuntos_actividades' => 'adjuntos_actividades',
            'adjunto_acta_inicio' => 'adjunto_acta_inicio',
            'pagado' => 'pagado',
            'ids_pagado' => 'ids_pagado',
            'comision_form_pago' => 'comision_form_pago',
            'valor_rp_anm_cont' => 'valor_rp_anm_cont',
            'valor_rp_sgr_cont' => 'valor_rp_sgr_cont',
            'valor_rp_anm_doble' => 'valor_rp_anm_doble',
            'valor_rp_sgr_doble' => 'valor_rp_sgr_doble',
            'cotiza_ibc_dif' => 'cotiza_ibc_dif',
            'valor_cotiza_ibc' => 'valor_cotiza_ibc',
            'aplica_planilla_aportes' => 'aplica_planilla_aportes', 
            'fecha_exp_medicina' => 'fecha_exp_medicina', 
            'fecha_exp_int_vivienda' => 'fecha_exp_int_vivienda',
            'tarifa_caja_comp'=>'tarifa_caja_comp',
            'id_fondo_salud'=>'id_fondo_salud',
            'id_fondo_pension'=>'id_fondo_pension',
            'id_caja_comp'=>'id_caja_comp',
            'id_fondo_arl'=>'id_fondo_arl',
            'id_tipo_regimen'=>'id_tipo_regimen',
            'razon_social_caja_comp'=>'razon_social_caja_comp',
            'fecha_cert_seguridad_tra' => 'fecha_cert_seguridad_tra',
            'id_declara_jura_nov' => 'id_declara_jura_nov',
            'fecha_consigna_afc' => 'fecha_consigna_afc',
            'fecha_consigna_volun_pen' => 'fecha_consigna_volun_pen',
            'anho_gravable_int_viv' => 'anho_gravable_int_viv',
            'anho_gravable_medicina' => 'anho_gravable_medicina',
        ),
        'RVC_CONTRATO_V' =>
        array(
            'num_contrato' => 'num_contrato',
            'id_anhos' => 'id_anhos',
            'fecha_contrato' => 'fecha_contrato',
            'objeto' => 'objeto',
            'obligaciones' => 'obligaciones',
            'estado' => 'estado_contrato',
            'rp_anm' => 'rp_anm',
            'rp_sgr' => 'rp_sgr',
            'rp_anm,||,rp_sgr' => 'rp',
            'fecha_rp' => 'fecha_rp',
            'fecha_poliza' => 'fecha_poliza',
            'valor_anm' => 'valor_anm',
            'cdp_anm' => 'cdp_anm',
            'fecha_cdp_anm' => 'fecha_cdp_anm',
            'valor_sgr' => 'valor_sgr',
            'cdp_sgr' => 'cdp_sgr',
            'fecha_cdp_sgr' => 'fecha_cdp_sgr',
            'dependencia' => 'dependencia',
            'meses_plazo' => 'meses_plazo',
            'dias_plazo' => 'dias_plazo',
            'fecha_plazo' => 'fecha_plazo',
            'id_supervisor' => 'id_supervisor',
            'num_doc_sup' => 'num_doc_sup',
            'id_apoyo_supervisor' => 'id_apoyo_supervisor',
            'num_doc_apo' => 'num_doc_apo',
            'valor_anm,+,valor_sgr' => 'valor_contrato_cont',
            'fecha_ini' => 'fecha_ini',
            'fecha_fin' => 'fecha_fin',
            'aplica_rp_doble' => 'aplica_rp_doble',
            'adjunto_novedad_prorr' => 'adjunto'
        ),
        'RVC_CONTRATISTA' =>
        array(
            'tipo_recurso' => 'tipo_recurso',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'razon_social' => 'razon_social',
            'correo' => 'correo',
            'id_ciudad' => 'id_ciudad',
            'estado' => 'estado_contratista',
            //'id_tipo_regimen' => 'id_tipo_regimen',
            'mas_empleados' => 'mas_empleados',
            'declarante_renta' => 'declarante_renta',
            'pensionado' => 'pensionado',
            'embargo' => 'embargo',
            'dependiente' => 'dependiente',
            'valor_embargo' => 'valor_embargo_contra',
            'num_doc,||, - ,||,razon_social' => 'completo',
            'id_tipo_riesgo' => 'id_tipo_riesgo_cont',
            'adjunto_pensionado' => 'adjunto_pensionado'
        ),
        'RVC_TIPO_REGIMEN' =>
        array(
            'descripcion' => 'tipo_regimen',
            'aplica_iva' => 'aplica_iva'
        ),
        'RVC_NUMERO_PAGO' =>
        array(
            'numero' => 'numero',
            'descripcion' => 'numero_pago'
        ),
        'RVC_TIPO_RIESGO' =>
        array(
            'codigo' => 'codigo',
            'descripcion' => 'descripcion_riesgo',
            'valor' => 'valor_riesgo'
        ),
        'CIUDAD' =>
        array(
            'nombre' => 'nombre_ciudad',
            'tarifa_ica' => 'tarifa_ica_ciudad',
            'base_deveg' => 'base_deveg',
            'base_deduc' => 'base_deduc',
            'tarifa_ica_extra' => 'tarifa_ica_extra'
        ),
        'TS_UVT' =>
        array(
            'vigencia' => 'vigencia',
            'valor_uvt' => 'valor_uvt'
        ),
        'NO_SMDLV' =>
        array(
            'valor_dia' => 'valor_dia_smdlv',
            'valor_mensual' => 'valor_mensual_smdlv'
        ),
        'TIPO_DOCUMENTO' =>
        array(
            'descripcion' => 'tipo_documento',
            'abreviacion' => 'abreviacion_td',
            'codigo_siif' => 'codigo_siif'
        ),
        'RVC_DECLARA_JURA_NOV_V' =>
        array(
            'fecha' => 'fecha_declara_jura_nov',
            'id_tipo_condiciones' => 'id_tipo_condiciones',
            'tipo_condiciones' => 'tipo_condiciones',
        )
    ); //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(
        'RVC_FORMATO_PAGO_V' => array(
            'id_formato_pago,a' => array('!=' => array(-1)),
            'id_formato_pago,b' => array('=' => array('id_formato_pago')),
            'id_contratista' => array('=' => array('id_contratista')),
            'id_contrato' => array('=' => array('id_contrato')),
            'id_numero_pago' => array('=' => array('id_numero_pago')),
            'estado' => array('=' => array('estado')),
            'firmado' => array('=' => array('firmado')),
            'revisado' => array('=' => array('revisado')),
            'autorizado' => array('=' => array('autorizado')),
            'radicado' => array('=' => array('radicado')),
            'aprobado' => array('=' => array('aprobado')),
            'pagado' => array('=' => array('pagado')),
            'rechazado' => array('=' => array('rechazado')),
            'numero_radicado' => array('=' => array('numero_radicado')),
            'nivel_rechazo' => array('=' => array('nivel_rechazo')),
            'estado_general' => array('IN' => array('estado_general')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'RVC_CONTRATO_V' => array(
            'num_contrato' => array('=' => array('num_contrato')),
            'id_supervisor' => array('=' => array('id_supervisor')),
            'id_apoyo_supervisor,a' => array('=' => array('id_apoyo_supervisor')),
            'id_apoyo_supervisor,b' => array('NULL' => array('null_apoyo_supervisor'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'RVC_FORMATO_PAGO_V' => array(
            'fecha_ini_pago' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'fecha_fin_pago' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'fecha_radicado_trunc' => array('BETWEENFECHA' => array('fecha_ini_rad', 'fecha_fin_rad'))
        )
    ); // filtros de condicion or
    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'num_doc', 'id_anhos', 'num_contrato', 'numero', 'numero_planilla'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

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



    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_formato_pago'; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('id_formato_pago'); //llave primaria
    protected $field_names = array('id_contratista', 'id_contrato', 'id_numero_pago', 'fecha_ini_pago', 'fecha_fin_pago', 'valor_mensual', 'valor_iva_reg', 'dias_liq'
        , 'valor_pagar', 'numero_planilla', 'valor_ingresos', 'aporte_salud', 'aporte_pension', 'aporte_fsp', 'aporte_arl', 'id_tipo_riesgo'
        , 'aporte_volun_pen', 'aporte_volun_afc', 'valor_intereses_vivienda', 'valor_dependientes', 'valor_medicina', 'valor_total_reten', 'valor_base_reten', 'valor_retencion'
        , 'tarifa_reten', 'valor_iva', 'tarifa_iva', 'valor_ica', 'valor_ica_extra', 'tarifa_ica', 'valor_a_pagar'
        , 'valor_comisiones', 'valor_base_ica', 'fecha_log', 'usuario_log', 'valor_embargo', 'valor_contrato', 'valor_ing_comisiones'
        , 'adjunto_salud', 'adjunto_pension', 'adjunto_fsp', 'adjunto_arl', 'adjunto_afc', 'adjunto_volunt', 'adjunto_vivienda', 'adjunto_depen', 'adjunto_medicina',
        'adjunto_factura', 'numero_radicado', 'valor_deduccion', 'adjunto_planilla_opcional', 'adjunto_cert_salud', 'adjunto_acta_inicio',
        'valor_rp_anm_cont', 'valor_rp_sgr_cont', 'valor_rp_anm_doble', 'valor_rp_sgr_doble','cotiza_ibc_dif','valor_cotiza_ibc',
        'aplica_planilla_aportes','fecha_exp_medicina','fecha_exp_int_vivienda','valor_caja_comp','tarifa_caja_comp',
        'id_fondo_salud', 'id_fondo_pension', 'id_caja_comp','id_fondo_arl','id_tipo_regimen','fecha_cert_seguridad_tra',
        'id_declara_jura_nov','fecha_consigna_afc','fecha_consigna_volun_pen','anho_gravable_int_viv','anho_gravable_medicina'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'RVC_FORMATO_PAGO'; //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_crea'
//    );

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_formato_pago'; //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
     * Incidente #10247, No permitir el registro de un formato de pago para el mismo numero de pago si hay un formato activo. - 20181012
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */
        $id_contratista = $request['id_contratista'];
        $id_contrato = $request['id_contrato'];
        $id_numero_pago = $request['id_numero_pago'];

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT *
FROM rvc_formato_pago
where
id_contratista = $id_contratista
and id_contrato = $id_contrato
and id_numero_pago = $id_numero_pago
and estado = 1
EOD;
        $records = CN_TABLE::executeSQL($sql);

        /*
         *  Generar errores en $errors
         */
        if (count($records) > 0) {
            $errors['mensaje'] = "El contratista ya posee un registro para ese numero de pago ($id_numero_pago) en estado activo.";
            $errors['servicio'] = "formato_pago_contratista";
        }

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

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

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

        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */

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

            $request['usuario_log'] = $request['username'];
            $request['fecha_log'] = CN_TABLE::fechaSistema();
        }

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

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

        return $request;
    }

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

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

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

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

            try {
                //Creamos los registros en la tabla RVC_ACTIVIDAD_OBLIGACION
                //Tomando en cuenta las actividades obligacion registrados para el ultimo formato de pago 
                //del contrato activo
                $id_formato_pago = $list_data_post[0]['id_formato_pago']; 
                $id_contrato = $request['id_contrato'];
                $sql = <<<EOD
Insert into RVC_ACTIVIDAD_OBLIGACION (ID_FORMATO_PAGO,ORDEN,DESCRIPCION,
    FECHA_LOG,USUARIO_LOG,ADJUNTO_ANEXO_ACTIVIDADES) 
(select $id_formato_pago,orden,descripcion,SYSDATE,usuario_log,ADJUNTO_ANEXO_ACTIVIDADES 
from RVC_ACTIVIDAD_OBLIGACION 
where id_formato_pago = (select max(id_formato_pago) from
rvc_formato_pago_v
where id_contrato in (
select id_contrato from rvc_contrato where num_contrato = (select num_contrato from rvc_contrato where id_contrato = $id_contrato)) 
and estado_general not in (0,1)))                 
EOD;
                $this->conn->execute($sql);
                $logger->info("comision_form_pago: - " . $request['comision_form_pago']);
                if (isset($request['comision_form_pago'])) {
                    $logger->info("Entro a comision_form_pago - " . $request['comision_form_pago']);

                    $comision_form_pago = $request['comision_form_pago'];
                    $num_doc = $request['num_doc'];

                    $id_formato_pago = $list_data_post[0]['id_formato_pago'];

                    $comision_pago = explode('@', $comision_form_pago);

                    foreach ($comision_pago as $value) {
                        
                        $logger->info("Entro a registrar comision - " . $value);
                        $value_lista = explode(';', $value);

                        $sgr = $value_lista[0];
                        if ($sgr == 'true') {
                            $sgr = 1;
                        } else {
                            $sgr = 0;
                        }
                        $id_rp_comis = $value_lista[1];
                        $id_vigencia = $value_lista[2];
                        $vigencia = $value_lista[3];
                        $resolucion = $value_lista[4];
                        $valor = $value_lista[5];

                        //Incidente #10247, solo si el valor es mayor a 0 - 20181012
                        if ($valor > 0) {
                            $sql = <<<EOD
Insert into RVC_COMISION_FORM_PAGO (ID_COMISION_FORM_PAGO,ID_FORMATO_PAGO,SGR,
    ID_RP_COMIS,ID_VIGENCIA,VIGENCIA,RESOLUCION,NITOCC,VALOR) 
values (null,'$id_formato_pago','$sgr',
    '$id_rp_comis','$id_vigencia','$vigencia','$resolucion','$num_doc','$valor')                      
EOD;
                            $this->conn->execute($sql);
                        }
                    }
                }
                $this->conn->commit();
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
                $logger->info("ERROR: - " . $e);
            }
        }

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

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

        return $request;
    }

    /**
     * Actualizar el estado del formato de pago
     * tipo_boton
     * 1-Firmado
     * 2-Revisado
     * 3-Autorizado
     * 4-Radicado
     * 5-Rechazado
     * 6-Aprobado
     * 7-Reactivacion
     * 
     * tipo_trans
     * 1-Contratista
     * 2-Apoyo Supervisor
     * 3-Supervisor
     * 4-Financiera
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate(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 por defecto para el registro de log
             */
            $id_tabla = $request['id_formato_pago'];

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

            /**
              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'];
                }
            }

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

            //construir observacion
            $observacion_log = "'Se actualizo tabla de formato de pago desde la funcionalidad: " . $comando . "'";
            $subject = "";

            /*
             * registro de consulta en tabla de log
             */
            if(isset($request['id_formato_pago'])){
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $username, $comando, $observacion_log);
            }


            /*
             * Variables de filtro
             */
            $tipo_boton = $request['tipo_boton'];
            $tipo_trans = $request['tipo_trans'];
            $id_formato_pago = $request['id_formato_pago'];

            $usuario_estado = $request['username'];
            $fecha_estado = CN_TABLE::fechaSistema();

            $observaciones_estado = '';
            if (isset($request['observaciones'])) {
                $observaciones_estado = $request['observaciones'];
            }

            /*
             * (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++;
            }

            //Opcion segun boton
            switch ($tipo_boton) {
                case 1://FIRMADO
                    //Comprobamos que tenga actividades
                    $sql = <<<EOD
SELECT COUNT(id_actividad_accion) as total
FROM rvc_actividad_accion raa
INNER JOIN rvc_actividad_obligacion rao
ON raa.ID_ACTIVIDAD_OBLIGACION=rao.ID_ACTIVIDAD_OBLIGACION 
where rao.ID_FORMATO_PAGO=$id_formato_pago 
EOD;

                    $records = CN_TABLE::executeSQL($sql);
                    if ($records[0]['total'] == 0) {
                        $status = 1;
                        $mensaje = "No es posible Firmar. Necesita programar al menos una actividad.";
                    } else {
                        //actualizar como contratista
                        $sql = <<<EOD
update rvc_formato_pago 
set firmado = 1,
fecha_firmado = SYSDATE
where
id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                        $this->conn->execute($sql);

                        /**
                         * Envio correo al apoyo si tiene, sino al supervisor
                         */
                        $this->logMessage("Envio correo al apoyo si tiene, sino al supervisor");
                        //Consulta datos envio correo
                        //Sql
                        $sql = <<<EOD
select 
forpa.id_formato_pago,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se realiza la firma del contrato '|| con.num_contrato ||' por el contratista ' || contra.num_doc || ' ' || contra.razon_social || ', verificar formato de pago No.'|| num.descripcion ||'.' as mensaje,
--datos de envio
case when con.id_apoyo_supervisor is not null then terapo.num_doc else tersup.num_doc end as num_doc_env,
case when con.id_apoyo_supervisor is not null then terapo.id_tipo_doc else tersup.id_tipo_doc end as id_tipo_doc_env,
case when con.id_apoyo_supervisor is not null then terapo.razon_soc else tersup.razon_soc end as razon_social_env,
case when con.id_apoyo_supervisor is not null then apo.correo else sup.correo end as correo_env

from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                        //Ejecutar SQL
                        $records = CN_TABLE::executeSQL($sql);

                        $this->logMessage("Envio correo");

                        if (count($records) > 0) {

                            $report_params = $records[0];
                            $num_contrato = $records[0]['num_contrato'];
                            $num_doc = $records[0]['num_doc'];

                            //Ejemplo de la persona que se envia el correo: 
                            //123;1;pepito perez;correo@gmal.com
                            $num_doc_env = $records[0]['num_doc_env'];
                            $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                            $razon_social_env = $records[0]['razon_social_env'];
                            $correo_env = $records[0]['correo_env'];
                            $datos_usuario = array(
                                '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                            );

                            $subject = "Firmado - Formato Pago por Contratista:" . $num_doc . " del Contrato:" . $num_contrato;
                            $currentUri = '';
                            $ruta = '';
                            $adjunto = false;
                            $progress_key = $request['comando'] . $request['username'];
                            $array_adjuntos = array();
                            $entidad_cliente = $entidadCliente;
                            $entidad_nombre = $entidadNombre;
                            $addAddress = true;

                            $this->logMessage("Subject: " . $subject);

                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        }

                        $this->logMessage("FIN Envio correo");

                        //construir observacion
                        $observacion_log = "'Formato de pago firmado del proceso del asunto: " . $subject . "'";

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

                    break;
                case 2://REVISADO

                    $id_apoyo_supervisor = $request['id_apoyo_supervisor'];

                    //actualizar como apoyo
                    $sql = <<<EOD
update rvc_formato_pago 
set revisado = 1,
fecha_revisado = SYSDATE,
observacion_rev = '$observaciones_estado',
usuario_revisado = '$id_apoyo_supervisor'
where
id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                    $this->conn->execute($sql);

                    /**
                     * Envio correo al apoyo si tiene, sino al supervisor
                     */
                    $this->logMessage("Envio correo al supervisor");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
select 
forpa.id_formato_pago,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'Observacion: '||forpa.OBSERVACION_REV as mensaje_extra,
'' as mensaje_firma,
'Se realiza la revisión del contrato '|| con.num_contrato ||' asignado al contratista '|| contra.num_doc||' '|| contra.razon_social ||' por el apoyo ' || terapo.num_doc ||' '|| terapo.razon_soc || '.' as mensaje,
--datos de envio
--case when con.id_apoyo_supervisor is not null then terapo.num_doc else tersup.num_doc end as num_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.id_tipo_doc else tersup.id_tipo_doc end as id_tipo_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.razon_soc else tersup.razon_soc end as razon_social_env,
--case when con.id_apoyo_supervisor is not null then apo.correo else sup.correo end as correo_env
                            
--datos de envio Contratista
contra.num_doc as num_doc_env,
contra.id_tipo_doc as id_tipo_doc_env,
contra.razon_social as razon_social_env,
contra.correo as correo_env,
                            
--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup
                            
from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

                    $this->logMessage("Envio correo");

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];

                        //Ejemplo de la persona que se envia el correo: 
                        //123;1;pepito perez;correo@gmal.com
                        $num_doc_env = $records[0]['num_doc_env'];
                        $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                        $razon_social_env = $records[0]['razon_social_env'];
                        $correo_env = $records[0]['correo_env'];
                        //Datos de supervisor
                        $num_doc_sup = $records[0]['num_doc_sup'];
                        $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                        $razon_social_sup = $records[0]['razon_social_sup'];
                        $correo_sup = $records[0]['correo_sup'];
                        $datos_usuario = array(
                            '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env,
                            '1' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup
                        );



                        $subject = "Revisado - Formato Pago por Apoyo Supervisor:" . $num_doc . " del Contrato:" . $num_contrato;
                        $currentUri = '';
                        $ruta = '';
                        $adjunto = false;
                        $progress_key = $request['comando'] . $request['username'];
                        $array_adjuntos = array();
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = true;

                        $this->logMessage("Subject: " . $subject);

                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                    }

                    $this->logMessage("FIN Envio correo");

                    //construir observacion
                    $observacion_log = "'Formato de pago revisado del proceso del asunto: " . $subject . "'";

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


                    break;
                case 3://AUTORIZADO

                    $id_supervisor = $request['id_supervisor'];

                    //actualizar como supervisor
                    $sql = <<<EOD
update rvc_formato_pago 
set autorizado = 1,
fecha_autorizado = SYSDATE,
observacion_aut = '$observaciones_estado',
usuario_autorizado = '$id_supervisor'
where
id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                    $this->conn->execute($sql);

                    /**
                     * Envio correo al apoyo si tiene, sino al supervisor
                     */
                    $this->logMessage("Envio correo al contratista");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
select 
forpa.id_formato_pago,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'Observacion: '||forpa.OBSERVACION_AUT as mensaje_extra,
'' as mensaje_firma,
'Se realiza la autorización del contrato '|| con.num_contrato ||' asignado al contratista '|| contra.num_doc||' '||contra.razon_social ||' por el supervisor ' || tersup.num_doc ||' '|| tersup.razon_soc || '.' as mensaje,
--datos de envio
contra.num_doc as num_doc_env,
contra.id_tipo_doc as id_tipo_doc_env,
contra.razon_social as razon_social_env,
contra.correo as correo_env,
                            
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup,
'Fueron Notificados:</br>
El contratista '||contra.num_doc||' '||contra.razon_social||'</br>
El Apoyo al Supervisor: '|| case when terapo.num_doc is not null then terapo.razon_soc else 'No aplica' end ||'</br>' as mensaje_extra_sup
                            
from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

                    $this->logMessage("Envio correo");

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];

                        //Ejemplo de la persona que se envia el correo: 
                        //123;1;pepito perez;correo@gmal.com
                        $num_doc_env = $records[0]['num_doc_env'];
                        $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                        $razon_social_env = $records[0]['razon_social_env'];
                        $correo_env = $records[0]['correo_env'];
                        //DATOS APOYO - 20180620
                        $num_doc_apo = $records[0]['num_doc_apoyo'];
                        $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                        $razon_social_apo = $records[0]['razon_social_apoyo'];
                        $correo_apo = $records[0]['correo_apoyo'];
                        //DATOS SUPERVISOR - 20180620
                        $num_doc_sup = $records[0]['num_doc_sup'];
                        $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                        $razon_social_sup = $records[0]['razon_social_sup'];
                        $correo_sup = $records[0]['correo_sup'];

                        $datos_usuario = array(
                            '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                        );

                        $subject = "Autorizado - Formato Pago por Supervisor:" . $num_doc . " del Contrato:" . $num_contrato;
                        $currentUri = '';
                        $ruta = '';
                        $adjunto = false;
                        $progress_key = $request['comando'] . $request['username'];
                        $array_adjuntos = array();
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = true;

                        $this->logMessage("Subject: " . $subject);

                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);


                        //ENVIAMOS CORREO A APOYO - 20180620
                        if ($num_doc_apo != '') {
                            $datos_usuario = array(
                                '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo
                            );

                            $this->logMessage("Envio Apoyo: " . $num_doc_apo);
                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        }

                        //ENVIAMOS CORREO A Supervisor - 20180620
                        $mensaje_extra_sup = $records[0]['mensaje_extra_sup'];

                        $datos_usuario = array(
                            '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra_sup
                        );

                        $this->logMessage("Envio supervisor: " . $num_doc_sup);
                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                    }

                    $this->logMessage("FIN Envio correo");

                    //construir observacion
                    $observacion_log = "'Formato de pago autorizado del proceso del asunto: " . $subject . "'";

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

                    break;
                case 4://RADICADO
                    //Mes del pago, si es 12 no valida fechas - 20181213
                    $sql = <<<EOD
select 
EXTRACT(month FROM fecha_fin_pago) as mes,
    fecha_fin_pago 
    from rvc_formato_pago 
    where id_formato_pago=$id_formato_pago
EOD;

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

                    $mes = 0;

                    if (count($records) > 0) {
                        $mes = $records[0]['mes'];
                    }

                    //Verificar registro de acta inicio
                    //Se valida que tenga valor y sea el pago ultimo para radicar - 20181210
                    //Para todos valida acta, pero solo los de marca valida el balance,fechas,valorejecutado, debe estar firmado - 20181211
                    $sql = <<<EOD
SELECT
nvl(tab2.aplica_balance_contrato,0) as aplica_balance_contrato,
case 
when tab3.id_acta_inicio is null then 0
when tab3.id_acta_inicio is not null and tab0.fecha_fin_pago = tab3.fecha_fin and tab3.firmado = 0 and nvl(tab2.aplica_balance_contrato,0) = 1 then 0
when tab3.id_acta_inicio is not null and tab0.fecha_fin_pago = tab3.fecha_fin and tab3.valor_ejecutado = 0 and nvl(tab2.aplica_balance_contrato,0) = 1 then 0
else 1 end as tag_acta_balac

FROM rvc_formato_pago tab0 

LEFT JOIN RVC_CONTRATISTA tab2 ON tab0.id_contratista = tab2.id_contratista 

left join rvc_acta_inicio tab3 on tab3.id_contrato = tab0.id_contrato

where
tab0.id_formato_pago = $id_formato_pago 
EOD;

                    $records = CN_TABLE::executeSQL($sql);
                    //$aplica_balance_contrato = $records[0]['aplica_balance_contrato'];
                    $aplica_balance_contrato = 1; //Para todos valida - 20181211
                    $tag_acta_balac = $records[0]['tag_acta_balac'];

                    //Se deja quemado por ahora mientras se construye parametrizacion - 20181207
                    $aplica_cierre_anho = 0;

                    //Valida que tenga registro de balance contrato, valor mayor a 0 - 20181207
                    if ($aplica_cierre_anho == 1 && $aplica_balance_contrato == 1 && $tag_acta_balac == 0) {
                        $status = 1;
                        $mensaje = "Señor contratist@, para culminar el proceso de radicación; debe dirigirse al menú de cierre Fiscal y diligenciar el registro de balance general.";
                    } else {
                        //Comparamos la fecha actual con la fecha fin pago para que sea mayor 
                        $sql = <<<EOD
select 
EXTRACT(month FROM fecha_fin_pago) as mes,
    fecha_fin_pago 
    from rvc_formato_pago 
    where id_formato_pago=$id_formato_pago and (to_date(fecha_fin_pago,'yyyy-mm-dd HH24:MI:SS')+1)>=to_date(sysdate,'yyyy-mm-dd HH24:MI:SS')
EOD;

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

                        //20190124 se agrgan todos los meses para que funcione como en diciembre se comenta if original
                        //para que no valide la fecha de radicacion menor a la fecha de pago
                        //if (count($records) > 0 && $mes != 12) {
                        if(1==2){
                            $status = 1;
                            $mensaje = "No es posible radicar. La fecha actual debe ser mayor a la fecha final del pago.";
                        } else {
                            //Bucamos la fecha actual en la tabla de festivos a ver si es posible radicar
                            $sql = <<<EOD
Select * from INFESTIVO where to_date(FECHA,'yyyy-mm-dd HH24:MI:SS')=to_date(SYSDATE,'yyyy-mm-dd HH24:MI:SS')
EOD;

                            $records = CN_TABLE::executeSQL($sql);
                            if (count($records) > 0) {
                                $status = 1;
                                $mensaje = "No es posible radicar. Solo es posible radicar en dias habiles.";
                            } else {
                                //AGRGAMOS VALIDACION DE HORA SI ES NECESARIA
                                $sql = <<<EOD
select 
aplica_hora_radicado,
hora_min_radicar,
hora_max_radicar,
                                    
aplica_fec_radicado,                 
case 
when aplica_fec_radicado = 1 and trunc(sysdate) between fecha_min_radicar and fecha_max_radicar then 0 
when aplica_fec_radicado = 1 and trunc(sysdate) not between fecha_min_radicar and fecha_max_radicar then 1 
else 0 end as aplica_fecha, 
to_char(fecha_min_radicar, 'dd/mm/yyyy') as fecha_min_radicar,
to_char(fecha_max_radicar, 'dd/mm/yyyy') as fecha_max_radicar 
                                    
from rvc_param_gen 
where id=1 
EOD;
                                $records = CN_TABLE::executeSQL($sql);
                                //Obtenemos las horas en formato texto y las convertimos a formato hora para realizar la comparacion

                                $aplica_hora = $records[0]['aplica_hora_radicado'];
                                $hora_min = $records[0]['hora_min_radicar'];
                                $hora_max = $records[0]['hora_max_radicar'];
                                $aplica_fecha = $records[0]['aplica_fecha'];
                                $fecha_min_radicar = $records[0]['fecha_min_radicar'];
                                $fecha_max_radicar = $records[0]['fecha_max_radicar'];

                                //OBTENEMOS hora formato 24 con minutos
                                $ahora = date("H") . ":" . date("i");
                                $hora_actual = strtotime($ahora);
                                if (($aplica_hora == "1")and ( $hora_actual <= strtotime($hora_min) or $hora_actual >= strtotime($hora_max))) {
                                    $status = 1;
                                    $mensaje = "No es posible radicar. El horario para radicar es de $hora_min a $hora_max";
                                } else {
                                    //Validacion de fechas para radicar - 20181206
                                    if ($aplica_fecha == "1") {
                                        $status = 1;
                                        $mensaje = "No es posible radicar. La fecha para radicar es del $fecha_min_radicar al $fecha_max_radicar";
                                    } else {
                                        //Obtenemos el numero de radicado
                                        //where EXTRACT(YEAR from fecha_radicado)=EXTRACT(YEAR FROM sysdate), se quita filtro por año, toma consecutivo - 20200103
                                        $sql = <<<EOD
select nvl(max(numero_radicado),0) as consecutivo from rvc_formato_pago 
EOD;
                                        $records = CN_TABLE::executeSQL($sql);
                                        $numero_radicado = $records[0]['consecutivo'] + 1;
                                        //radicar como contratista
                                        $sql = <<<EOD
update rvc_formato_pago 
set radicado = 1,
fecha_radicado = SYSDATE,numero_radicado=$numero_radicado
where
id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                                        $this->conn->execute($sql);

                                        //Obtenemos el numero de radicado que acabamos de crear
                                        $sql = <<<EOD
Select NUMERO_RADICADO from rvc_formato_pago where id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                                        $records = CN_TABLE::executeSQL($sql);
                                        if (count($records) > 0) {
                                            $response[0] = $records[0];
                                        }
                                        /*
                                         * Pendiente saber a donde se envia correo
                                         */

                                        //construir observacion
                                        $observacion_log = "'Formato de pago radicado del proceso del asunto: " . $subject . "'";

                                        /*
                                         * registro de consulta en tabla de log
                                         */
                                        $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $username, $comando, $observacion_log);
                                    }
                                }
                            }
                        }
                    }
                    break;
                case 5://RECHAZADO
                    //actualizar como rechazado
                    $sql = <<<EOD
update rvc_formato_pago 
set estado = 0,
fecha_estado = SYSDATE,
observaciones_estado = '$observaciones_estado',
usuario_estado = '$usuario_estado',
nivel_rechazo = $tipo_trans                      
where
id_formato_pago = $id_formato_pago
and estado = 1 
EOD;
                    $this->conn->execute($sql);

                    //El envio depende de quien lo rechaze
                    //rechaza contratista: no envio
                    //rechaza apoyo: envio a contratista
                    //rechaza supervisor: envio a contratista, apoyo
                    //rechaza financiera: envio a contratista,apoyo y supervisor
                    //METODO ENVIO DE CORREO
                    if ($tipo_trans != 1) {
                        //Consulta datos envio correo
                        //Sql
                        $sql = <<<EOD
select 
forpa.id_formato_pago,
forpa.id_contrato,
forpa.numero_radicado,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
forpa.OBSERVACIONES_ESTADO as mensaje_extra,
'' as mensaje_firma,
'Se rechaza el contrato '|| con.num_contrato ||' del contratista ' || contra.num_doc || ' ' || contra.razon_social || '.' as mensaje_contra,
--datos de envio
--case when con.id_apoyo_supervisor is not null then terapo.num_doc else tersup.num_doc end as num_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.id_tipo_doc else tersup.id_tipo_doc end as id_tipo_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.razon_soc else tersup.razon_soc end as razon_social_env,
--case when con.id_apoyo_supervisor is not null then apo.correo else sup.correo end as correo_env
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup,
                                
num.descripcion as numero_pago

                            
from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                        //Ejecutar SQL
                        $records = CN_TABLE::executeSQL($sql);

                        $this->logMessage("Envio correo");

                        if (count($records) > 0) {

                            $report_params = $records[0];
                            $id_contrato = $records[0]['id_contrato'];
                            $mensaje_extra = $records[0]['mensaje_extra'];
                            $num_contrato = $records[0]['num_contrato'];
                            $numero_radicado = $records[0]['numero_radicado'];
                            $num_pago = $records[0]['numero_pago'];
                            $num_doc = $records[0]['num_doc'];
                            //DATOS CONTRATISTA
                            //$num_doc_contra = $records[0]['num_doc'];
                            $id_tipo_doc_contra = $records[0]['id_tipo_doc'];
                            $razon_social_contra = $records[0]['razon_social'];
                            $correo_contra = $records[0]['correo'];
                            //DATOS APOYO
                            $num_doc_apo = $records[0]['num_doc_apoyo'];
                            $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                            $razon_social_apo = $records[0]['razon_social_apoyo'];
                            $correo_apo = $records[0]['correo_apoyo'];
                            //DATOS SUPERVISOR
                            $num_doc_sup = $records[0]['num_doc_sup'];
                            $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                            $razon_social_sup = $records[0]['razon_social_sup'];
                            $correo_sup = $records[0]['correo_sup'];
                            //PARAMETROS STANDART
                            $currentUri = '';
                            $ruta = '';
                            $adjunto = false;
                            $progress_key = $request['comando'] . $request['username'];
                            $array_adjuntos = array();
                            $entidad_cliente = $entidadCliente;
                            $entidad_nombre = $entidadNombre;
                            $addAddress = true;
                            switch ($tipo_trans) {
                                CASE 2://Apoyo :Se envia correo al contratista
                                    $datos_usuario = array(
                                        '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                    );
                                    $subject = "Rechazado - Formato Pago por Apoyo Supervisor:" . $num_doc_apo . " del Contrato:" . $num_contrato;
                                    $mensaje = <<<EOD
El formato de pago No. $num_pago del contrato $num_contrato del contratista $num_doc $razon_social_contra, 
fue rechazado por el siguiente motivo:
  
EOD;
                                    $report_params['mensaje'] = $mensaje;

                                    $this->logMessage("Subject: " . $subject);
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);

                                    $this->logMessage("FIN Envio correo Rechazado CASE 2");
                                    break;
                                CASE 3://Supervisor: Se envia correo al apoyo y al contratista

                                    /**
                                     * Se crea un resgistro nuevo segun el anterior en estado pendiente - 20181005
                                     */
                                    //insert como rechazado nuevo como pendiente
                                    $sql = <<<EOD
insert into rvc_formato_pago (ID_FORMATO_PAGO,
ID_ANHOS,
ID_CONTRATISTA,
ID_CONTRATO,
ID_NUMERO_PAGO,
FECHA_INI_PAGO,
FECHA_FIN_PAGO,
FECHA_LOG,
USUARIO_LOG,
VALOR_CONTRATO,
VALOR_MENSUAL,
VALOR_COMISIONES,
VALOR_INGRESOS,
VALOR_IVA,
VALOR_ING_COMISIONES,
VALOR_PAGAR,
VALOR_A_PAGAR,
VALOR_RETENCION,
VALOR_IVA_REG,
VALOR_ICA,
VALOR_TOTAL_RETEN,
NUMERO_PLANILLA,
ID_TIPO_RIESGO,
DIAS_LIQ,
TARIFA_RETEN,
TARIFA_IVA,
TARIFA_ICA,
VALOR_BASE_RETEN,
VALOR_BASE_ICA,
APORTE_SALUD,
APORTE_PENSION,
APORTE_FSP,
APORTE_ARL,
APORTE_VOLUN_AFC,
APORTE_VOLUN_PEN,
VALOR_INTERESES_VIVIENDA,
VALOR_DEPENDIENTES,
VALOR_MEDICINA,
VALOR_EMBARGO,
ADJUNTO_SALUD,
ADJUNTO_PENSION,
ADJUNTO_FSP,
ADJUNTO_ARL,
ADJUNTO_AFC,
ADJUNTO_VOLUNT,
ADJUNTO_VIVIENDA,
ADJUNTO_DEPEN,
ADJUNTO_MEDICINA,
ESTADO,
FECHA_ESTADO,
USUARIO_ESTADO,
OBSERVACIONES_ESTADO,
NIVEL_RECHAZO,
FIRMADO,
FECHA_FIRMADO,
REVISADO,
FECHA_REVISADO,
USUARIO_REVISADO,
OBSERVACION_REV,
AUTORIZADO,
FECHA_AUTORIZADO,
USUARIO_AUTORIZADO,
OBSERVACION_AUT,
RADICADO,
NUMERO_RADICADO,
FECHA_RADICADO,
ADJUNTO_FACTURA,
APROBADO,
FECHA_APROBADO,
USUARIO_APROBADO,
OBSERVACIONES_APROB,
VALOR_DEDUCCION,
ADJUNTO_PLANILLA_OPCIONAL,
ADJUNTO_CERT_SALUD,
VALOR_ICA_EXTRA,
ADJUNTO_ACTA_INICIO,
VALOR_RP_ANM_CONT,
VALOR_RP_SGR_CONT,
VALOR_RP_ANM_DOBLE,
VALOR_RP_SGR_DOBLE,
COTIZA_IBC_DIF,
VALOR_COTIZA_IBC,
APLICA_PLANILLA_APORTES,
FECHA_EXP_MEDICINA,
FECHA_EXP_INT_VIVIENDA,
VALOR_CAJA_COMP,
TARIFA_CAJA_COMP,
ID_FONDO_SALUD,
ID_FONDO_PENSION,
ID_CAJA_COMP,
ID_FONDO_ARL,
ID_TIPO_REGIMEN,
fecha_cert_seguridad_tra,
id_declara_jura_nov,
fecha_consigna_afc,
fecha_consigna_volun_pen,
anho_gravable_int_viv,
anho_gravable_medicina)
                                        
select
null as id_formato_pago,
id_anhos,
id_contratista,
id_contrato,
id_numero_pago,
fecha_ini_pago,
fecha_fin_pago,
trunc(sysdate) fecha_log,
usuario_log,
valor_contrato,
valor_mensual,
valor_comisiones,
valor_ingresos,
valor_iva,
valor_ing_comisiones,
valor_pagar,
valor_a_pagar,
valor_retencion,
valor_iva_reg,
valor_ica,
valor_total_reten,
numero_planilla,
id_tipo_riesgo,
dias_liq,
tarifa_reten,
tarifa_iva,
tarifa_ica,
valor_base_reten,
valor_base_ica,
aporte_salud,
aporte_pension,
aporte_fsp,
aporte_arl,
aporte_volun_afc,
aporte_volun_pen,
valor_intereses_vivienda,
valor_dependientes,
valor_medicina,
valor_embargo,
adjunto_salud,
adjunto_pension,
adjunto_fsp,
adjunto_arl,
adjunto_afc,
adjunto_volunt,
adjunto_vivienda,
adjunto_depen,
adjunto_medicina,
1 as estado,
null as fecha_estado,
null as usuario_estado,
'Se genera automaticamente al rechazar' as observaciones_estado,
null as nivel_rechazo,
0 as firmado,
null as fecha_firmado,
0 as revisado,
null as fecha_revisado,
null as usuario_revisado,
null as observacion_rev,
0 as autorizado,
null as fecha_autorizado,
null as usuario_autorizado,
null as observacion_aut,
0 as radicado,
null as numero_radicado,
null as fecha_radicado,
adjunto_factura,
0 as aprobado,
null as fecha_aprobado,
null as usuario_aprobado,
null as observaciones_aprob,
valor_deduccion,
adjunto_planilla_opcional,
adjunto_cert_salud,
valor_ica_extra,
adjunto_acta_inicio,
valor_rp_anm_cont,
valor_rp_sgr_cont,
valor_rp_anm_doble,
valor_rp_sgr_doble,
cotiza_ibc_dif,
valor_cotiza_ibc,
aplica_planilla_aportes,
fecha_exp_medicina,
fecha_exp_int_vivienda,
valor_caja_comp,
tarifa_caja_comp,
id_fondo_salud,
id_fondo_pension,
id_caja_comp,
id_fondo_arl,
id_tipo_regimen,
fecha_cert_seguridad_tra,
id_declara_jura_nov,
fecha_consigna_afc,
fecha_consigna_volun_pen,
anho_gravable_int_viv,
anho_gravable_medicina

from rvc_formato_pago

where
id_formato_pago = $id_formato_pago 
EOD;
                                    $this->conn->execute($sql);


                                    //Sql traer ultimo formato pago segun contrato
                                    $sql = <<<EOD
SELECT
max(id_formato_pago) as id_formato_pago
FROM rvc_formato_pago
where
id_contrato = $id_contrato
EOD;
                                    //Ejecutar SQL
                                    $records_form = CN_TABLE::executeSQL($sql);

                                    if (count($records_form) > 0) {

                                        $id_formato_pago_nuevo = $records_form[0]['id_formato_pago'];

                                        //insert comision rvc_comision_form_pago
                                        $sql = <<<EOD
insert into rvc_comision_form_pago
select
null as id_comision_form_pago,
$id_formato_pago_nuevo as id_formato_pago,
sgr,
id_rp_comis,
id_vigencia,
vigencia,
resolucion,
nitocc,
valor

from rvc_comision_form_pago

where
id_formato_pago = $id_formato_pago 
EOD;
                                        $this->conn->execute($sql);

                                        //insert obligaciones rvc_actividad_obligacion
                                        $sql = <<<EOD
insert into rvc_actividad_obligacion
select
null as id_actividad_obligacion,
$id_formato_pago_nuevo as id_formato_pago,
orden,
descripcion,
fecha_log,
usuario_log,
adjunto_anexo_actividades

from rvc_actividad_obligacion

where
id_formato_pago = $id_formato_pago 
EOD;
                                        $this->conn->execute($sql);

                                        //insert acciones rvc_actividad_accion
                                        $sql = <<<EOD
insert into rvc_actividad_accion
select
null as id_actividad_accion,
(
    select max(act2.id_actividad_obligacion )
    from rvc_actividad_obligacion act2
    where
    act2.id_formato_pago = $id_formato_pago_nuevo  
    and act2.orden in (
        select max(act.orden )
        from rvc_actividad_obligacion act
        where
        act.id_actividad_obligacion = tab0.id_actividad_obligacion
    )
) as id_actividad_obligacion,

tab0.orden,
tab0.descripcion,
tab0.fecha_log,
tab0.usuario_log

from rvc_actividad_accion tab0

where
id_actividad_obligacion in (
    SELECT
    id_actividad_obligacion
    from rvc_actividad_obligacion
    where
    id_formato_pago = $id_formato_pago  
) 
EOD;
                                        $this->conn->execute($sql);
                                    }

                                    //FIN nuevo formato pago en pendiente

                                    $subject = "Rechazado - Formato Pago por Supervisor:" . $num_doc_sup . " del Contrato:" . $num_contrato;
                                    $mensaje = <<<EOD
El formato de pago No. $num_pago del contrato $num_contrato del contratista $num_doc $razon_social_contra, 
fue rechazado por el siguiente motivo y se genero un nuevo formato de pago No. $num_pago para la corrección de las inconformidades:
  
EOD;
                                    $report_params['mensaje'] = $mensaje;
                                    //ENVIAMOS CORREO A CONTRTISTA
                                    $datos_usuario = array(
                                        '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                    );

                                    $this->logMessage("Envio Contratista: " . $num_doc);
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                    //ENVIAMOS CORREO A APOYO
                                    if ($num_doc_apo != '') {
                                        $datos_usuario = array(
                                            '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo . ';' . $mensaje_extra
                                        );

                                        $this->logMessage("Envio Apoyo: " . $num_doc_apo);
                                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                    }
                                    //ENVIAMOS CORREO A Supervisor - 20180620
                                    $datos_usuario = array(
                                        '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra
                                    );

                                    $this->logMessage("Envio supervisor: " . $num_doc_sup);
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);

                                    $this->logMessage("FIN Envio correo Rechazado CASE 3");
                                    break;
                                CASE 4://Financiera: Se envia correo a supervisor,apoyo y contratista 
                                    //Comprobado select

                                    /**
                                     * Se crea un resgistro nuevo segun el anterior en estado pendiente - 20181005
                                     */
                                    //insert como rechazado nuevo como pendiente
                                    $sql = <<<EOD
insert into rvc_formato_pago (ID_FORMATO_PAGO,
ID_ANHOS,
ID_CONTRATISTA,
ID_CONTRATO,
ID_NUMERO_PAGO,
FECHA_INI_PAGO,
FECHA_FIN_PAGO,
FECHA_LOG,
USUARIO_LOG,
VALOR_CONTRATO,
VALOR_MENSUAL,
VALOR_COMISIONES,
VALOR_INGRESOS,
VALOR_IVA,
VALOR_ING_COMISIONES,
VALOR_PAGAR,
VALOR_A_PAGAR,
VALOR_RETENCION,
VALOR_IVA_REG,
VALOR_ICA,
VALOR_TOTAL_RETEN,
NUMERO_PLANILLA,
ID_TIPO_RIESGO,
DIAS_LIQ,
TARIFA_RETEN,
TARIFA_IVA,
TARIFA_ICA,
VALOR_BASE_RETEN,
VALOR_BASE_ICA,
APORTE_SALUD,
APORTE_PENSION,
APORTE_FSP,
APORTE_ARL,
APORTE_VOLUN_AFC,
APORTE_VOLUN_PEN,
VALOR_INTERESES_VIVIENDA,
VALOR_DEPENDIENTES,
VALOR_MEDICINA,
VALOR_EMBARGO,
ADJUNTO_SALUD,
ADJUNTO_PENSION,
ADJUNTO_FSP,
ADJUNTO_ARL,
ADJUNTO_AFC,
ADJUNTO_VOLUNT,
ADJUNTO_VIVIENDA,
ADJUNTO_DEPEN,
ADJUNTO_MEDICINA,
ESTADO,
FECHA_ESTADO,
USUARIO_ESTADO,
OBSERVACIONES_ESTADO,
NIVEL_RECHAZO,
FIRMADO,
FECHA_FIRMADO,
REVISADO,
FECHA_REVISADO,
USUARIO_REVISADO,
OBSERVACION_REV,
AUTORIZADO,
FECHA_AUTORIZADO,
USUARIO_AUTORIZADO,
OBSERVACION_AUT,
RADICADO,
NUMERO_RADICADO,
FECHA_RADICADO,
ADJUNTO_FACTURA,
APROBADO,
FECHA_APROBADO,
USUARIO_APROBADO,
OBSERVACIONES_APROB,
VALOR_DEDUCCION,
ADJUNTO_PLANILLA_OPCIONAL,
ADJUNTO_CERT_SALUD,
VALOR_ICA_EXTRA,
ADJUNTO_ACTA_INICIO,
VALOR_RP_ANM_CONT,
VALOR_RP_SGR_CONT,
VALOR_RP_ANM_DOBLE,
VALOR_RP_SGR_DOBLE,
COTIZA_IBC_DIF,
VALOR_COTIZA_IBC,
APLICA_PLANILLA_APORTES,
FECHA_EXP_MEDICINA,
FECHA_EXP_INT_VIVIENDA,
VALOR_CAJA_COMP,
TARIFA_CAJA_COMP,
ID_FONDO_SALUD,
ID_FONDO_PENSION,
ID_CAJA_COMP,
ID_FONDO_ARL,
ID_TIPO_REGIMEN,
fecha_cert_seguridad_tra,
id_declara_jura_nov,
fecha_consigna_afc,
fecha_consigna_volun_pen,
anho_gravable_int_viv,
anho_gravable_medicina)
                                        
select
null as id_formato_pago,
id_anhos,
id_contratista,
id_contrato,
id_numero_pago,
fecha_ini_pago,
fecha_fin_pago,
trunc(sysdate) fecha_log,
usuario_log,
valor_contrato,
valor_mensual,
valor_comisiones,
valor_ingresos,
valor_iva,
valor_ing_comisiones,
valor_pagar,
valor_a_pagar,
valor_retencion,
valor_iva_reg,
valor_ica,
valor_total_reten,
numero_planilla,
id_tipo_riesgo,
dias_liq,
tarifa_reten,
tarifa_iva,
tarifa_ica,
valor_base_reten,
valor_base_ica,
aporte_salud,
aporte_pension,
aporte_fsp,
aporte_arl,
aporte_volun_afc,
aporte_volun_pen,
valor_intereses_vivienda,
valor_dependientes,
valor_medicina,
valor_embargo,
adjunto_salud,
adjunto_pension,
adjunto_fsp,
adjunto_arl,
adjunto_afc,
adjunto_volunt,
adjunto_vivienda,
adjunto_depen,
adjunto_medicina,
1 as estado,
null as fecha_estado,
null as usuario_estado,
'Se genera automaticamente al rechazar' as observaciones_estado,
null as nivel_rechazo,
0 as firmado,
null as fecha_firmado,
0 as revisado,
null as fecha_revisado,
null as usuario_revisado,
null as observacion_rev,
0 as autorizado,
null as fecha_autorizado,
null as usuario_autorizado,
null as observacion_aut,
0 as radicado,
null as numero_radicado,
null as fecha_radicado,
adjunto_factura,
0 as aprobado,
null as fecha_aprobado,
null as usuario_aprobado,
null as observaciones_aprob,
valor_deduccion,
adjunto_planilla_opcional,
adjunto_cert_salud,
valor_ica_extra,
adjunto_acta_inicio,
valor_rp_anm_cont,
valor_rp_sgr_cont,
valor_rp_anm_doble,
valor_rp_sgr_doble,
cotiza_ibc_dif,
valor_cotiza_ibc,
aplica_planilla_aportes,
fecha_exp_medicina,
fecha_exp_int_vivienda,
valor_caja_comp,
tarifa_caja_comp,
id_fondo_salud,
id_fondo_pension,
id_caja_comp,
id_fondo_arl,
id_tipo_regimen,
fecha_cert_seguridad_tra,
id_declara_jura_nov,
fecha_consigna_afc,
fecha_consigna_volun_pen,
anho_gravable_int_viv,
anho_gravable_medicina

from rvc_formato_pago

where
id_formato_pago = $id_formato_pago 
EOD;
                                    $this->conn->execute($sql);


                                    //Sql traer ultimo formato pago segun contrato
                                    $sql = <<<EOD
SELECT
max(id_formato_pago) as id_formato_pago
FROM rvc_formato_pago
where
id_contrato = $id_contrato
EOD;
                                    //Ejecutar SQL
                                    $records_form = CN_TABLE::executeSQL($sql);

                                    if (count($records_form) > 0) {

                                        $id_formato_pago_nuevo = $records_form[0]['id_formato_pago'];

                                        //insert comision rvc_comision_form_pago
                                        $sql = <<<EOD
insert into rvc_comision_form_pago
select
null as id_comision_form_pago,
$id_formato_pago_nuevo as id_formato_pago,
sgr,
id_rp_comis,
id_vigencia,
vigencia,
resolucion,
nitocc,
valor

from rvc_comision_form_pago

where
id_formato_pago = $id_formato_pago 
EOD;
                                        $this->conn->execute($sql);

                                        //insert obligaciones rvc_actividad_obligacion
                                        $sql = <<<EOD
insert into rvc_actividad_obligacion
select
null as id_actividad_obligacion,
$id_formato_pago_nuevo as id_formato_pago,
orden,
descripcion,
fecha_log,
usuario_log,
adjunto_anexo_actividades

from rvc_actividad_obligacion

where
id_formato_pago = $id_formato_pago 
EOD;
                                        $this->conn->execute($sql);

                                        //insert acciones rvc_actividad_accion
                                        $sql = <<<EOD
insert into rvc_actividad_accion
select
null as id_actividad_accion,
(
    select max(act2.id_actividad_obligacion )
    from rvc_actividad_obligacion act2
    where
    act2.id_formato_pago = $id_formato_pago_nuevo  
    and act2.orden in (
        select max(act.orden )
        from rvc_actividad_obligacion act
        where
        act.id_actividad_obligacion = tab0.id_actividad_obligacion
    )
) as id_actividad_obligacion,

tab0.orden,
tab0.descripcion,
tab0.fecha_log,
tab0.usuario_log

from rvc_actividad_accion tab0

where
id_actividad_obligacion in (
    SELECT
    id_actividad_obligacion
    from rvc_actividad_obligacion
    where
    id_formato_pago = $id_formato_pago  
) 
EOD;
                                        $this->conn->execute($sql);
                                    }

                                    //FIN nuevo formato pago en pendiente

                                    $subject = "Rechazado - Formato Pago por Financiera del Contrato:" . $num_contrato;
                                    $mensaje = <<<EOD
El formato de pago No. $num_pago del contrato $num_contrato del contratista $num_doc $razon_social_contra,  
fue rechazado por el siguiente motivo y se genero un nuevo formato de pago No. $num_pago para la corrección de las inconformidades:
  
EOD;
                                    $report_params['mensaje'] = $mensaje;
                                    //ENVIAMOS CORREO A Supervisor
                                    $datos_usuario = array(
                                        '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra
                                    );

                                    $this->logMessage("Envio supervisor: " . $num_doc_sup);
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                    //ENVIAMOS CORREO A APOYO
                                    if ($num_doc_apo != '') {
                                        $datos_usuario = array(
                                            '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo . ';' . $mensaje_extra
                                        );

                                        $this->logMessage("Envio Apoyo: " . $num_doc_apo);
                                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                    }
                                    //ENVIO CORREO AL CONTRATISTA
                                    $mensaje = <<<EOD
Su formato de pago No. $num_pago del contrato $num_contrato con número de radicado $numero_radicado, fue rechazado por el siguiente motivo: 

EOD;
                                    $report_params['mensaje'] = $mensaje;
                                    $datos_usuario = array(
                                        '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                    );

                                    $this->logMessage("Envio Contratista: " . $num_doc);
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                    $this->logMessage("FIN Envio correo Rechazado CASE 4");

                                    break;
                                default :
                                    break;
                            }
                        }

                        $this->logMessage("FIN Envio correo Rechazado");
                    }

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

                    //construir observacion
                    $observacion_log = "'Formato de pago rechazado por proceso del asunto: " . $subject . "'";

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


                    break;
                case 6://APROBADO
                    //actualizar como contratista
                    $sql = <<<EOD
update rvc_formato_pago 
set aprobado = 1,
fecha_aprobado = SYSDATE,
observaciones_aprob = '$observaciones_estado',
usuario_aprobado = '$usuario_estado'                        
where
id_formato_pago = $id_formato_pago
and estado = 1
EOD;
                    $this->conn->execute($sql);
                    /**
                     * Se inactiva el contrato solo en caso de que sea ultimo pago
                     * se inactiva el contratista
                     * se crea declaracion juramentda de dependientes sin dependientes
                     */
                    //Consulta si devuelve que es el ultimo pago del contrato
                    $sql = <<<EOD
SELECT
tab0.id_contrato,
tab0.fecha_fin_pago,
tab1.fecha_fin,
case when  tab0.fecha_fin_pago >= tab1.fecha_fin then 1 else 0 end as ultimo_pago
FROM rvc_formato_pago tab0
left join rvc_contrato tab1 on tab0.id_contrato = tab1.id_contrato
where
tab0.id_formato_pago = $id_formato_pago
EOD;
                    //ejecuta y obtiene el resultado del sql
                    $records = CN_TABLE::executeSQL($sql);
                    //Si es ultimo pago Se inactiva el contrato
                    if ($records[0]['ultimo_pago'] == "1") {
                        $id_contrato = $records[0]['id_contrato'];
                        //INACTIVAMOS CONTRATO
                        $sql = <<<EOD
update rvc_contrato 
set estado = 0
where
id_contrato = $id_contrato
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Se inactivo el contrato $id_contrato");
                        //INACTIVAMOS CONTRATISTA
                        $sql = <<<EOD
update rvc_contratista 
set estado = 0
where
id_contratista = (select id_contratista from rvc_contrato where id_contrato = $id_contrato)
EOD;
                        $this->conn->execute($sql);
                        $observacion_log = "Se Inactivo el contratista del contrato: ".$id_contrato;
                        $this->logMessage($observacion_log);
                        //$sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $username, $comando, $observacion_log);
    
                        //Creamos registro de dependientes para indicar que no tiene dependientes y actualizamos estado dependinetes
                        $sql = <<<EOD
INSERT INTO RVC_DECLARA_JURA_NOV 
(ID_CONTRATISTA,
FECHA,
DEPENDIENTE,
ID_TIPO_CONDICIONES,
NUMERO_DOC,
FECHA_DOC,
OBSERVACIONES,
USUARIO_LOG,
FECHA_LOG,
FIRMADO,
FECHA_FIRMADO,
ADJUNTO_FIRMADO)
VALUES
((select id_contratista from rvc_contrato where id_contrato = $id_contrato),
    sysdate,
    0,
    null,
    null,
    null,
    'Registro Creado por finalizacion del contrato id $id_contrato',
     '$usuario_estado',
     sysdate,
     1,
     sysdate,
     null
    )
EOD;
                        $this->conn->execute($sql);
                        //Deshabilitamos Dependinetes del contratista
                        $this->logMessage("Se creo registro de dependiente para el contratista del contrato $id_contrato");
                        $sql = <<<EOD
update rvc_contratista 
set dependiente = 0
where
id_contratista = (select id_contratista from rvc_contrato where id_contrato = $id_contrato)
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Se desmarco dependiente para el contratista del contrato $id_contrato");
                    }
                    
                    //Fin inactivacion de contrato
                    /**
                     * Envio correo al apoyo si tiene, sino al supervisor
                     * Se evnia al contratista y al apoyo si tiene - 20180829
                     */
                    $this->logMessage("Envio correo al apoyo si tiene, sino al supervisor");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
select 
forpa.id_formato_pago,
forpa.numero_radicado,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'Observacion: '||forpa.OBSERVACIONES_APROB as mensaje_extra,
'' as mensaje_firma,
'Su formato de pago No. '||num.descripcion||' del contrato '||con.num_contrato||' con el Número Radicado '|| forpa.numero_radicado ||' fue aprobado exitosamente.' as mensaje,
--datos de envio
case when con.id_apoyo_supervisor is not null then terapo.num_doc else tersup.num_doc end as num_doc_env,
case when con.id_apoyo_supervisor is not null then terapo.id_tipo_doc else tersup.id_tipo_doc end as id_tipo_doc_env,
case when con.id_apoyo_supervisor is not null then terapo.razon_soc else tersup.razon_soc end as razon_social_env,
case when con.id_apoyo_supervisor is not null then apo.correo else sup.correo end as correo_env,
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup
                            
from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

                    $this->logMessage("Envio correo aprobacion");

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $mensaje_extra = $records[0]['mensaje_extra'];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];
                        $numero_radicado = $records[0]['numero_radicado'];

                        //DATOS CONTRATISTA
                        //$num_doc_contra = $records[0]['num_doc'];
                        $id_tipo_doc_contra = $records[0]['id_tipo_doc'];
                        $razon_social_contra = $records[0]['razon_social'];
                        $correo_contra = $records[0]['correo'];
                        //DATOS APOYO
                        $num_doc_apo = $records[0]['num_doc_apoyo'];
                        $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                        $razon_social_apo = $records[0]['razon_social_apoyo'];
                        $correo_apo = $records[0]['correo_apoyo'];
                        //DATOS SUPERVISOR
                        $num_doc_sup = $records[0]['num_doc_sup'];
                        $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                        $razon_social_sup = $records[0]['razon_social_sup'];
                        $correo_sup = $records[0]['correo_sup'];
                        //PARAMETROS STANDART
                        $currentUri = '';
                        $ruta = '';
                        $adjunto = false;
                        $progress_key = $request['comando'] . $request['username'];
                        $array_adjuntos = array();
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = true;

                        $subject = "Aprobado - Formato Pago por Contratista:" . $num_doc . " del Contrato:" . $num_contrato;
                        //ENVIAMOS CORREO A Supervisor
                        $datos_usuario = array(
                            '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra
                        );

                        $this->logMessage("Envio supervisor: " . $num_doc_sup);
                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        //ENVIAMOS CORREO A APOYO
                        if ($num_doc_apo != '') {
                            $datos_usuario = array(
                                '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo . ';' . $mensaje_extra
                            );

                            $this->logMessage("Envio Apoyo: " . $num_doc_apo);
                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        }
                        //ENVIO CORREO AL CONTRATISTA
                        $datos_usuario = array(
                            '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                        );

                        $this->logMessage("Envio Contratista: " . $num_doc);

                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                    }

                    $this->logMessage("FIN Envio correo aprobacion");

                    //construir observacion
                    $observacion_log = "'Formato de pago aprobado del proceso del asunto: " . $subject . "'";

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


                    break;

                case 7://REACTIVACION - 20180705
                    //20190912 Se valida que no exista un formato de pago activo para el contrato
                    //con el mismo numero de pago para poder reactivar ticket 13331
                    $num_pago = $request['id_numero_pago'];
                    $sql = <<<EOD
Select * 
from RVC_FORMATO_PAGO_V 
where estado_general <> 0 and id_numero_pago = $num_pago 
and id_contrato = (select id_contrato from rvc_formato_pago where id_formato_pago = $id_formato_pago)
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    if (count($records) > 0) {
                        $status = 1;
                        $mensaje = "No es posible reactivar el formato. Ya existe el formato de pago numero $num_pago para el contrato y se encuentra activo.";
                    } else {
                        //Crear registro de novedad de reactivacion
                        $sql = <<<EOD
insert into rvc_formato_reactivacion
select 
null as id_formato_reactivacion,
id_formato_pago as id_formato_pago,
estado as estado,
fecha_estado as fecha_estado,
usuario_estado as usuario_estado,
observaciones_estado as observaciones_estado,
nivel_rechazo as nivel_rechazo,
1 as reactivacion,
sysdate as fecha_reactivacion,
'$usuario_estado' as usuario_reactivacion,
'$observaciones_estado' as observaciones_reactivacion 

from rvc_formato_pago

where
id_formato_pago = $id_formato_pago
and estado = 0 
EOD;
                        $this->conn->execute($sql);

                        //actualizar como activo
                        $sql = <<<EOD
update rvc_formato_pago 
set estado = 1,
fecha_estado = null,
observaciones_estado = '',
usuario_estado = '',
nivel_rechazo = null
where
id_formato_pago = $id_formato_pago
and estado = 0 
EOD;
                        $this->conn->execute($sql);

                        //METODO ENVIO DE CORREO
                        if ($tipo_trans != 1) {
                            //Consulta datos envio correo
                            //Sql
                            $sql = <<<EOD
select 
forpa.id_formato_pago,
forpa.numero_radicado,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'$observaciones_estado' as mensaje_extra,
'' as mensaje_firma,
'Se rechaza el contrato '|| con.num_contrato ||' del contratista ' || contra.num_doc || ' ' || contra.razon_social || '.' as mensaje_contra,
--datos de envio
--case when con.id_apoyo_supervisor is not null then terapo.num_doc else tersup.num_doc end as num_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.id_tipo_doc else tersup.id_tipo_doc end as id_tipo_doc_env,
--case when con.id_apoyo_supervisor is not null then terapo.razon_soc else tersup.razon_soc end as razon_social_env,
--case when con.id_apoyo_supervisor is not null then apo.correo else sup.correo end as correo_env
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup,
                                
num.descripcion as numero_pago

                            
from rvc_formato_pago forpa

left join rvc_numero_pago num
on num.id_numero_pago = forpa.id_numero_pago

left join rvc_contrato con
on forpa.id_contrato = con.id_contrato

left join rvc_contratista contra
on con.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on con.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on con.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
forpa.id_formato_pago = $id_formato_pago 
EOD;
                            //Ejecutar SQL
                            $records = CN_TABLE::executeSQL($sql);

                            $this->logMessage("Envio correo");

                            if (count($records) > 0) {

                                $report_params = $records[0];
                                $mensaje_extra = $records[0]['mensaje_extra'];
                                $num_contrato = $records[0]['num_contrato'];
                                $numero_radicado = $records[0]['numero_radicado'];
                                $num_pago = $records[0]['numero_pago'];
                                $num_doc = $records[0]['num_doc'];
                                //DATOS CONTRATISTA
                                //$num_doc_contra = $records[0]['num_doc'];
                                $id_tipo_doc_contra = $records[0]['id_tipo_doc'];
                                $razon_social_contra = $records[0]['razon_social'];
                                $correo_contra = $records[0]['correo'];
                                //DATOS APOYO
                                $num_doc_apo = $records[0]['num_doc_apoyo'];
                                $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                                $razon_social_apo = $records[0]['razon_social_apoyo'];
                                $correo_apo = $records[0]['correo_apoyo'];
                                //DATOS SUPERVISOR
                                $num_doc_sup = $records[0]['num_doc_sup'];
                                $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                                $razon_social_sup = $records[0]['razon_social_sup'];
                                $correo_sup = $records[0]['correo_sup'];
                                //PARAMETROS STANDART
                                $currentUri = '';
                                $ruta = '';
                                $adjunto = false;
                                $progress_key = $request['comando'] . $request['username'];
                                $array_adjuntos = array();
                                $entidad_cliente = $entidadCliente;
                                $entidad_nombre = $entidadNombre;
                                $addAddress = true;
                                switch ($tipo_trans) {
                                    CASE 4://Financiera: Se envia correo a supervisor,apoyo y contratista
                                        $subject = "Reactivacion - Formato Pago por Financiera del Contrato:" . $num_contrato;
                                        $mensaje = <<<EOD
El formato de pago No. $num_pago del contrato $num_contrato del contratista $num_doc $razon_social_contra, 
fue reactivado por el siguiente motivo:
  
EOD;
                                        $report_params['mensaje'] = $mensaje;
                                        //ENVIAMOS CORREO A Supervisor
                                        $datos_usuario = array(
                                            '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra
                                        );

                                        $this->logMessage("Envio supervisor: " . $num_doc_sup);
                                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                        //ENVIAMOS CORREO A APOYO
                                        if ($num_doc_apo != '') {
                                            $datos_usuario = array(
                                                '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo . ';' . $mensaje_extra
                                            );

                                            $this->logMessage("Envio Apoyo: " . $num_doc_apo);
                                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                        }
                                        //ENVIO CORREO AL CONTRATISTA
                                        $mensaje = <<<EOD
Su formato de pago No. $num_pago del contrato $num_contrato con número de radicado $numero_radicado, fue reactivado por el siguiente motivo: 

EOD;
                                        $report_params['mensaje'] = $mensaje;
                                        $datos_usuario = array(
                                            '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                        );

                                        $this->logMessage("Envio Contratista: " . $num_doc);
                                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                        $this->logMessage("FIN Envio correo Reactivado CASE 4");
                                        break;
                                    default :
                                        break;
                                }
                            }

                            $this->logMessage("FIN Envio correo Reactivado");
                        }

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

                        //construir observacion
                        $observacion_log = "'Formato de pago reactivado por proceso del asunto: " . $subject . "'";

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

                    break;
                case 8://APROBACION MASIVA  - 20190521
                    $this->logMessage("ENTRO aprobacion masiva");
                    $observaciones_estado = "Aprobacion Masiva ".CN_TABLE::fechaSistema().": ".$observaciones_estado;
                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];
                    if(isset($request['fecha_ini']) && isset($request['fecha_fin'])){
                        //Actualizamos todos los formato de pago radicados en las fechas inicadas
                        $sql = <<<EOD
update rvc_formato_pago 
set aprobado = 1,
fecha_aprobado = SYSDATE,
observaciones_aprob = '$observaciones_estado',
usuario_aprobado = '$usuario_estado'                        
where
id_formato_pago in (
    select id_formato_pago 
    from rvc_formato_pago 
    where aprobado=0 
    and( trunc(fecha_radicado) >= to_date('$fecha_ini','yyyy-mm-dd') and trunc(fecha_radicado) <= to_date('$fecha_fin','yyyy-mm-dd')))
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Ejecuto aprobacion masiva");
                        //Procedemos a revisar si aplica cerrar contrato de algunos de los pagos aprobados masivamente
                        $sql = <<<EOD
update rvc_contrato 
set estado = 0 
where id_contrato in 
(select tab1.id_contrato 
from rvc_formato_pago tab0
join rvc_contrato tab1 on tab1.id_contrato = tab0.id_contrato and tab1.estado=1 and tab0.fecha_fin_pago>=tab1.fecha_fin
where id_formato_pago in (select id_formato_pago 
from rvc_formato_pago 
where observaciones_aprob = '$observaciones_estado'))
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Inactivo contratos a los que se les aprobo el ultimo pago");
                        //INACTIVAMOS CONTRATISTA
                        $sql = <<<EOD
update rvc_contratista 
set estado = 0
where
id_contratista in (select id_contratista from rvc_contrato where id_contrato in (select tab1.id_contrato 
from rvc_formato_pago tab0
join rvc_contrato tab1 on tab1.id_contrato = tab0.id_contrato and tab1.estado=1 and tab0.fecha_fin_pago>=tab1.fecha_fin
where id_formato_pago in (select id_formato_pago 
from rvc_formato_pago 
where observaciones_aprob = '$observaciones_estado')))
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Inactivo contratitas a los que se les aprobo el ultimo pago");
    
                        //Creamos registro de dependientes para indicar que no tiene dependientes y actualizamos estado dependinetes
                        $sql = <<<EOD
INSERT INTO RVC_DECLARA_JURA_NOV 
(ID_CONTRATISTA,
FECHA,
DEPENDIENTE,
ID_TIPO_CONDICIONES,
NUMERO_DOC,
FECHA_DOC,
OBSERVACIONES,
USUARIO_LOG,
FECHA_LOG,
FIRMADO,
FECHA_FIRMADO,
ADJUNTO_FIRMADO)
select id_contratista,
    sysdate,
    0,
    null,
    null,
    null,
    'Registro Creado por finalizacion del contrato id $id_contrato',
     '$usuario_estado',
     sysdate,
     1,
     sysdate,
     null
    from rvc_contrato where id_contrato in (select tab1.id_contrato 
from rvc_formato_pago tab0
join rvc_contrato tab1 on tab1.id_contrato = tab0.id_contrato and tab1.estado=1 and tab0.fecha_fin_pago>=tab1.fecha_fin
where id_formato_pago in (select id_formato_pago 
from rvc_formato_pago 
where observaciones_aprob = '$observaciones_estado'))
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Se creo declaracion jurada de dependientes a los contratistas que se les aprobo el ultimo pago");
                        //Deshabilitamos Dependinetes del contratista
                        $sql = <<<EOD
update rvc_contratista 
set dependiente = 0
where
id_contratista IN (select id_contratista from rvc_contrato where id_contrato in (select tab1.id_contrato 
from rvc_formato_pago tab0
join rvc_contrato tab1 on tab1.id_contrato = tab0.id_contrato and tab1.estado=1 and tab0.fecha_fin_pago>=tab1.fecha_fin
where id_formato_pago in (select id_formato_pago 
from rvc_formato_pago 
where observaciones_aprob = '$observaciones_estado')))
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Se marco como sin dependiente a los contratistas que se les aprobo el ultimo pago");
                    }else{
                        $status = 1;
                        $mensaje = "No es posible aprobar masivamente. Falta alguno de estos parametros(fecha radicado desde, fecha radicado hasta).";
                    }
                    $this->logMessage("FIN aprobacion masiva");
                    break;
                default:
                    break;
            }


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            if ($status == 0) {
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = $response;
                $this->logMessage("[formato_pago_contratista] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[formato_pago_contratista] ERROR!");
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {

            //Se cambia para que no devuelva el error de SQL o PHP, sino solo lo ponga en el log - 20190219
            $mensaje = "ERROR Excepciones en la ejecución !!!";
            
            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[formato_pago_contratista] Ocurrio un error: " . $mensaje;
            $this->list_data = array();
            $this->logMessage("[formato_pago_contratista] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
