<?php

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

    protected $table_names = array(
        'RVC_CONTRATO_V',
        'RVC_CONTRATISTA_V',
        'RVC_TIPO_REGIMEN',
        'CIUDAD',
        'TS_UVT',
        'NO_SMDLV',
        'TIPO_DOCUMENTO',
        'RVC_CONTRATO_RPS_V',
        'RVC_CONTRATO_RPS_SUM_V',
        'RVC_ACTIVIDAD_CIIU',
        'RVC_AGRUP_CIIU',
        'RVC_NOVEDAD_SUPR_APOY_V',//Incidente #31748, adjunto de supervisor - 20230105::LAVILA
            //'RVC_DECLARA_JURA_NOV_V'
        'NO_TIPO_PROCED_RETE'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'RVC_CONTRATISTA_V,LEFT' =>
        array(
            'id_contratista' => 'RVC_CONTRATO_V'
        ),
        'RVC_TIPO_REGIMEN,LEFT' =>
        array(
            'id_tipo_regimen' => 'RVC_CONTRATISTA_V'
        ),
        'CIUDAD,LEFT' =>
        array(
            'id_ciudad-id' => 'RVC_CONTRATISTA_V'
        ),
        '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_V'
        ),
        'RVC_CONTRATO_RPS_V,LEFT' =>
        array(
            'id_contrato' => 'RVC_CONTRATO_V'
        ),
        'RVC_CONTRATO_RPS_SUM_V,LEFT' =>
        array(
            'id_contrato' => 'RVC_CONTRATO_V'
        ),
        'RVC_ACTIVIDAD_CIIU,LEFT' =>
        array(
            'id_actividad_ciiu' => 'RVC_CONTRATISTA_V'
        ),
        'RVC_AGRUP_CIIU,LEFT' =>
        array(
            'id_agrup_ciiu' => 'RVC_ACTIVIDAD_CIIU'
        ),
        'RVC_NOVEDAD_SUPR_APOY_V,LEFT' =>
        array(
            'id_contrato' => 'RVC_CONTRATO_V',
            'rn=1' => 'CONDITION'
        ),
        'NO_TIPO_PROCED_RETE,LEFT' =>
        array(
            'id_tipo_proced_rete' => 'RVC_CONTRATISTA_V'
        )
            //
            /* 'RVC_DECLARA_JURA_NOV_V,LEFT' =>
              array(
              'id_declara_jura_nov' => 'RVC_CONTRATISTA_V'
              ) */
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'RVC_CONTRATO_V' =>
        array(
            'id_contrato' => 'id_contrato',
            'tipo_recurso' => 'tipo_recurso',
            'id_contratista' => 'id_contratista',
            'num_contrato' => 'num_contrato',
            'id_anhos' => 'id_anhos',
            'fecha_contrato' => 'fecha_contrato',
            'objeto' => 'objeto',
            'obligaciones' => 'obligaciones',
            'estado' => 'estado',
            'rp_anm' => 'rp_anm',
            'rp_sgr' => 'rp_sgr',
            'rp_anm,||,rp_sgr' => 'rp',
            'fecha_rp' => 'fecha_rp',
            'fecha_rp_sgr' => 'fecha_rp_sgr',
            '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',
            'id_apoyo_supervisor' => 'id_apoyo_supervisor',
            //'valor_anm,+,valor_sgr' => 'valor_contrato',
            'id_mae_ter_sup' => 'id_mae_ter_sup',
            'num_doc_sup' => 'num_doc_sup',
            'razon_soc_sup' => 'razon_soc_sup',
            'num_doc_sup,||, - ,||,razon_soc_sup' => 'completo_sup',
            'cargo_sup' => 'cargo_sup',
            'correo_sup' => 'correo_sup',
            'estado_sup' => 'estado_sup',
            'id_mae_ter_apo' => 'id_mae_ter_apo',
            'num_doc_apo' => 'num_doc_apo',
            'razon_soc_apo' => 'razon_soc_apo',
            'num_doc_apo,||, - ,||,razon_soc_apo' => 'completo_apo',
            'cargo_apo' => 'cargo_apo',
            'correo_apo' => 'correo_apo',
            'estado_apo' => 'estado_apo',
            'fecha_ini' => 'fecha_ini',
            'fecha_fin' => 'fecha_fin',
            'aplica_rp_doble' => 'aplica_rp_doble',
            'rp_anm_old' => 'rp_anm_old',
            'rp_sgr_old' => 'rp_sgr_old',
            'rp_anm_old,||,rp_sgr_old' => 'rp_old',
            'valor_anm_new' => 'valor_anm_new',
            'valor_sgr_new' => 'valor_sgr_new',
            'id_contrato_old' => 'id_contrato_old',
            'numero_pago' => 'numero_pago',
            'valor_mensualizado' => 'valor_mensualizado',
            'adjunto_contrato' => 'adjunto_contrato',
            'adjunto_poliza' => 'adjunto_poliza',
            'id_area' => 'id_area',
            'codigo_area' => 'codigo_area',
            'descripcion_area' => 'descripcion_area',
            'sigla_area' => 'sigla_area',
            'id_tipo_contrato' => 'id_tipo_contrato',
            'descripcion_tipcon' => 'descripcion_tipcon',
            'abreviatura_tipcon' => 'abreviatura_tipcon',
            'id_acta_ini' => 'id_acta_ini',
            'tiene_acta_ini' => 'tiene_acta_ini',
            'firmado_acta_ini' => 'firmado_acta_ini',
            'autorizado_acta_ini' => 'autorizado_acta_ini',
            'primer_contrato' => 'primer_contrato',
            'adjunto_acta_firmado' => 'adjunto_acta_firmado',
            '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',             
            //Valor de Deducido Voluntario por contratista - 20231116
            'valor_deducido' => 'valor_deducido', 
            'valor_deducido_aplica' => 'valor_deducido_aplica',
            'nombre_deducido' => 'nombre_deducido', 
            //Campos para estampilla - 20210601
            'aplica_estampilla' => 'aplica_estampilla',
            'id_benef_estampilla' => 'id_benef_estampilla',
            'valor_mensual' => 'valor_mensual',
            'tarifa_estampilla' => 'tarifa_estampilla',
            'valor_primer_pago' => 'valor_primer_pago',
            'fecha_inicio_cesion_ter' => 'fecha_inicio_cesion_ter',
            'fecha_inicio_cesion_ini' => 'fecha_inicio_cesion_ini'
        ),
        'RVC_CONTRATISTA_V' =>
        array(
            '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',
            'responsable_fact_elect' => 'responsable_fact_elect',
            'mas_empleados' => 'mas_empleados',
            'declarante_renta' => 'declarante_renta',
            'pensionado' => 'pensionado',
            'embargo' => 'embargo',
            'dependiente' => 'dependiente',
            'valor_embargo' => 'valor_embargo',
            'num_doc,||, - ,||,razon_social' => 'completo',
            'id_tipo_riesgo' => 'id_tipo_riesgo_cont',
            'id_declara_jura_nov' => 'id_declara_jura_nov',
            'adjunto_firmado' => 'adjunto_firmado',
            'fecha_afilia_arl' => 'fecha_afilia_arl',
            'tarifa_caja_comp' => 'tarifa_caja_comp',
            'razon_social_caja_comp' => 'razon_social_caja_comp',
            'id_caja_comp' => 'id_caja_comp',
            'id_fondo_salud' => 'id_fondo_salud',
            'id_fondo_pension' => 'id_fondo_pension',
            'id_fondo_arl' => 'id_fondo_arl',
            'otra_entidad' => 'otra_entidad',
            'id_declara_otra_entid' => 'id_declara_otra_entid',
            'adjunto_firmado_entid' => 'adjunto_firmado_entid',
            'valor_mensualizado_entid' => 'valor_mensualizado_entid',
            'id_actividad_ciiu' => 'id_actividad_ciiu',
            'id_tipo_proced_rete' => 'id_tipo_proced_rete',
            'porcentaje' => 'porcentaje_rete',
            'adjunto_tipo_rete' => 'adjunto_tipo_rete'

        ),
        'NO_TIPO_PROCED_RETE' =>
        array(
            'descripcion' => 'descripcion_rete'
        ),
        'RVC_TIPO_REGIMEN' =>
        array(
            'descripcion' => 'tipo_regimen',
            'aplica_iva' => 'aplica_iva',
            'aplica_descuento' => 'aplica_descuento'
        ),
        '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_CONTRATO_RPS_V' =>
        array(
            'rp_detalles' => 'rp_detalles'
        ),
        'RVC_CONTRATO_RPS_SUM_V' =>
        array(
            'sum_rp_detalles' => 'valor_contrato'
        ),
        'RVC_ACTIVIDAD_CIIU' =>
        array(
            'codigo_ciiu' => 'codigo_ciiu',
            'descripcion' => 'descripcion',
            'tarifa_por_mil' => 'tarifa_por_mil'
        ),
        'RVC_NOVEDAD_SUPR_APOY_V' =>
        array(
            'adjunto' => 'adjunto_nov_supapo',
            'fecha_ini_supr' => 'fecha_ini_supr',
            'fecha_fin_supr' => 'fecha_fin_supr'
        )
            /* 'RVC_DECLARA_JURA_NOV_V' =>
              array(
              'fecha' => 'fecha_declara_jura_nov',
              'id_tipo_condiciones' => 'id_tipo_condiciones',
              'tipo_condiciones' => 'tipo_condiciones',
              ) */
    ); //por cada tabla especificar los campos del select

    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * EJEMPLO: 'titular' => array('NULL' => array('titular')),
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */

    /**
     * Se cambio fintro de fecha_contrato de BETWEENFECHA por >= y <=
     * @var type  - 20191004
     */
    protected $table_field_conditions = array(
        'RVC_CONTRATO_V' => array(
            'id_contrato,a' => array('!=' => array(-1)),
            'id_contrato,b' => array('=' => array('id_contrato')),
            'estado' => array('=' => array('estado')),
            'tiene_acta_ini' => array('=' => array('tiene_acta_ini')),
            'primer_contrato' => array('=' => array('primer_contrato')),
            'id_contratista' => array('=' => array('id_contratista')),
            'num_contrato' => array('=' => array('num_contrato')),
            'fecha_contrato,a' => array('>=' => array('fecha_ini')),
            'fecha_contrato,b' => array('<=' => array('fecha_fin')),
            //'fecha_contrato' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'tipo_recurso' => array('=' => array('tipo_recurso')),
            //'id_supervisor' => array('=' => array('id_supervisor')),
            'id_apoyo_supervisor' => array('=' => array('id_apoyo_supervisor')),
            'id_tipo_novedad_cont' => array('=' => array('id_tipo_novedad_cont')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'RVC_CONTRATO_V' =>
        array(
            'num_contrato' => array('LIKEALLPLUS' => array('input', '%')),
            'id_contratista' => array('=' => array('id_contratista_aux')),
            'id_supervisor' => array('=' => array('id_supervisor')),
        )
    ); // filtros de condicion or
    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'id_anhos', 'num_contrato', 'fecha_contrato', 'num_doc'
    ); //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_contrato'; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('id_contrato'); //llave primaria
    protected $field_names = array('id_contratista', 'num_contrato', 'id_anhos', 'fecha_contrato', 'objeto', 'obligaciones', 'estado',
        'rp_anm', 'rp_sgr', 'fecha_rp', 'fecha_rp_sgr', 'fecha_poliza', 'valor_anm', 'cdp_anm', 'fecha_cdp_anm', 'valor_sgr', 'cdp_sgr', 'fecha_cdp_sgr',
        'dependencia', 'meses_plazo', 'dias_plazo', 'fecha_plazo', 'id_supervisor', 'id_apoyo_supervisor', 'fecha_ini', 'fecha_fin',
        'numero_pago', 'valor_mensualizado', 'adjunto_contrato', 'adjunto_poliza', 'id_area', 'id_tipo_contrato', 'tipo_recurso'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'RVC_CONTRATO'; //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_contrato'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

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

        //valor por defecto
        $errors = null;

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

        //accion update
        if ($Action == "UPDATE") {
            // OMitir este codigo e la versio PHP 7.6
            $request['marca_act_estado'] = 0;
            // Fin codigo a omitir
        }

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

                $id_contrato = $list_data_post[0]['id_contrato'];
                $id_contratista = $list_data_post[0]['id_contratista'];

                $sql = <<<EOD
SELECT tab0.num_doc AS nitocc
FROM RVC_CONTRATISTA tab0
WHERE 1=1 AND tab0.id_contratista=$id_contratista                              
EOD;



                $res = CN_TABLE::executeSQL($sql);
                $nitocc = $res[0]['nitocc'];

                /**
                 * Se valida si existe el tercero no se borra, ni se crea - 20200326 LAVILA
                 */
                $sql = <<<EOD
select * FROM TERCEROS WHERE 1=1 AND NITOCC = '$nitocc'                              
EOD;
                $ter = CN_TABLE::executeSQL($sql);

                if (count($ter) == 0) {

                    $sql = <<<EOD
INSERT INTO TERCEROS
(
  NITOCC,
  TIPTER,
  RAZSOC,
  CIUDAD,
  TELEFO,
  TELFAX,
  DIRECC,
  ESTADO,
  EMAIL,
  SUELDO,
  CARGO,
  CODREG,
  ID_TIPO_TRABA_CONTRA,
  FECHA_ACT,
  CARGO_TEXTO
)
SELECT tab0.num_doc AS nitocc,
       NVL(tab0.id_tip_ter,1) AS tipter,
       tab0.razon_social AS razsoc,
       tab2.nombre AS ciudad,
       NVL(tab0.telefono,'') AS telefo,
       NVL(tab0.telefono,'') AS telfax,
       NVL(tab0.direccion,'') AS direcc,
       tab0.estado AS estado,
       NVL(tab0.correo,'') AS email,
       NVL(tab3.valor_mensualizado,0) AS sueldo,
       '' AS cargo,
       '' AS codreg,
       3 AS id_tipo_traba_contra,
       SYSDATE AS fecha_act,
       '' AS cargo_texto
FROM RVC_CONTRATISTA tab0
  LEFT JOIN TERCEROS tab1 ON tab0.num_doc = tab1.nitocc
  LEFT JOIN CIUDAD tab2 ON tab0.id_ciudad = tab2.id
  LEFT JOIN (SELECT tab4.*
             FROM (SELECT aut.*,
                          ROW_NUMBER() OVER (PARTITION BY aut.id_contratista ORDER BY aut.fecha_contrato DESC) AS rn
                   FROM RVC_CONTRATO aut) tab4
             WHERE 1 = 1
             AND   tab4.rn = 1) tab3 ON tab3.id_contratista = tab0.id_contratista
WHERE 1 = 1
AND   tab1.nitocc IS NULL    
EOD;

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

                $num_contrato = $request['num_contrato'];
                $fecha_cdp_sgr = $request['fecha_cdp_sgr'];
                $fecha_cdp_anm = $request['fecha_cdp_anm'];
                $estado = 1;
                $rp_anm = empty($request['rp_anm']) ? 'null' : $request['rp_anm'];
                $rp_sgr = empty($request['rp_sgr']) ? 'null' : $request['rp_sgr'];
                $tipo_recurso = $request['tipo_recurso'];
                $fecha_rp = $request['fecha_rp'];
                $fecha_rp_sgr = $request['fecha_rp_sgr'];
                $cdp_anm = empty($request['cdp_anm']) ? 'null' : $request['cdp_anm'];
                $cdp_sgr = empty($request['cdp_sgr']) ? 'null' : $request['cdp_sgr'];
                $valor_anm = $request['valor_anm'];
                $valor_sgr = $request['valor_sgr'];
                $principal = 1;

                if ($tipo_recurso == 0) {

                    $sql = <<<EOD

INSERT INTO RVC_RPS_CDPS_CONTRATO
(
  ID_RPS_CDPS_CONTRATO,
  ID_CONTRATO,
  NUM_CONTRATO,
  ESTADO,
  RP,
  FECHA_RP,
  CDP,
  FECHA_CDP,
  TIPO_RECURSO,
  VALOR_RP,
  PRINCIPAL
)
VALUES
(
null,
  $id_contrato,
  '$num_contrato',
  $estado,
  $rp_anm,
  to_date('$fecha_rp','yyyy-mm-dd'),
  $cdp_anm,
  to_date('$fecha_cdp_anm','yyyy-mm-dd'),
  $tipo_recurso,
  $valor_anm,
  $principal                                         
)                                  
EOD;


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

                if ($tipo_recurso == 1) {

                    $sql = <<<EOD

INSERT INTO RVC_RPS_CDPS_CONTRATO
(
  ID_RPS_CDPS_CONTRATO,
  ID_CONTRATO,
  NUM_CONTRATO,
  ESTADO,
  RP,
  FECHA_RP,
  CDP,
  FECHA_CDP,
  TIPO_RECURSO,
  VALOR_RP,
  PRINCIPAL                                         
)
VALUES
(
null,
  $id_contrato,
  '$num_contrato',
  $estado,
  $rp_sgr,
  to_date('$fecha_rp_sgr','yyyy-mm-dd'),
  $cdp_sgr,
  to_date('$fecha_cdp_sgr','yyyy-mm-dd'),  
  $tipo_recurso,
  $valor_sgr,
  $principal                                         
)                                  
EOD;
                    $this->conn->execute($sql);
                }

                if ($tipo_recurso == 2) {

                    $sql = <<<EOD

INSERT INTO RVC_RPS_CDPS_CONTRATO
(
  ID_RPS_CDPS_CONTRATO,
  ID_CONTRATO,
  NUM_CONTRATO,
  ESTADO,
  RP,
  FECHA_RP,
  CDP,
  FECHA_CDP,
  TIPO_RECURSO,
  VALOR_RP,
  PRINCIPAL                                         
)
VALUES
(
null,
  $id_contrato,
  '$num_contrato',
  $estado,
  $rp_sgr,
  to_date('$fecha_rp_sgr','yyyy-mm-dd'),
  $cdp_sgr,
  to_date('$fecha_cdp_sgr','yyyy-mm-dd'),  
  1,
  $valor_sgr,
  $principal                                         
)                                  
EOD;
                    $this->conn->execute($sql);

                    $sql = <<<EOD

INSERT INTO RVC_RPS_CDPS_CONTRATO
(
  ID_RPS_CDPS_CONTRATO,￼
  ID_CONTRATO,
  NUM_CONTRATO,
  ESTADO,
  RP,
  FECHA_RP,
  CDP,
  FECHA_CDP,
  TIPO_RECURSO,
  VALOR_RP,
  PRINCIPAL
)
VALUES
(
null,
  $id_contrato,
  '$num_contrato',
  $estado,
  $rp_anm,
  to_date('$fecha_rp','yyyy-mm-dd'),
  $cdp_anm,
  to_date('$fecha_cdp_anm','yyyy-mm-dd'),
  0,
  $valor_anm,
  $principal                                         
)                                  
EOD;


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

                //COMMIT DE TODAS LAS TRANSACCIONES
                $this->conn->commit();
                $logger->info("COMMIT DE TODAS LAS TRANSACCIONES");
            } catch (Exception $ex) {

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

        //accion update
        if ($Action == "UPDATE") {
            if (isset($request['bandera_editar']) && $request['bandera_editar']) {
                $logger->info("[registro_contrato] UPDATE bandera_editar");
                $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                $this->conn->beginTransaction();
                $estado = $list_data_post[0]['estado'] == 1 ? 1 : 0;
                $id_contratista = $list_data_post[0]['id_contratista'];
                $sql = <<<EOD
update RVC_CONTRATISTA 
    set estado = (select case when count(*) > 0 then 1 else 0 end as estado
from rvc_contrato where id_contratista = $id_contratista
and estado = 1) 
        where id_contratista = $id_contratista        
EOD;
                $this->conn->execute($sql);
                $this->conn->commit();
            } else {
                $logger->info("[registro_contrato] UPDATE else bandera_editar");
                $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                $this->conn->beginTransaction();
                try {
                    $id_contrato = $list_data_post[0]['id_contrato'];
                    $id_contratista = $list_data_post[0]['id_contratista'];
                    $fecha_rp = $list_data_post[0]['fecha_rp'];
                    $rp_anm = $list_data_post[0]['rp_anm'];
                    $rp_sgr = $list_data_post[0]['rp_sgr'];
                    $fecha_rp_sgr = $list_data_post[0]['fecha_rp_sgr'];
                    $valor_anm = $list_data_post[0]['valor_anm'];
                    $valor_sgr = $list_data_post[0]['valor_sgr'];
                    $estado = $list_data_post[0]['estado'] == 1 ? 1 : 0;
                    $adjunto_arl = $list_data_post[0]['adjunto_arl'];
                    

                    if (!isset($list_data_post[0]['rp_anm'])) {
                        $rp_anm = 'null';
                    }

                    if (!isset($list_data_post[0]['rp_sgr'])) {
                        $rp_sgr = 'null';
                    }
                    // ACtualizamos estado contratista segun el estado del contrato
                    // Activamos contratista en RVC a
                    $logger->info("[registro_contrato] Estableces estado contratista $id_contratista a: $estado");
                    $sql = <<<EOD
update RVC_CONTRATISTA 
    set estado = (select case when count(*) > 0 then 1 else 0 end as estado
from rvc_contrato where id_contratista = $id_contratista
and estado = 1)   
        where id_contratista = $id_contratista        
EOD;
                    $this->conn->execute($sql);
                    // Copiamos archivo ARL entre carpetas si esta establecido
                    if(isset($list_data_post[0]['adjunto_arl'])) {
                        $adjunto_arl = $list_data_post[0]['adjunto_arl'];
                        $ruta_origen = getcwd() . "/../../../radicacionvirtualcuentasphp/web/uploads/adj_contrato/";
                        $ruta_destino = getcwd() . "/../../../radicacionvirtualcuentasphp/web/uploads/adj_contratistas/";
                        copy($ruta_origen . $adjunto_arl, $ruta_destino . $adjunto_arl);
                    }

                    $sql = <<<EOD
SELECT tab0.num_doc AS nitocc
FROM RVC_CONTRATISTA tab0
WHERE 1=1 AND tab0.id_contratista=$id_contratista                              
EOD;

                    $res = CN_TABLE::executeSQL($sql);
                    $nitocc = $res[0]['nitocc'];


                    /**
                     * Se valida si existe el tercero no se borra, ni se crea - 20200326 LAVILA
                     */
                    $sql = <<<EOD
select * FROM TERCEROS WHERE 1=1 AND NITOCC = '$nitocc'                              
EOD;
                    $ter = CN_TABLE::executeSQL($sql);

                    if (count($ter) > 0) {
                        $id_contratista = $list_data_post[0]['id_contratista'];

                        if ($entidadCliente == 1 || $entidadCliente == 2) {
                            $sql = <<<EOD
                               
    SELECT tab0.num_doc AS nitocc,
       NVL(tab0.id_tip_ter,1) AS tipter,
       tab0.razon_social AS razsoc,
       tab2.nombre AS ciudad,
       NVL(tab0.telefono,'') AS telefo,
       NVL(tab0.telefono,'') AS telfax,
       NVL(tab0.direccion,'') AS direcc,
       tab0.estado AS estado,
       NVL(tab0.correo,'') AS email,
       NVL(tab3.valor_mensualizado,0) AS sueldo,
       '' AS cargo,
       '' AS codreg,
       3 AS id_tipo_traba_contra,
       to_char(SYSDATE,'yyyy-mm-dd') AS fecha_act,
       '' AS cargo_texto
FROM RVC_CONTRATISTA tab0
  LEFT JOIN CIUDAD tab2 ON tab0.id_ciudad = tab2.id
  LEFT JOIN (SELECT tab4.*
             FROM (SELECT aut.*,
                          ROW_NUMBER() OVER (PARTITION BY aut.id_contratista ORDER BY aut.fecha_contrato DESC) AS rn
                   FROM RVC_CONTRATO aut) tab4
             WHERE 1 = 1
             AND   tab4.rn = 1) tab3 ON tab3.id_contratista = tab0.id_contratista
WHERE 1 = 1      AND tab0.id_contratista=$id_contratista                     
EOD;


                            $contratista = CN_TABLE::executeSQL($sql);
                            $tipter = $contratista[0]['tipter'];
                            $razon_soc = $contratista[0]['razsoc'];
                            $ciudad = $contratista[0]['ciudad'];
                            $telefono = $contratista[0]['telefo'];
                            $telfax = $contratista[0]['telfax'];
                            $direc = $contratista[0]['direcc'];
                            $estado = $contratista[0]['estado'];
                            $email = $contratista[0]['email'];
                            $sueldo = $contratista[0]['sueldo'];
                            $cargo = $contratista[0]['cargo'];
                            $codigo_reg = $contratista[0]['codreg'];
                            $tipo_traba_contra = $contratista[0]['id_tipo_traba_contra'];
                            $fecha_act = $contratista[0]['fecha_act'];
                            $cargo_text = $contratista[0]['cargo_texto'];

                            $sql = <<<EOD
    UPDATE TERCEROS
   SET TIPTER = '$tipter',
       RAZSOC = '$razon_soc',
       CIUDAD = '$ciudad',
       TELEFO = '$telefono',
       TELFAX = '$telfax',
       DIRECC = '$direc',
       ESTADO = $estado,
       EMAIL = '$email',
       SUELDO = $sueldo,
       CARGO = '$cargo',
       CODREG = '$codigo_reg',
       ID_TIPO_TRABA_CONTRA = $tipo_traba_contra,
       FECHA_ACT = to_date('$fecha_act','yyyy-mm-dd'),
       CARGO_TEXTO = '$cargo_text'
WHERE NITOCC = '$nitocc'
EOD;



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


                        $sql = <<<EOD
INSERT INTO TERCEROS
(
  NITOCC,
  TIPTER,
  RAZSOC,
  CIUDAD,
  TELEFO,
  TELFAX,
  DIRECC,
  ESTADO,
  EMAIL,
  SUELDO,
  CARGO,
  CODREG,
  ID_TIPO_TRABA_CONTRA,
  FECHA_ACT,
  CARGO_TEXTO
)
SELECT tab0.num_doc AS nitocc,
       NVL(tab0.id_tip_ter,1) AS tipter,
       tab0.razon_social AS razsoc,
       tab2.nombre AS ciudad,
       NVL(tab0.telefono,'') AS telefo,
       NVL(tab0.telefono,'') AS telfax,
       NVL(tab0.direccion,'') AS direcc,
       tab0.estado AS estado,
       NVL(tab0.correo,'') AS email,
       NVL(tab3.valor_mensualizado,0) AS sueldo,
       '' AS cargo,
       '' AS codreg,
       3 AS id_tipo_traba_contra,
       SYSDATE AS fecha_act,
       '' AS cargo_texto
FROM RVC_CONTRATISTA tab0
  LEFT JOIN TERCEROS tab1 ON tab0.num_doc = tab1.nitocc
  LEFT JOIN CIUDAD tab2 ON tab0.id_ciudad = tab2.id
  LEFT JOIN (SELECT tab4.*
             FROM (SELECT aut.*,
                          ROW_NUMBER() OVER (PARTITION BY aut.id_contratista ORDER BY aut.fecha_contrato DESC) AS rn
                   FROM RVC_CONTRATO aut) tab4
             WHERE 1 = 1
             AND   tab4.rn = 1) tab3 ON tab3.id_contratista = tab0.id_contratista
WHERE 1 = 1
AND   tab1.nitocc IS NULL    
EOD;

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

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

                    $sql = <<<EOD
DELETE
FROM RVC_RPS_CDPS_CONTRATO
WHERE ID_CONTRATO = $id_contrato AND PRINCIPAL=1 AND NUM_CONTRATO='$num_contrato'
EOD;
                    $this->conn->execute($sql);


                    $sql = <<<EOD
                                 
insert into RVC_RPS_CDPS_CONTRATO(id_contrato,num_contrato,estado,rp,fecha_rp,cdp,fecha_cdp,tipo_recurso,valor_rp,principal)(
select distinct id_contrato,num_contrato,1 as estado,rp_anm as rp,fecha_rp as fecha_rp,nvl(cdp_anm,0) as cdp,fecha_cdp_anm as fecha_cdp,0 as recurso,valor_anm as valor,1 as principal
from rvc_contrato
where rp_anm is not null and ID_CONTRATO = $id_contrato AND NUM_CONTRATO='$num_contrato'
UNION
select distinct id_contrato,num_contrato,1 as estado,rp_sgr as rp,nvl(fecha_rp_sgr,fecha_rp) as fecha_rp,nvl(cdp_sgr,nvl(cdp_anm,0)) as cdp,nvl(fecha_cdp_sgr,fecha_cdp_anm) as fecha_cdp,1 as recurso,valor_sgr as valor, 1 as principal
from rvc_contrato
where rp_sgr is not null and ID_CONTRATO = $id_contrato AND NUM_CONTRATO='$num_contrato')
EOD;
                    $this->conn->execute($sql);

                    $sql = <<<EOD
select 
* 
from rvc_acta_inicio
where
 id_contrato = $id_contrato 
EOD;

                    $results = CN_TABLE::executeSQL($sql);
                    $logger->info("Entro a postprocessRequest resultados query - " . count($results));

                    if (count($results) > 0) {
                        //obtenemos el id del acta de inicio a actualizar
                        $id_acta_inicio = $results[0]['id_acta_inicio'];
                        //obtenemos los datos a actualizar
                        //$rp_anm = 'null';
                        //if (isset($request['rp_anm'])) {
                        //    $rp_anm = $request['rp_anm'];
                        //}
                        $num_contrato = $request['num_contrato'];
                        $id_tipo_contrato = $request['id_tipo_contrato'];
                        $fecha_contrato = $request['fecha_contrato'];
                        $fecha_ini = $request['fecha_ini'];
                        $fecha_fin = $request['fecha_fin'];
                        $objeto = $request['objeto'];
                        $rp_anm = empty($request['rp_anm']) ? 'null' : $request['rp_anm'];
                        $rp_sgr = empty($request['rp_sgr']) ? 'null' : $request['rp_sgr'];
                        $cdp_anm = empty($request['cdp_anm']) ? 'null' : $request['cdp_anm'];
                        $cdp_sgr = empty($request['cdp_sgr']) ? 'null' : $request['cdp_sgr'];
                        $valor_anm = $request['valor_anm'];
                        $valor_sgr = $request['valor_sgr'];
                        $fecha_rp = $request['fecha_rp'];
                        $fecha_cdp_sgr = $request['fecha_cdp_sgr'];
                        $fecha_cdp_anm = $request['fecha_cd_anm'];
                        $fecha_rp_sgr = $request['fecha_rp_sgr'];
                        $fecha_poliza = $request['fecha_poliza'];
                        $id_area = $request['id_area'];
                        $fecha_plazo = $request['fecha_plazo'];
                        $numero_pago = $request['numero_pago'];
                        $valor_mensualizado = $request['valor_mensualizado'];
                        $id_supervisor = $request['id_supervisor'];
                        //$meses_plazo = $request['meses_plazo'];
                        //$dias_plazo = $request['dias_plazo'];
                        //Establecemos fecha de inicio actividades segun lo requerido
                        //Fecha mayor entre Fecha_rp(anm,sgr o ambas,fecha afilia arl o fecha poliza) con la siguiente consulta
                        $sql = <<<EOD
select 
nvl( to_char(case 
  when a.tipo_recurso= 0 then 
    case
      when a.fecha_rp > a.fecha_poliza then
        case when a.fecha_rp > b.fecha_afilia_arl then a.fecha_rp
            else b.fecha_afilia_arl end
      else 
        case when a.fecha_poliza > b.fecha_afilia_arl then a.fecha_poliza 
            else b.fecha_afilia_arl end
      end
  when a.tipo_recurso= 1 then 
    case
      when a.fecha_rp_sgr > a.fecha_poliza then
        case when a.fecha_rp_sgr > b.fecha_afilia_arl then a.fecha_rp_sgr
            else b.fecha_afilia_arl end
      else 
        case when a.fecha_poliza > b.fecha_afilia_arl then a.fecha_poliza 
            else b.fecha_afilia_arl end
      end
  when a.tipo_recurso= 2 then 
    case when a.fecha_rp > a.fecha_rp_sgr then
      case
        when a.fecha_rp > a.fecha_poliza then
          case when a.fecha_rp > b.fecha_afilia_arl then a.fecha_rp
              else b.fecha_afilia_arl end
        else 
          case when a.fecha_poliza > b.fecha_afilia_arl then a.fecha_poliza 
              else b.fecha_afilia_arl end
        end
    else
      case
        when a.fecha_rp_sgr > a.fecha_poliza then
          case when a.fecha_rp_sgr > b.fecha_afilia_arl then a.fecha_rp_sgr
              else b.fecha_afilia_arl end
        else 
          case when a.fecha_poliza > b.fecha_afilia_arl then a.fecha_poliza 
              else b.fecha_afilia_arl end
        end
    end
  else a.fecha_rp end,'yyyy-mm-dd') , a.fecha_poliza) as fecha_inicio_actividades
                    
from rvc_contrato a
join rvc_contratista b on a.id_contratista=b.id_contratista                            
where a.id_contrato =  $id_contrato
EOD;
                        $results = CN_TABLE::executeSQL($sql);
                        $tipo_recurso = 0;
                        $tipo_recurso = $results[0]['tipo_recurso'];
                        if (count($results) > 0) {
                            $fecha_inicio_actividades = $results[0]['fecha_inicio_actividades'];
                        } else {
                            $fecha_inicio_actividades = $fecha_ini;
                        }

                        //Se verifica actualizacion formato fecha y campos - 20200326 LAVILA
                        $sql = <<<EOD
update rvc_acta_inicio 
    
   set
num_contrato = '$num_contrato',
id_tipo_contrato = $id_tipo_contrato,
fecha_contrato = to_date('$fecha_ini','yyyy-mm-dd'),
fecha_ini = to_date('$fecha_ini','yyyy-mm-dd'),
fecha_fin = to_date('$fecha_fin','yyyy-mm-dd'),
objeto = '$objeto',
rp_anm = $rp_anm,
rp_sgr = $rp_sgr,
valor_anm = '$valor_anm',
valor_sgr = '$valor_sgr',
fecha_rp = to_date('$fecha_rp','yyyy-mm-dd'),
fecha_rp_sgr = to_date('$fecha_rp_sgr','yyyy-mm-dd'),
fecha_poliza = to_date('$fecha_poliza','yyyy-mm-dd'),
id_area = $id_area,
fecha_plazo = '$fecha_plazo',
numero_pago = $numero_pago,
valor_mensualizado = $valor_mensualizado,
id_supervisor = $id_supervisor,
cdp_anm = $cdp_anm,
fecha_cdp_anm = to_date('$fecha_cdp_anm','yyyy-mm-dd'),
cdp_sgr = $cdp_sgr ,
fecha_cdp_sgr = to_date('$fecha_cdp_sgr','yyyy-mm-dd'),
fecha_inicio_actividades = to_date('$fecha_inicio_actividades','yyyy-mm-dd') 
    
where 
    id_acta_inicio = $id_acta_inicio

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

                        //COMMIT DE TODAS LAS TRANSACCIONES
                        $this->conn->commit();
                        $logger->info("COMMIT DE TODAS LAS TRANSACCIONES");
                    }
                } catch (Exception $e) {

                    //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                    $this->conn->rollback();
                    $logger->info("ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR");
                }
            }
        }
        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

}
