<?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',
        'RVC_ACTIVIDAD_CIIU',
        'RVC_AGRUP_CIIU',
        'USUARIO',
        'RVC_NOVEDAD_SUPR_APOY_V'//Incidente #31748, adjunto de supervisor - 20230105::LAVILA
    ); //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'
        ),
        'RVC_ACTIVIDAD_CIIU,LEFT' =>
        array(
            'id_actividad_ciiu' => 'RVC_CONTRATISTA'
        ),
        'RVC_AGRUP_CIIU,LEFT' =>
        array(
            'id_agrup_ciiu' => 'RVC_ACTIVIDAD_CIIU'
        ),
        'USUARIO,LEFT' =>
        array(
            'usuario_asignado-username' => 'RVC_FORMATO_PAGO_V'
        ),
        'RVC_NOVEDAD_SUPR_APOY_V,LEFT' =>
        array(
            'id_contrato' => 'RVC_CONTRATO_V',
            'rn=1' => 'CONDITION'
        )
    ); //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_anhos' => 'id_anhos_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',
            'iva_comisiones' => 'iva_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',
            'asignado' => 'asignado',
            'fecha_asignado' => 'fecha_asignado',
            'usuario_asignado' => 'usuario_asignado',
            'obligado' => 'obligado',
            'fecha_obligado' => 'fecha_obligado',
            'usuario_obligado' => 'usuario_obligado',
            'cargasiif' => 'cargasiif',
            'fecha_cargasiif' => 'fecha_cargasiif',
            'usuario_cargasiif' => 'usuario_cargasiif',
            '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',
            'aplica_pension_menor' => 'aplica_pension_menor',
            'aplica_aporte_solidario' => 'aplica_aporte_solidario',
            'valor_aporte_solidario' => 'valor_aporte_solidario',
            'valor_otra_entidad' => 'valor_otra_entidad',
            'base_aporte_solidario' => 'base_aporte_solidario',
            'adjunto_otra_entidad' => 'adjunto_otra_entidad',
            'tarifa_estampilla' => 'tarifa_estampilla',
            'valor_estampilla' => 'valor_estampilla',
            'valor_base_estampilla' => 'valor_base_estampilla',
            'id_tipo_seg_social' => 'id_tipo_seg_social',
            'tipo_seg_social' => 'tipo_seg_social',
            'valor_renta_excenta_25' => 'valor_renta_excenta_25',
            'cifra_control_40' => 'cifra_control_40',
            'adjunto_otros' => 'adjunto_otros',
            'numero_facturas' => 'numero_facturas'
        ),
        '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',
            'id_tipo_novedad_cont' => 'id_tipo_novedad_cont',
            'id_co_contrato' => 'id_co_contrato',
            //Valor de AFC por contratista - 20210514
            'valor_deducido_afc' => 'valor_deducido_afc',
            'valor_deducido_afc_aplica' => 'valor_deducido_afc_aplica',
            'nombre_afc' => 'nombre_afc',
            //Campos para estampilla - 20210601
            'aplica_estampilla' => 'aplica_estampilla',
            'valor_primer_pago' => 'valor_primer_pago'
        ),
        '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',
            'id_actividad_ciiu' => 'id_actividad_ciiu',
            'id_dian_actividad' => 'id_dian_actividad'
        ),
        'RVC_TIPO_REGIMEN' =>
        array(
            'descripcion' => 'tipo_regimen',
            'aplica_iva' => 'aplica_iva',
            'aplica_descuento' => 'aplica_descuento'
        ),
        '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',
        ),
        'RVC_ACTIVIDAD_CIIU' =>
        array(
            'codigo_ciiu' => 'codigo_ciiu',
            'descripcion' => 'descripcion',
            'tarifa_por_mil' => 'tarifa_por_mil'
        ),
        'USUARIO' =>
        array(
            'nombre,||,  ,||,apellido' => 'nom_usuario_asignado',
        ),
        'RVC_NOVEDAD_SUPR_APOY_V' =>
        array(
            'adjunto' => 'adjunto_nov_supapo',
            'fecha_ini_supr' => 'fecha_ini_supr',
            'fecha_fin_supr' => 'fecha_fin_supr'
        )
    ); //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')),
            'asignado' => array('=' => array('asignado')),
            'cargasiif' => array('=' => array('cargasiif')),
            'obligado' => array('=' => array('obligado')),
            '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')),
            'usuario_asignado' => array('=' => array('usuario_asignado')),
            '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')),
            'tipo_recurso' => array('=' => array('tipo_recurso'))
        )
    ); //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')),
            'id_contratista' => array('=' => array('id_contratista_aux'))
        )
    ); // 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', 'iva_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',
        'aplica_pension_menor', 'aplica_aporte_solidario', 'valor_aporte_solidario', 'valor_otra_entidad', 'base_aporte_solidario', 'adjunto_otra_entidad',
        'tarifa_estampilla', 'valor_estampilla', 'valor_base_estampilla', 'id_tipo_seg_social', 'valor_renta_excenta_25', 'cifra_control_40',
        'adjunto_otros', 'numero_facturas'); //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";
        }
        /*
         * Validar Para formatos de Pago mayo, junio y julio el contratista tenga registrado Declaracion Otra Contrato
         * Se quita la validacion - 20200814::LAVILA
         */
//        $meses_aplica = array(5,6,7);
//        $mes_fecha_ini_pago = date_create($request['fecha_ini_pago'])->format('m');
//        $mes_fecha_fin_pago = date_create($request['fecha_fin_pago'])->format('m');
//        if(in_array($mes_fecha_ini_pago, $meses_aplica) && in_array($mes_fecha_fin_pago, $meses_aplica)){
//            $sql = <<<EOD
//                select count(*) as cantidad from RVC_DECLARA_OTRA_ENTID
//                where id_contratista = $id_contratista
//EOD;
//            $records = CN_TABLE::executeSQL($sql);
//            $declaraciones = $records[0]['cantidad'];
//            if ($declaraciones == 0) {
//                $errors['mensaje'] = "El contratista no tiene registrada una declaración juramentada otra entidad";
//                $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_contratista = $list_data_post[0]['id_contratista'];
                //20200930 Obtenemos datos del contratista a guardar en el formato de pago
                $sql = <<<EOD
update RVC_FORMATO_PAGO 
    set (ADJUNTO_RUT_CONTRA,
  ADJUNTO_PENSIONADO_CONTRA,
  ADJUNTO_ARL_CONTRA,
  ADJUNTO_CAJA_COMP_CONTRA,
  ADJUNTO_FONDO_SALUD_CONTRA,
  ADJUNTO_FONDO_PENSION_CONTRA,
  fecha_genera_rut_CONTRA,
  id_ciudad,
  ID_ACTIVIDAD_CIIU,
  ID_DIAN_ACTIVIDAD,
  ID_DEDUC_VOLUN,
  RESPONSABLE_FACT_ELECT)= (select ADJUNTO_RUT,
  ADJUNTO_PENSIONADO,
  ADJUNTO_ARL,
  ADJUNTO_CAJA_COMP,
  ADJUNTO_FONDO_SALUD,
  ADJUNTO_FONDO_PENSION,
  fecha_genera_rut,
  id_ciudad,
  ID_ACTIVIDAD_CIIU,
  ID_DIAN_ACTIVIDAD,
  (select max(ID_DEDUC_VOLUN) from rvc_deduc_volun where estado = 1 and  id_contratista = $id_contratista) as ID_deduc_VOLUN,
   RESPONSABLE_FACT_ELECT from RVC_CONTRATISTA where id_contratista=$id_contratista)  where id_formato_pago = $id_formato_pago          
EOD;
                $this->conn->execute($sql);

                $logger->info("Actualizado adjutnos contratista formato: - " . $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);

                /*
                 * Valor Retención en la fuente 150.000/ Valor Base de Retefuente 4.239.590
                 * Igual: 3,538077% debe mostrar 6 dígitos después de la coma (,) SOLO PROCEDIMIENTO 1.
                 * Si es 11 o 10% se debe mostrar esta, se controla en el servicio que guarde con tantos decimales. - 20210727::LAVILA
                 */
                $sql = <<<EOD
update RVC_FORMATO_PAGO 
    set tarifa_reten = tarifa_reten / 1000000
       where id_formato_pago = $id_formato_pago and tarifa_reten > 100          
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);
                        }
                    }
                }


                /**
                 * Incidente #31219,nuevo campo para valor embargo segun novedades - 20220919::LAVILA
                 */
                $logger->info("embargo_form_pago: - " . $request['embargo_form_pago']);
                if (isset($request['embargo_form_pago'])) {
                    $logger->info("Entro a embargo_form_pago - " . $request['embargo_form_pago']);

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

                    $embargo_form_pago = $request['embargo_form_pago'];
                    $embargo_pago = explode('@', $embargo_form_pago);

                    foreach ($embargo_pago as $value) {

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

                        $id_novedad_embargo = $value_lista[0];
                        $valor = $value_lista[1];

                        //Incidente #10247, solo si el valor es mayor a 0 - 20181012
                        if ($valor > 0) {
                            $sql = <<<EOD
Insert into RVC_EMBARGO_FORM_PAGO (ID_EMBARGO_FORM_PAGO,ID_FORMATO_PAGO,ID_NOVEDAD_EMBARGO,VALOR) 
    values (null,'$id_formato_pago','$id_novedad_embargo','$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
     * 8-Asignado
     * 9-Obligado
     * 6-Aprobado
     * 7-Reactivacion
     * 8-APROBACION MASIVA
     * 9-ASIGANADO
     * 10-OBLIGADO
     * 11-DESHACER
     * 12-CARGASIIF
     * 
     * tipo_trans
     * 1-Contratista
     * 2-Apoyo Supervisor
     * 3-Supervisor
     * 4-Financiera
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate(sfWebRequest $request) {

        $tag_mensaje = false;

        //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;
            $perfilAdmin = 0;
            foreach ($array as $routeName => $routeData) {
                //echo $routeName . "\n";
                if ('entidad_cliente' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadCliente = $value;
                        }
                    }
                }
                if ('entidad_nombre' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadNombre = $value;
                        }
                    }
                }
                if ('correoEnvio' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $correoEnvio = $value;
                        }
                    }
                }
                if ('perfilAdmin' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $perfilAdmin = $value;
                        }
                    }
                }
                $int++;
            }

            //Opcion segun boton
            switch ($tipo_boton) {
                //FIRMADO
                case 1:
                    //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,
                                
case when con.id_apoyo_supervisor is not null then 1 else 0 end as tiene_apoyo,
   
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];
                            $num_contrato = $records[0]['num_contrato'];
                            $num_doc = $records[0]['num_doc'];
                            $numero_pago = $records[0]['numero_pago'];
                            $razon_social_contra = $records[0]['razon_social'];
                            $tiene_apoyo = $records[0]['tiene_apoyo'];

                            //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
                            );
                            if ($entidadCliente == 1) { //SGC
                                if ($tiene_apoyo == 1) { //CONTRATISTA FIRMA Y TIENE APOYO
                                    $subject = "Solicitud revisión para trámite de pago Contratista:" . $num_doc . " Contrato:" . $num_contrato;
                                    $mensaje = <<<EOD
El contratista $num_doc $razon_social_contra,ha presentado su informe de actividades y liquidación del cobro del contrato $num_contrato, 
correspondiente al PAGO $numero_pago.  Como apoyo de supervisión  es importante que realice la revisión correspondiente para posterior aprobación 
de la supervisión y radicación del contratista de su cuenta de cobro.  Se adjunta consolidado de documentos asociados.
                                        
Cordialmente,
                                        
Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                    $report_params['mensaje'] = $mensaje;
                                } else { // CONTRATISTA FIRMA Y NO TIENE APOYO
                                    $subject = "Solicitud APROBACIÓN para trámite de pago Contratista:" . $num_doc . " Contrato:" . $num_contrato;
                                    $mensaje = <<<EOD
El contratista $num_doc $razon_social_contra, ha presentado su informe de actividades y liquidación del cobro del contrato $num_contrato, 
correspondiente al PAGO $numero_pago.  Como supervisor es importante que realice la verificación y aprobación correspondiente para que el 
contratista pueda radicar su cuenta de cobro. Se adjunta consolidado de documentos asociados.
                                        
Cordialmente,
                                        
Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                    $report_params['mensaje'] = $mensaje;
                                }
                            } else {
                                $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;
                //REVISADO
                case 2:

                    $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,
num.descripcion as numero_pago,
                            
-- Datos Apoyo
terapo.num_doc as num_doc_apo,
terapo.razon_soc as razon_soc_apo

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'];
                        $numero_pago = $records[0]['numero_pago'];
                        $razon_social_contra = $records[0]['razon_social'];
                        //Datos Apoyo
                        $num_doc_apo = $records[0]['num_doc_apo'];
                        $razon_social_apo = $records[0]['razon_soc_apo'];

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

                        if ($entidadCliente == 1) {
                            $subject = "Solicitud APROBACIÓN para trámite de pago Contratista: $num_doc Contrato: $num_contrato. REVISADO APOYO";
                            //Incidente #34286, se envia observacion en el correo - 20230209::LAVILA	
                            $mensaje = <<<EOD
                                        
El contratista $num_doc $razon_social_contra, ha presentado su informe de actividades y liquidación del cobro del contrato $num_contrato, 
correspondiente al PAGO $numero_pago el cual ya fue revisado por el apoyo operativo $num_doc_apo $razon_social_apo Como supervisor es importante 
que realice la verificación y aprobación correspondiente para que el contratista pueda radicar su cuenta de cobro.  
Se adjunta consolidado de documentos asociados.

OBservaciones: '$observaciones_estado'   
                                    
Cordialmente,
                                        
Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                            $report_params['mensaje'] = $mensaje;
                        } else {
                            $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;
                //AUTORIZADO
                case 3:



                    /**
                     * Validar para SGC dependencias - 20210521
                     * Se cambia por valor mensual - 20210629
                     */
                    if ($entidadCliente == 1) {

                        //consulta
                        $sql = <<<EOD
select  
tab0.id_formato_pago,
sum(tab0.valor) as valor_sum,
max(formt.valor_mensual) as valor_cobro

from rvc_formato_proyecto tab0

join rvc_formato_pago formt
on formt.id_formato_pago = tab0.id_formato_pago

where  
tab0.id_formato_pago = $id_formato_pago 

group by
tab0.id_formato_pago 
EOD;

                        //ejecuta y obtiene el resultado del sql
                        $records_proy = CN_TABLE::executeSQL($sql);

                        if (count($records_proy) <= 0) {
                            $tag_mensaje = true;
                            throw new Exception("</br>No esta el detalle de dependencias, verificar.");
                        }

                        $valor_sum = $records_proy[0]['valor_sum'];
                        $valor_cobro = $records_proy[0]['valor_cobro'];

                        if ($valor_sum != $valor_cobro) {
                            $tag_mensaje = true;
                            throw new Exception("</br>El valor registrado en los proyectos debe corresponder al valor Total de la cuenta de cobro correspondiente.");
                        }
                    }

                    $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,
'Observación: '||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,
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];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];
                        $numero_pago = $records[0]['numero_pago'];
                        $mensaje_extra = $records[0]['mensaje_extra'];

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

                        if ($entidadCliente == 1) {
                            $subject = "APROBACIÓN SUPERVISOR para trámite de pago Contratista: $num_doc Contrato: $num_contrato.";
                            $mensaje = <<<EOD
                                        
El supervisor $num_doc_sup $razon_social_sup, ha APROBADO su informe de actividades y liquidación del cobro del contrato $num_contrato, 
correspondiente al PAGO $numero_pago. Puede realizar el proceso de radicación de su cuenta a la Unidad de Recursos Financieros.
$mensaje_extra
                                      
Cordialmente,
                                        
Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                            $report_params['mensaje'] = $mensaje;
                            $report_params['mensaje_extra'] = "";
                        } else {

                            $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;
                //RADICADO
                case 4:
                    //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);
                                        // Confirmamos Numero Radicado Unico
                                        //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);

                                        // METODO ENVIO CORRERO DE NOTIFICACION A CONTRATISTA
                                        /* $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;

                                          $datos_usuario = array(
                                          '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                          );
                                          if($entidadCliente == 1) {
                                          $subject = "RADICADO No. $numero_radicado para trámite de pago Contratista:" . $num_doc . " Contrato:" . $num_contrato;
                                          $mensaje = <<<EOD
                                          Hemos recibido su cuenta para trámite asociada al contrato $num_contrato, correspondiente al PAGO $num_pago. Por favor esté atento a los estados de
                                          la radicación para resolver las observaciones correspondientes (ESTADO RECHAZADO) o para verificar que la cuenta fue revisada y liquidada la obligación
                                          (APROBACION FINANCIERA) para efectuar el cargue de documentos en SECOP y que el Grupo de Tesorería pueda tramitar su orden de pago.

                                          Cordialmente,

                                          Aplicativo para radicación virtual de cuentas
                                          Unidad de Recursos Financieros.
                                          EOD;
                                          $report_params['mensaje'] = $mensaje;
                                          $report_params['mensaje_extra'] = "";
                                          } else {
                                          $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;
                                          }
                                          if($entidadCliente == 1) {
                                          $this->logMessage("Subject: " . $subject);
                                          CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                                          }

                                          } */
                                    }
                                }
                            }
                        }
                    }
                    break;
                //RECHAZADO
                case 5:
                    //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;

                    //Devuelve la cuenta al Responsable de contabilidad que proceso la obligación y cambia el formato a estado ASIGNADO
                    if ($tipo_trans == 5) {

                        $sql = <<<EOD
update rvc_formato_pago 
set OBLIGADO = 0,
FECHA_OBLIGADO = '',
USUARIO_OBLIGADO = '',
    APROBADO = 0,
FECHA_APROBADO = '',
USUARIO_APROBADO = '',
OBSERVACIONES_APROB = '',
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 
and OBLIGADO = 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,
                                
forpa.usuario_estado_general,
forpa.email_usu_estado,
                                
--Datos correo asignado
nvl(usuasig.num_doc,'') as num_doc_asig,
nvl(usuasig.id_tipo_doc,'') as id_tipo_doc_asig,
nvl(usuasig.NOMBRE || ' ' || usuasig.APELLIDO,'') as razon_soc_asig,
nvl(usuasig.email,'') as correo_asig                                

                            
from rvc_formato_pago_v 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

left join usuario usuasig
on usuasig.username = forpa.USUARIO_ASIGNADO

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'];
                            $usuario_estado_general = $records[0]['usuario_estado_general'];
                            $email_usu_estado = $records[0]['email_usu_estado'];
                            //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'];
                            //DATOS ASIGNADO
                            $num_doc_asig = $records[0]['num_doc_asig'];
                            $id_tipo_doc_asig = $records[0]['id_tipo_doc_asig'];
                            $razon_social_asig = $records[0]['razon_social_asig'];
                            $correo_asig = $records[0]['correo_asig'];
                            //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) {
                                //Apoyo :Se envia correo al contratista
                                CASE 2:
                                    $datos_usuario = array(
                                        '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
                                    );
                                    if ($entidadCliente == 1) {
                                        $subject = "REVISADO por apoyo operativo para trámite de pago Contratista:" . $num_doc . " Contrato:" . $num_contrato;
                                        $mensaje = <<<EOD
El apoyo operativo $num_doc_apo $razon_social_apo, ha realizado el proceso de revisión de su informe de actividades y liquidación del 
cobro del contrato $num_contrato , correspondiente al PAGO $num_pago. Se han presentado las siguientes observaciones que requieren de su subsanación 
para continuar el proceso.
Observaciones: $mensaje_extra
                                      
Cordialmente,
                                        
Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                        $report_params['mensaje'] = $mensaje;
                                        $report_params['mensaje_extra'] = "";
                                    } else {
                                        $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;
                                //Supervisor: Se envia correo al apoyo y al contratista
                                CASE 3:

                                    /**
                                     * Se crea un resgistro nuevo segun el anterior en estado pendiente - 20181005
                                     * Incidente 32236, se anexan campos VALOR_RENTA_EXCENTA_25 y CIFRA_CONTROL_40 - 20221011::LAVILA
                                     */
                                    //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,
iva_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,
aplica_pension_menor,
aplica_aporte_solidario,
valor_aporte_solidario,
valor_otra_entidad,
base_aporte_solidario,                                        
adjunto_otra_entidad,
tarifa_estampilla,
valor_estampilla,
valor_base_estampilla,
id_tipo_seg_social,
ID_CIUDAD,
ID_ACTIVIDAD_CIIU,
ID_DEDUC_VOLUN,
ID_DIAN_ACTIVIDAD,
ASIGNADO,
FECHA_ASIGNADO,
USUARIO_ASIGNADO,
OBLIGADO,
FECHA_OBLIGADO,
USUARIO_OBLIGADO,
ADJUNTO_RUT_CONTRA,
ADJUNTO_PENSIONADO_CONTRA,
ADJUNTO_ARL_CONTRA,
ADJUNTO_CAJA_COMP_CONTRA,
ADJUNTO_FONDO_SALUD_CONTRA,
ADJUNTO_FONDO_PENSION_CONTRA,
fecha_genera_rut_CONTRA,
RESPONSABLE_FACT_ELECT,
VALOR_RENTA_EXCENTA_25,
CIFRA_CONTROL_40,
CARGASIIF,
FECHA_CARGASIIF,
USUARIO_CARGASIIF,
NUMERO_FACTURAS,
APORTE_VOLUNTARIO_LIB,
ID_DEDUC_VOLUN_LIB,
ID_TIPO_PROCED_RETE,
ADJUNTO_TIPO_RETE    
)
                                        
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,
iva_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,
aplica_pension_menor,
aplica_aporte_solidario,
valor_aporte_solidario,
valor_otra_entidad,
base_aporte_solidario,
adjunto_otra_entidad,
tarifa_estampilla,
valor_estampilla,
valor_base_estampilla,
id_tipo_seg_social,
ID_CIUDAD,
ID_ACTIVIDAD_CIIU,
ID_DEDUC_VOLUN,
ID_DIAN_ACTIVIDAD,
0 as ASIGNADO,
null as FECHA_ASIGNADO,
null as USUARIO_ASIGNADO,
0 as OBLIGADO,
null as FECHA_OBLIGADO,
null as USUARIO_OBLIGADO,
ADJUNTO_RUT_CONTRA,
ADJUNTO_PENSIONADO_CONTRA,
ADJUNTO_ARL_CONTRA,
ADJUNTO_CAJA_COMP_CONTRA,
ADJUNTO_FONDO_SALUD_CONTRA,
ADJUNTO_FONDO_PENSION_CONTRA,
fecha_genera_rut_CONTRA,
RESPONSABLE_FACT_ELECT,
VALOR_RENTA_EXCENTA_25,
CIFRA_CONTROL_40,
CARGASIIF,
FECHA_CARGASIIF,
USUARIO_CARGASIIF,
NUMERO_FACTURAS,
APORTE_VOLUNTARIO_LIB,
ID_DEDUC_VOLUN_LIB,
ID_TIPO_PROCED_RETE,
ADJUNTO_TIPO_RETE                                          

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 (
 ID_ACTIVIDAD_ACCION,
ID_ACTIVIDAD_OBLIGACION,
ORDEN,
DESCRIPCION,
FECHA_LOG,
USUARIO_LOG,
ADJUNTO_ANEXO_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,
tab0.adjunto_anexo_accion

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

                                        //insert embargos rvc_embargo_form_pago
                                        $sql = <<<EOD
insert into rvc_embargo_form_pago
select
null as id_embargo_form_pago,
$id_formato_pago_nuevo as id_formato_pago,
id_novedad_embargo,
valor
from rvc_embargo_form_pago
where
id_formato_pago = $id_formato_pago
EOD;
                                        $this->conn->execute($sql);
                                    }

                                    //FIN nuevo formato pago en pendiente
                                    if ($entidadCliente == 1) {
                                        $subject = "RECHAZO SUPERVISOR de trámite de pago Contratista: $num_doc Contrato: $num_contrato.";
                                        $mensaje = <<<EOD

El supervisor $num_doc_sup $razon_social_sup, ha RECHAZADO su informe de actividades y liquidación del cobro del contrato $num_contrato, 
correspondiente al PAGO $numero_pago. Por favor verifique las observaciones y realice las subsanaciones a que haya lugar según corresponda y 
vuelva a presentarla.
Observación: $mensaje_extra

Cordialmente,

Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                        $report_params['mensaje'] = $mensaje;
                                        $report_params['mensaje_extra'] = "";
                                    } else {

                                        $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;
                                //Financiera: Se envia correo a supervisor,apoyo y contratista 
                                CASE 4:
                                    //Comprobado select

                                    /**
                                     * Se crea un resgistro nuevo segun el anterior en estado pendiente - 20181005
                                     * Incidente 32236, se anexan campos VALOR_RENTA_EXCENTA_25 y CIFRA_CONTROL_40 - 20221011::LAVILA
                                     */
                                    //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,
iva_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,
aplica_pension_menor,
aplica_aporte_solidario,
valor_aporte_solidario,
valor_otra_entidad,
base_aporte_solidario,
adjunto_otra_entidad,
tarifa_estampilla,
valor_estampilla,
valor_base_estampilla,
id_tipo_seg_social,
ID_CIUDAD,
ID_ACTIVIDAD_CIIU,
ID_DEDUC_VOLUN,
ID_DIAN_ACTIVIDAD,
ASIGNADO,
FECHA_ASIGNADO,
USUARIO_ASIGNADO,
OBLIGADO,
FECHA_OBLIGADO,
USUARIO_OBLIGADO,
ADJUNTO_RUT_CONTRA,
ADJUNTO_PENSIONADO_CONTRA,
ADJUNTO_ARL_CONTRA,
ADJUNTO_CAJA_COMP_CONTRA,
ADJUNTO_FONDO_SALUD_CONTRA,
ADJUNTO_FONDO_PENSION_CONTRA,
fecha_genera_rut_CONTRA,
RESPONSABLE_FACT_ELECT,
VALOR_RENTA_EXCENTA_25,
CIFRA_CONTROL_40,
CARGASIIF,
FECHA_CARGASIIF,
USUARIO_CARGASIIF,
NUMERO_FACTURAS,
APORTE_VOLUNTARIO_LIB,
ID_DEDUC_VOLUN_LIB,
ID_TIPO_PROCED_RETE,
ADJUNTO_TIPO_RETE  
)
                                        
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,
iva_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,
aplica_pension_menor,
aplica_aporte_solidario,
valor_aporte_solidario,
valor_otra_entidad,
base_aporte_solidario,
adjunto_otra_entidad,
tarifa_estampilla,
valor_estampilla,
valor_base_estampilla,
id_tipo_seg_social,
ID_CIUDAD,
ID_ACTIVIDAD_CIIU,
ID_DEDUC_VOLUN,
ID_DIAN_ACTIVIDAD,
0 as ASIGNADO,
null as FECHA_ASIGNADO,
null as USUARIO_ASIGNADO,
0 as OBLIGADO,
null as FECHA_OBLIGADO,
null as USUARIO_OBLIGADO,
ADJUNTO_RUT_CONTRA,
ADJUNTO_PENSIONADO_CONTRA,
ADJUNTO_ARL_CONTRA,
ADJUNTO_CAJA_COMP_CONTRA,
ADJUNTO_FONDO_SALUD_CONTRA,
ADJUNTO_FONDO_PENSION_CONTRA,
fecha_genera_rut_CONTRA,
RESPONSABLE_FACT_ELECT,
VALOR_RENTA_EXCENTA_25,
CIFRA_CONTROL_40,
CARGASIIF,
FECHA_CARGASIIF,
USUARIO_CARGASIIF,
NUMERO_FACTURAS,
APORTE_VOLUNTARIO_LIB,
ID_DEDUC_VOLUN_LIB,
ID_TIPO_PROCED_RETE,
ADJUNTO_TIPO_RETE  

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 (
 ID_ACTIVIDAD_ACCION,
ID_ACTIVIDAD_OBLIGACION,
ORDEN,
DESCRIPCION,
FECHA_LOG,
USUARIO_LOG,
ADJUNTO_ANEXO_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,
tab0.adjunto_anexo_accion

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

                                        //insert embargos rvc_embargo_form_pago
                                        $sql = <<<EOD
insert into rvc_embargo_form_pago
select
null as id_embargo_form_pago,
$id_formato_pago_nuevo as id_formato_pago,
id_novedad_embargo,
valor
from rvc_embargo_form_pago
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
                                    if ($entidadCliente == 1) {
                                        $subject = "RECHAZO RADICADO No. $numero_radicado Contratista: $num_doc Contrato: $num_contrato.";
                                        $mensaje = <<<EOD
El radicado del asunto ha sido revisado y presenta las siguientes observaciones para ser subsanadas, 
por favor realice los ajustes correspondientes bien sea de datos en la actualización de datos de contratista, 
en el formato de pago o ajuste de los anexos según corresponda.   
Recuerde que este rechazo genera un nuevo formato e informe de actividades en estado PENDIENTE que debe surtir el proceso nuevamente hasta su radicación.

Motivo del rechazo: $mensaje_extra

Cualquier inquietud respecto de las observaciones realizadas puede contactarse con $usuario_estado_general $email_usu_estado

Cordialmente,

Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                        $report_params['mensaje'] = $mensaje;
                                        $report_params['mensaje_extra'] = "";
                                    } else {
                                        $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;
                                //Contabilidad: Devuelve la cuenta al Responsable de contabilidad que proceso la obligación y cambia el formato a estado ASIGNADO.
                                CASE 5:

                                    //Envia correo al responsable asignado
                                    $datos_usuario = array(
                                        '0' => $num_doc_asig . ';' . $id_tipo_doc_asig . ';' . $razon_social_asig . ';' . $correo_asig . ';' . $mensaje_extra
                                    );
                                    $subject = "RECHAZO-OBLIGADO RADICADO No. $numero_radicado Contratista: $num_doc Contrato: $num_contrato.";
                                    $mensaje = <<<EOD
El radicado del asunto ha sido revisado y presenta las siguientes observaciones para ser subsanadas, 
por favor realice los ajustes correspondientes bien sea de datos en la actualización de datos de contratista, 
en el formato de pago o ajuste de los anexos según corresponda.   
Recuerde que este rechazo devuelve a estado ASIGNADO.

Motivo del rechazo: $mensaje_extra

Cualquier inquietud respecto de las observaciones realizadas puede contactarse con $usuario_estado_general $email_usu_estado

Cordialmente,

Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                                    $report_params['mensaje'] = $mensaje;
                                    $report_params['mensaje_extra'] = "";

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

                                    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;
                //APROBADO
                case 6:
                    //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 
when  tab0.fecha_fin_pago >= tab1.fecha_inicio_cesion_ter then 1 
else 0 end as ultimo_pago,
fecha_inicio_cesion_ter,
fecha_inicio_cesion_ini
                            
FROM rvc_formato_pago tab0
left join rvc_contrato_v 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");

                        //Se activa nuevo CONTRATO - 20220317::LAVILA
                        $sql = <<<EOD
update rvc_contrato 
set estado = 1
where
id_contrato = (select id_contrato_new from rvc_novedad_cesion where id_contrato = $id_contrato)
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Se activa el contrato nuevo referente a cesion id_contaro $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 
case when forpa.fecha_fin_pago >= con.fecha_fin then 1 else 0 end as tag_ult_pago,
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,
                            
-- usuairo aprobado
                            
forpa.usuario_aprobado,
usuapo.nombre || ' ' || usuapo.apellido as rason_soc_usuapro,
                            
forpa.USUARIO_OBLIGADO,
forpa.RAZON_SOC_USU_OBLIGO
                            
from rvc_formato_pago_v forpa
                            
left join usuario usuapo on usuapo.username = forpa.usuario_aprobado                            

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

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

                        $usuario_aprobado = $records[0]['usuario_aprobado'];
                        $razon_soc_aprobado = $records[0]['rason_soc_usuapro'];

                        $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'];
                        //USUARIO OBLIGACION
                        $usuario_obligado = $records[0]['usuario_obligado'];
                        $razon_social_obligado = $records[0]['razon_soc_usu_obligo'];
                        //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;
                        if ($entidadCliente == 1) {
                            $subject = "APROBACIÓN FINANCIERA RADICADO No. $numero_radicado Contratista: $num_doc Contrato: $num_contrato.";

                            //Incidente #28526, se realizar cambio al mensaje - 20220218::LAVILA
                            $mensaje_antiguo = <<<EOD
El radicado No. $numero_radicado ha surtido el trámite de verificación y generación de obligación por parte del usuario $razon_social_obligado($usuario_obligado) y 
aprobado en el Grupo de Tesorería por el usuario $razon_soc_aprobado($usuario_aprobado), por favor realice el proceso de cargue y aprobación de los documentos 
en SECOP II, para que pueda ser aprobada su orden de pago. .  Muchas gracias.

Cordialmente,

Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                            //Incidente #38585, se realiza cambio al mensaje - 20240911::LAVILA
                            //Si es el ultimo pago
                            $mensaje_ult = " ";
                            if ($tag_ult_pago == 1) {
                                $mensaje_ult = <<<EOD
 
Señor usuario recuerde que para su último pago debe estar a paz y salvo con las siguientes áreas diligenciando el formato casilla 57 el cual tener el visto bueno sin excepción alguna. 
Esto no exime de este proceso si tuviesen nuevo contrato.
                                         
EOD;
                            }


                            $mensaje = <<<EOD
El radicado No. $numero_radicado ha surtido el trámite de verificación y generación de obligación por parte del usuario $razon_social_obligado($usuario_obligado) y 
aprobado en el Grupo de Tesorería por el usuario $razon_soc_aprobado($usuario_aprobado), por favor realice el proceso de cargue y aprobación de los documentos 
en SECOP II, para que pueda ser aprobada su orden de pago. 
Tenga en cuenta que, para el proceso del pago, es necesaria la aprobación de las cuentas en SECOP y realizar el diligenciamiento del formulario 
"Registro Aprobación SECOP" LINK: https://forms.gle/22ERhQbJLpXHm8ps7 Igualmente, si es el último pago y/o el pago corresponde al periodo del mes de diciembre por favor tramitar la Casilla 57 del formato F-FIN-001 
a través del diligenciamiento del formulario: LINK: https://forms.gle/25HWFWteYYtYam4JA Muchas gracias.<br/><br/>
$mensaje_ult
Cordialmente,<br/>

Aplicativo para radicación virtual de cuentas<br/>
Unidad de Recursos Financieros.<br/>
EOD;
                            $report_params['mensaje'] = $mensaje;
                            $report_params['mensaje_extra'] = "";
                        }
                        //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;
                //REACTIVACION - 20180705
                case 7:
                    //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;
                //APROBACION MASIVA  - 20190521
                case 8:
                    $this->logMessage("ENTRO aprobacion masiva");
                    $observaciones_estado = "Aprobacion Masiva " . CN_TABLE::fechaSistema() . ": " . $observaciones_estado;
                    $fecha_ini = $request['fecha_ini'];
                    $fecha_fin = $request['fecha_fin'];

                    $whereObligado = '';
                    if ($entidadCliente == 1) { //SGC
                        $whereObligado = 'and obligado = 0';
                    }

                    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 
    $whereObligado 
    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;
                //ASGINADO - 20211125::LAVILA
                case 9:

                    $this->logMessage("ENTRO ASGINADO");

                    if (isset($request['id_formato_pago_union'])) {
                        //Asignar a la persona que llama el servicio, solo radicados y activas, y sin asignacion, tampoco en estado aprobado
                        $id_formato_pago_union = $request['id_formato_pago_union'];

                        //Actualizamos todos los formato de pago radicados por filtro de ids
                        $sql = <<<EOD
update rvc_formato_pago 
set ASIGNADO = 1,
FECHA_ASIGNADO = SYSDATE,
USUARIO_ASIGNADO = '$usuario_estado'                        
where
id_formato_pago in (
    select id_formato_pago 
    from rvc_formato_pago 
    where aprobado=0
    and ASIGNADO=0
    and estado = 1
    and radicado = 1
    and id_formato_pago in ($id_formato_pago_union)
) 
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Ejecuto aprobacion masiva");
                    } else {
                        $status = 1;
                        $mensaje = "No es posible asignar masivamente. Falta alguno de estos parametros(ids seleccionados).";
                    }

                    break;
                //OBLIGADO - 20211125::LAVILA
                case 10:

                    $this->logMessage("ENTRO OBLIGADO");

                    if (isset($request['id_formato_pago_union'])) {
                        //Asignar a la persona que llama el servicio, solo asignadas y activas, y sin obligado, tampoco en estado aprobado
                        $id_formato_pago_union = $request['id_formato_pago_union'];

                        //Actualizamos todos los formato de pago asignados por filtro de ids
                        //obligado- tenga adjuntos de tipo obligacion
                        $sql = <<<EOD
update rvc_formato_pago 
set OBLIGADO = 1,
FECHA_OBLIGADO = SYSDATE,
USUARIO_OBLIGADO = '$usuario_estado'                        
where
id_formato_pago in (
    select id_formato_pago 
    from rvc_formato_pago 
    where aprobado=0
    and OBLIGADO=0
    and estado = 1
    and asignado = 1
    and id_formato_pago in ($id_formato_pago_union)
    and id_formato_pago in (select distinct id_formato_pago from rvc_formato_pago_adj where upper(nombre_adjunto) like '%OBLIGA%') 
) 
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Ejecuto aprobacion masiva");
                    } else {
                        $status = 1;
                        $mensaje = "No es posible obligar masivamente. Falta alguno de estos parametros(ids seleccionados).";
                    }

                    break;
                //DESHACER - 20211125::LAVILA
                case 11:

                    $this->logMessage("ENTRO DESHACER");

                    if (isset($request['id_formato_pago_union'])) {
                        //Asignar a la persona que llama el servicio, solo radicados y activas, y sin asignacion, tampoco en estado aprobado
                        $id_formato_pago_union = $request['id_formato_pago_union'];

                        //Comprobamos que tenga actividades
                        $sql = <<<EOD
select username from usuario 
    where id_perfil in ( $perfilAdmin ) 
        and username = '$usuario_estado' 
            and estado = 1 
EOD;

                        $records = CN_TABLE::executeSQL($sql);
                        $whereUsuario = '';
                        if (count($records) == 0) {
                            $whereUsuario = " and USUARIO_ASIGNADO = '$usuario_estado' ";
                        }

                        //verifica si hay registros para el usuario asignado
                        $sql = <<<EOD
select id_formato_pago 
from rvc_formato_pago 
where aprobado=0
and ASIGNADO=1
and estado = 1
and radicado = 1
and id_formato_pago in ($id_formato_pago_union) 
$whereUsuario 
EOD;

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

                            //Actualizamos todos los formato de pago radicados por filtro de ids
                            /*
                             * Se habilita al administrador funcional para que inactive la asignación 
                             * o el mismo usuario que ASIGNÓ podrá levantar la asignación 
                             * siempre que continúe en el mismo estado.
                             * Al deshacer quita tambien estado cargasiif - 20220405::LAVILA
                             */
                            $sql = <<<EOD
update rvc_formato_pago 
set ASIGNADO = 0,
FECHA_ASIGNADO = SYSDATE,
USUARIO_ASIGNADO = '$usuario_estado',
    OBLIGADO = 0,
FECHA_OBLIGADO = '',
USUARIO_OBLIGADO = '',
    CARGASIIF = 0,
FECHA_CARGASIIF = '',
USUARIO_CARGASIIF = ''                            
where
id_formato_pago in (
    select id_formato_pago 
    from rvc_formato_pago 
    where aprobado=0
    and ASIGNADO=1
    and estado = 1
    and radicado = 1
    and id_formato_pago in ($id_formato_pago_union) 
    $whereUsuario 
) 
EOD;
                            $this->conn->execute($sql);
                            $this->logMessage("Ejecuto aprobacion masiva");
                        } else {
                            $status = 1;
                            $mensaje = "No es posible deshacer masivamente. No hay registros para el usuario asignado($usuario_estado).";
                        }
                    } else {
                        $status = 1;
                        $mensaje = "No es posible deshacer masivamente. Falta alguno de estos parametros(ids seleccionados).";
                    }


                    break;
                //CARGASIIF - 20220405::LAVILA
                case 12:

                    $this->logMessage("ENTRO CARGASIIF");

                    if (isset($request['id_formato_pago_union'])) {
                        //Asignar a la persona que llama el servicio, solo radicados y activas, y sin asignacion, tampoco en estado aprobado
                        $id_formato_pago_union = $request['id_formato_pago_union'];

                        //Actualizamos todos los formato de pago radicados por filtro de ids
                        $sql = <<<EOD
update rvc_formato_pago 
set CARGASIIF = 1,
FECHA_CARGASIIF = SYSDATE,
USUARIO_CARGASIIF = '$usuario_estado'                        
where
id_formato_pago in (
    select id_formato_pago 
    from rvc_formato_pago 
    where aprobado=0
    and CARGASIIF = 0
    and ASIGNADO = 1
    and estado = 1
    and radicado = 1
    and id_formato_pago in ($id_formato_pago_union)
) 
EOD;
                        $this->conn->execute($sql);
                        $this->logMessage("Ejecuto cargaSIIF masiva");
                    } else {
                        $status = 1;
                        $mensaje = "No es posible cargaSIIF masivamente. Falta alguno de estos parametros(ids seleccionados).";
                    }

                    break;
                default:
                    break;
            }


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            if ($status == 0) {
                $this->conn->commit();
                if ($tipo_boton == 4) { // Si se radico se valida el numero y se notifica
                    $response[0] = $this->validateNumeroUnico($id_formato_pago);
                    $this->notificarRadicado($id_formato_pago, $correoEnvio);
                }
                $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
            //Validar mensaje si se necesita, defecto false - 20210521
            if (!$tag_mensaje) {
                $mensaje = "ERROR Excepciones en la ejecución !!!";
            } else {
                $mensaje = $e->getMessage();
            }

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

    private function validateNumeroUnico($id_formato_pago) {
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("[formato_pago_contratista] Ingreso a validar numero radicado");
        $sql = <<<EOD
    select id_formato_pago, numero_radicado
    from RVC_FORMATO_PAGO
    where numero_radicado = (select numero_radicado from RVC_FORMATO_PAGO where id_formato_pago = $id_formato_pago)
    order by id_formato_pago ASC
EOD;
        $records = CN_TABLE::executeSQL($sql);
        if (count($records) > 1) {
            if ($records[0]['id_formato_pago'] == $id_formato_pago) {
                return array("numero_radicado" => $records[0]['numero_radicado']);
            } else {
                $conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                $conn->beginTransaction();
                $logger->info("[formato_pago_contratista] Ingreso a actualizar el de numero radicado");
                $sql = <<<EOD
select nvl(max(numero_radicado),0) as consecutivo from rvc_formato_pago 
EOD;
                $numRadicado = CN_TABLE::executeSQL($sql);
                $numero_radicado = $numRadicado[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;
                $conn->execute($sql);
                $conn->commit();
                return $this->validateNumeroUnico($id_formato_pago);
            }
        } else {
            $logger->info("[formato_pago_contratista] numero radicado unico");
            return array("numero_radicado" => $records[0]['numero_radicado']);
        }
    }

    private function notificarRadicado($id_formato_pago, $correoEnvio) {
        $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;

            $datos_usuario = array(
                '0' => $num_doc . ';' . $id_tipo_doc_contra . ';' . $razon_social_contra . ';' . $correo_contra . ';' . $mensaje_extra
            );
            if ($entidadCliente == 1) {
                $subject = "RADICADO No. $numero_radicado para trámite de pago Contratista:" . $num_doc . " Contrato:" . $num_contrato;
                $mensaje = <<<EOD
Hemos recibido su cuenta para trámite asociada al contrato $num_contrato, correspondiente al PAGO $num_pago. Por favor esté atento a los estados de 
la radicación para resolver las observaciones correspondientes (ESTADO RECHAZADO) o para verificar que la cuenta fue revisada y liquidada la obligación 
(APROBACION FINANCIERA) para efectuar el cargue de documentos en SECOP y que el Grupo de Tesorería pueda tramitar su orden de pago.

Cordialmente,

Aplicativo para radicación virtual de cuentas
Unidad de Recursos Financieros.
EOD;
                $report_params['mensaje'] = $mensaje;
                $report_params['mensaje_extra'] = "";
            } else {
                $subject = "RADICADO - Formato Pago No. $num_pago 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 radicado por el siguiente motivo.
EOD;
                $report_params['mensaje'] = $mensaje;
            }
            if ($entidadCliente == 1) {
                $this->logMessage("Subject: " . $subject);
                CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
            }
        }
    }
}
