<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of actions
 *
 * @author ManuelEnriqueParedesLopez
 */
class permitir_registrar_formato_pagoActions extends sfActions {

    /**
     * 
     * @param sfWebRequest $request
     */
    public function executeList(sfWebRequest $request) {

        $this->logMessage("---function executeList");
        $this->logMessage("---BEGIN Logging request");

        $status = 0;

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

        $bandera = true;


        $records = array();

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

            $int = 0;
            foreach ($array as $routeName => $routeData) {
                //echo $routeName . "\n";
                if ('entidad_cliente' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadCliente = $value;
                        }
                    }
                }
                $int++;
            }

            $entidad_cliente = $entidadCliente;
        /*
         * 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 {


            //id del contrato
            $id_contrato;
            if (isset($request['id_contrato'])) {
                $id_contrato = $request['id_contrato'];
            }

            //id del contratista
            $id_contratista;
            if (isset($request['id_contratista'])) {
                $id_contratista = $request['id_contratista'];
            }

            /*             * Valida que pueda registrar un formato de pago* */
            // Validar Registro de RUT si aplica_rut_update
            $sql = <<<EOD
select 
tab1.aplica_rut_update,
case when tab1.aplica_rut_update=1 and tab1.fecha_rut_update > nvl(tab0.fecha_genera_rut,tab1.fecha_rut_update-1) then 1 else 0 end as viola_fecha_rut_min                 
from rvc_contratista_v tab0
left join rvc_param_gen tab1 on tab1.id=1
where id_contratista = $id_contratista
EOD;
            $resultado = CN_TABLE::executeSQL($sql);

            $validacion_rut = $resultado[0]['viola_fecha_rut_min'];
            if ($validacion_rut == "1") {
                $bandera = false;
                $records[0]['mensaje'] = "Estimado (a) contratista recuerde realizar la actualización de su RUT, en Actualización de Datos Contratista.";
            } 
            if ($entidad_cliente == 1) {
            //Validación Formato de pago
                        $sql = <<<EOD
SELECT 
tab0.ID_ANHOS                 as "id_anhos",
tab0.ID_CONTRATISTA           as "id_contratista",
tab0.ID_CONTRATO              as "id_contrato",
1                             as "valid_formato_pago_cont"
FROM RVC_FORMATO_PAGO tab0
WHERE 
tab0.id_contrato = $id_contrato
AND tab0.id_contratista = $id_contratista
AND tab0.estado      = 1
EOD;
            $resultado_valid_for = CN_TABLE::executeSQL($sql);

                if (count($resultado_valid_for) == 0) {
                    // Validación Novedad del Contratista
                    $sql = <<<EOD
SELECT 
tab0.ID_ANHOS                 as "id_anhos",
tab0.ID_CONTRATISTA           as "id_contratista",
tab0.ID_CONTRATO              as "id_contrato",
1                             as "actualizacion_nov_cont"
FROM RVC_CONTRATO tab0
JOIN RVC_NOVEDAD_CONTRATISTA tab2 ON tab0.id_contratista = tab2.id_contratista
WHERE 1 = 1 
AND tab0.id_contrato = $id_contrato
AND tab2.id_contratista = $id_contratista
AND tab2.fecha_log >= tab0.fecha_ini
EOD;
                    $resultado_nov_cont = CN_TABLE::executeSQL($sql);
                    
                        if (count($resultado_nov_cont) == 0) {
                            $bandera = false;
                            $records[0]['mensaje'] = "No es posible registrar el formato de pago, debe realizar actualizacion de datos antes de realizar esta accion.";
                        } 
                
                }
            }
            
            /**
             * Validar dependientes segun rango de años - 20210421::LAVILA
             */
            $sql = <<<EOD
SELECT
cont.id_contratista,
cont.num_doc,
decnov.dependiente,
decnov.id_declara_jura_nov

FROM rvc_contratista  cont

left join rvc_declara_jura_nov decnov
on  decnov.id_contratista = cont.id_contratista

where cont.id_contratista = $id_contratista
and decnov.firmado = 1

order by
decnov.fecha_log desc 
EOD;
            $resultado_depend = CN_TABLE::executeSQL($sql);

            if (count($resultado_depend) > 0) {

                $id_declara_jura_nov = $resultado_depend[0]['id_declara_jura_nov'];
                $dependiente = $resultado_depend[0]['dependiente'];

                if ($dependiente) {
                    
                    //Validar que hay rango de años - 20210506                    
                    $sql = <<<EOD
SELECT
det.id_declara_jura_novdet,
det.num_doc,
det.id_tipo_condic_depend,
det.fecha_nacimiento,
extract(year from det.fecha_nacimiento) as anho_nac,
FLOOR(MONTHS_BETWEEN(sysdate,det.fecha_nacimiento)/12) as edad,
tip.rango_desde,
tip.rango_hasta,
case when 
FLOOR(MONTHS_BETWEEN(sysdate,det.fecha_nacimiento)/12) >=  nvl(tip.rango_desde,0)
and FLOOR(MONTHS_BETWEEN(sysdate,det.fecha_nacimiento)/12) <= nvl(tip.rango_hasta,999)
then 1
else 0 end as validacion

FROM rvc_declara_jura_novdet det

left join rvc_tipo_condic_depend tip
on tip.id_tipo_condic_depend = det.id_tipo_condic_depend

where
id_declara_jura_nov = $id_declara_jura_nov  
and det.fecha_nacimiento is not null  
and (tip.rango_desde is not null or tip.rango_hasta is not null)    
EOD;
                    $resultado_depend_det = CN_TABLE::executeSQL($sql);
                    //Cantidad mayor a 0 registros - 20210506
                    if (count($resultado_depend_det) > 0) {
                        $validacion_depend = $resultado_depend_det[0]['validacion'];
                        if ($validacion_depend == 0) {
                            $bandera = false;
                            $records[0]['mensaje'] = "Estimado (a) contratista recuerde realizar actualización del registro de sus dependientes.";
                        }
                    }
                }
            }

            $records[0]['paso'] = $bandera;
            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[permitir_registrar_formato_pago] Exitoso");
        } catch (Exception $e) {
            $this->status = 1;
            $this->mensajeError = "[permitir_registrar_formato_pago] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[permitir_registrar_formato_pago] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
