<?php

/**
 * ts_td actions.
 *
 * @package    nomina
 * @subpackage ts_td
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class validar_proyectos_rpActions 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'];
        $id_formato_pago = $request['id_formato_pago'];
       
        // $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();
            // Consultamos los RPs del contrato
            $sql = <<<EOD
Select * from RVC_RPS_CDPS_CONTRATO where id_contrato = $id_contrato
EOD;
        
            $rpsContrato = CN_TABLE::executeSQL($sql);
            foreach ($rpsContrato as $rpRecord) {
                $rp = $rpRecord['rp'];
                $recurso = $rpRecord['tipo_recurso']; // 0 - PGN, 1 - SGR
                if($recurso == 0) {
                    $this->cargarProyectoPgn($rp, $id_contrato);
                } else {
                    $this->cargarProyectoSgr($rp, $id_contrato,$tag_ent_sgr);
                }
            }
            // Recargar Proyectos Formato pago
            $sql = <<<EOD
INSERT INTO RVC_FORMATO_PROYECTO(ID_FORMATO_PAGO,ID_PROYECTO_EP,ID_CPO,ID_ESTUDIOS_PREVIOS,VALOR,SGR)
select $id_formato_pago as id_formato_pago,id_proyecto_ep, id_cpo,id_estudios_previos,0,sgr
from CO_Proyecto_ep
where 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 id_proyecto_ep not in (select id_proyecto_ep from RVC_FORMATO_PROYECTO where id_formato_pago = $id_formato_pago)
EOD;
            $this->conn->execute($sql);
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
        }catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();
            $this->status = 1;
            $this->list_data = array(
                array(
                    'code' => $e->getCode(),
                    'mensaje' => $e->getMessage(),
                    'servicio' => 'webservie_sigm_causacion',
                    'modulo' => 'CARTERA',
                    'codigo_error' => $codigo_error
                )
            );
        }
    }
    
    private function cargarProyectoPgn($rp,$id_contrato) {
        // 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 
    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,    
    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 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 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;
            $record = CN_TABLE::executeSQL($sql);
            if (count($record) == 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 and id_cpo = $id_cpo and vigencia >= 2020 group by id_rp,id_cpo)
EOD;
                $this->conn->execute($sql);
            }
        }
    }
    
    private function cargarProyectoSgr($rp,$id_contrato,$tag_ent_sgr) {
        // 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
    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,    
    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 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 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;
            $record = CN_TABLE::executeSQL($sql);
            if (count($record) == 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 and id_cpo = $id_cpo and vigencia >= 2020 group by id_rp,id_cpo)
EOD;
                $this->conn->execute($sql);
            }
        }
    }
}
