<?php

require_once(dirname(__FILE__) . '/../../../../../plugins/bhLDAPAuthPlugin/lib/adLDAP.php');

/**
 * Creado: 20190911
 * Link: http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/webservie_sigm_causacion/list.json?num_doc=0011112&id_tipo_doc=1&id_nat_jur=22&id_tip_ter=1&razon_soc=&direccion=CALLE&ciudad=BOG&email=facweb@sof&telefono=4564&id_punto_venta=4&valor_bruto=1230&valor_iva=0&valor_total=1230&observaciones=asf asfas&cod_bar=1214987498498&id_producto=1&cantidad=1&codigo_titulo=ASD-789&id_tip_mon=1&dias_pago=1&id_mineral=1&id_etapa=1&anualidad=2&periodo_ini=2019-09-01&periodo_fin=2020-09-01&valor_uni_bruto=1230&valor_uni_iva=0&valor_uni_total=1230
 * webservie_sigm_causacion actions.
 *
 * @package    cartera
 * @subpackage webservie_sigm_causacion
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class validar_proyectos_rvcActions extends sfActions {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        $array = sfYaml::load(dirname(__FILE__) . '/../../../../api/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++;
        }
        $tag_ent_sgr = '';
        if ($entidadCliente == "2") {
            $tag_ent_sgr = '.ANM.LOCAL';
        }
        $id_contrato = $request['id_contrato'];
        $rp_anm = !empty($request['rp_anm']) ? $request['rp_anm'] : 'null';
        $rp_sgr = !empty($request['rp_sgr']) ? $request['rp_sgr'] : 'null';
        
        try {
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();
            
            if ($rp_anm != 'null') {
                // Validamos que el RP este asociado al contrato RVC
                // Si no esta asociado se genera una excepcion
                $sql = <<<EOD
Select * 
from RVC_RPS_CDPS_CONTRATO  
where rp = $rp_anm  and id_contrato = $id_contrato and tipo_recurso = 0
EOD;
                $result = CN_TABLE::executeSQL($sql);
                if (count($result) > 0) {
                    // Confirmamos que el RP PGN esta asociado en contratos si no hacemos la asociacion
                    $sql = <<<EOD
select * 
from co_legaliza_contrato
where id_rp = $rp_anm 
    and rp_sgr = 0 
    and id_contrato = (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato)
EOD;
                    $result = CN_TABLE::executeSQL($sql);
                    if (count($result) == 0) { // Si no existe
                        // Agregamos Registro RP en CO_LEGALIZA_CONTRATO
                        $sql = <<<EOD
INSERT INTO CO_LEGALIZA_CONTRATO(ID_CONTRATO,ID_RP,FECHA_APRUEBA_POLIZA,FECHA_INICIO,FECHA_TERMINACION,RP_SGR,VIGENCIA_RP)
select 
    (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato) as ID_CONTRATO,
    $rp_anm,    
    leg.FECHA_APRUEBA_POLIZA,leg.FECHA_INICIO,leg.FECHA_TERMINACION,
    0 as SGR,
    rp.vigencia
FROM (select max(FECHA_APRUEBA_POLIZA) as FECHA_APRUEBA_POLIZA,
    max(FECHA_INICIO) as FECHA_INICIO,max(FECHA_TERMINACION) as FECHA_TERMINACION 
        from CO_LEGALIZA_CONTRATO where id_contrato = (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato))leg
    left join RPS_CONTRATO_V rp on rp.id = $rp_anm and rp.estado = 1 and rp.sgr = 0 and rp.vigencia >= 2020
                              
EOD;
                        $this->conn->execute($sql);
                    }
                    // Validamos que todos los proyectos asociados al RP existan en CO_PROYECTO_EP
                    // Si no agregamos relacion
                    $sql = <<<EOD
select id_cpo from pr_rp_compromiso
        where id_rp = $rp_anm and vigencia >= 2020 group by id_rp,id_cpo                                    
EOD;
                    $result = CN_TABLE::executeSQL($sql);
                    foreach ($result as $rec) {
                        $id_cpo = $rec['id_cpo'];
                        $sql = <<<EOD
select * 
from co_proyecto_ep
where ID_CPO = $id_cpo
and id_estudios_previos = (select id_estudios_previos 
     from CO_SELECCION_EP 
     where id_seleccion_ep = (select ID_SELECCION_EP from co_contrato where id_contrato = 
         (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato)))
and SGR = 0
EOD;
                        $result = CN_TABLE::executeSQL($sql);
                        if (count($result) == 0) {
                            // Agregamos registro en tabla CO_PROYECTo_EP
                            $sql = <<<EOD
INSERT INTO CO_PROYECTO_EP(ID_CPO,ID_ESTUDIOS_PREVIOS,VALOR,SGR)
SELECT ID_CPO,
    (select id_estudios_previos 
     from CO_SELECCION_EP 
     where id_seleccion_ep = (select ID_SELECCION_EP from co_contrato where id_contrato = 
         (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato))) as ID_ESTUDIOS_PREVIOS,
    VALOR,
    0 as SGR
    from (select id_rp,id_cpo, sum(valor) as valor from pr_rp_compromiso 
        where id_rp = $rp_anm group by id_rp,id_cpo)
EOD;
                            $this->conn->execute($sql);
                        }
                    }
                } else {
                   throw new Exception("El RP $rp_anm no se encuentra asociado al contrato $id_contrato."); 
                }
            }
            if ($rp_sgr != 'null') {
                // Validamos que el RP este asociado al contrato RVC
                // Si no esta asociado se genera una excepcion
                $sql = <<<EOD
Select * 
from RVC_RPS_CDPS_CONTRATO  
where rp = $rp_sgr  and id_contrato = $id_contrato and tipo_recurso = 1
EOD;
                $result = CN_TABLE::executeSQL($sql);
                if (count($result) > 0) {
                    // Confirmamos que el RP PGN esta asociado en contratos si no hacemos la asociacion
                    $sql = <<<EOD
select * 
from co_legaliza_contrato
where id_rp = $rp_sgr
    and rp_sgr = 1 
    and id_contrato = (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato)
EOD;
                    $result = CN_TABLE::executeSQL($sql);
                    if (count($result) == 0) { // Si no existe
                        // Agregamos Registro RP en CO_LEGALIZA_CONTRATO
                        $sql = <<<EOD
INSERT INTO CO_LEGALIZA_CONTRATO(ID_CONTRATO,ID_RP,FECHA_APRUEBA_POLIZA,FECHA_INICIO,FECHA_TERMINACION,RP_SGR,VIGENCIA_RP)
select 
    (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato) as ID_CONTRATO,
    $rp_sgr,    
    leg.FECHA_APRUEBA_POLIZA,leg.FECHA_INICIO,leg.FECHA_TERMINACION,
    1 as SGR,
    rp.vigencia
FROM (select max(FECHA_APRUEBA_POLIZA) as FECHA_APRUEBA_POLIZA,
    max(FECHA_INICIO) as FECHA_INICIO,max(FECHA_TERMINACION) as FECHA_TERMINACION 
        from CO_LEGALIZA_CONTRATO where id_contrato = (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato))leg
    left join RPS_CONTRATO_V rp on rp.id = $rp_sgr and rp.estado = 1 and rp.sgr = 1 and rp.vigencia >= 2020            
EOD;
                        $this->conn->execute($sql);
                    }
                    // Validamos que todos los proyectos asociados al RP existan en CO_PROYECTO_EP
                    // Si no agregamos relacion
                    $sql = <<<EOD
select id_cpo from pr_rp_compromiso@PNG_SGR$tag_ent_sgr
        where id_rp = $rp_sgr and vigencia >= 2020 group by id_rp,id_cpo                                     
EOD;
                    $result = CN_TABLE::executeSQL($sql);
                    foreach ($result as $rec) {
                        $id_cpo = $rec['id_cpo'];
                        $sql = <<<EOD
select * 
from co_proyecto_ep
where ID_CPO = $id_cpo
and id_estudios_previos = (select id_estudios_previos 
     from CO_SELECCION_EP 
     where id_seleccion_ep = (select ID_SELECCION_EP from co_contrato where id_contrato = 
         (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato)))
and SGR = 1
EOD;
                        $result = CN_TABLE::executeSQL($sql);
                        if (count($result) == 0) {
                            // Agregamos registro en tabla CO_PROYECTo_EP
                            $sql = <<<EOD
INSERT INTO CO_PROYECTO_EP(ID_CPO,ID_ESTUDIOS_PREVIOS,VALOR,SGR)
SELECT ID_CPO,
    (select id_estudios_previos 
     from CO_SELECCION_EP 
     where id_seleccion_ep = (select ID_SELECCION_EP from co_contrato where id_contrato = 
         (select id_co_contrato from rvc_contrato where id_contrato = $id_contrato))) as ID_ESTUDIOS_PREVIOS,
    VALOR,
    1 as SGR
    from (select id_rp,id_cpo, sum(valor) as valor from pr_rp_compromiso@PNG_SGR$tag_ent_sgr
        where id_rp = $rp_sgr and vigencia >= 2020 group by id_rp,id_cpo)
EOD;
                            $this->conn->execute($sql);
                        }
                    }
                } else {
                   throw new Exception("El RP $rp_sgr no se encuentra asociado al contrato $id_contrato."); 
                }
                
            }
            $this->conn->commit();
            echo "Culmino el proceso correctamente contrato: $id_contrato - RPs: $rp_anm , $rp_sgr";
        }catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();
            echo $e->getMessage();
        }
        die();
    }

}
