<?php

/**
 * formato_proyecto actions.
 *
 * @package    radicacionVirtualCuentas
 * @subpackage formato_proyecto
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class formato_proyectoActions extends sfActions {

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

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        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");

        /*
         * Manejo de errores
         */
        try {


            //Parametro de filtro
            $whereFormatoPago = "";
            if (isset($request['id_formato_pago'])) {
                $id_formato_pago = $request['id_formato_pago'];
                $whereFormatoPago = "and tab0.id_formato_pago = " . $id_formato_pago;
            }
            $whereProyectoEP = "";
            if (isset($request['id_proyecto_ep'])) {
                $id_proyecto_ep = $request['id_proyecto_ep'];
                $whereProyectoEP = "and tab0.id_proyecto_ep = " . $id_proyecto_ep;
            }

            /**
             * Solo si es la primera vez de ingreso y no tiene registros de dependencias
             */
            if (isset($request['id_formato_pago'])) {
                $id_formato_pago = $request['id_formato_pago'];

                //consulta
                $sql = <<<EOD
select   
tab0.*
from rvc_formato_proyecto tab0

where  
tab0.id_formato_pago = $id_formato_pago 
EOD;

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

                if (count($records) <= 0) {

                    /*
                     * Crear detalle segun contrato de contratacion si aplica
                     */

                    //insert
                    $sql = <<<EOD
insert into rvc_formato_proyecto (ID_FORMATO_PAGO,ID_PROYECTO_EP,ID_CPO,ID_ESTUDIOS_PREVIOS,VALOR,SGR)

select distinct 

formt.id_formato_pago,
proy.id_proyecto_ep,
proy.id_cpo,
proy.id_estudios_previos,
0 as valor,
proy.sgr
                            
/*
sel.id_estudios_previos,
contco.id_seleccion_ep,
cont.id_co_contrato,
formt.*
*/
                            
from rvc_formato_pago formt

join rvc_contrato cont
on cont.id_contrato = formt.id_contrato

join co_contrato contco
on contco.id_contrato = cont.id_co_contrato

join co_seleccion_ep sel
on sel.id_seleccion_ep = contco.id_seleccion_ep

join co_proyecto_ep proy
on proy.id_estudios_previos = sel.id_estudios_previos

where
formt.id_formato_pago = $id_formato_pago 
EOD;

                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                    
                    /**
                     * Copias de vigencias anteriores registros de rp y uso, valor = 0 - 20220111::LAVILA
                     */
                    //insert
                    $sql = <<<EOD
insert into rvc_formato_proy_rp(ID_FORMATO_PAGO,ID_PROYECTO_EP,ID_RP,
VIGENCIA_RP,IS_RP_SGR,ID_RUBRO,ID_ELEMENTOS_GASTO,VALOR,
ID_TIPO_REC,TIPO_GASTO,TIPO_OPERACION,USO_CONTABLE,CUENTA_CONTABLE)

select distinct 

formt.id_formato_pago,
proyfp.id_proyecto_ep,
proyfp.id_rp,
proyfp.vigencia_rp,
proyfp.is_rp_sgr,
proyfp.id_rubro,
proyfp.id_elementos_gasto,
0 as valor,
proyfp.id_tipo_rec,
proyfp.tipo_gasto,
proyfp.tipo_operacion,
proyfp.uso_contable,
proyfp.cuenta_contable                       
                            
from rvc_formato_pago formt

join rvc_contrato cont
on cont.id_contrato = formt.id_contrato

join co_contrato contco
on contco.id_contrato = cont.id_co_contrato

join co_seleccion_ep sel
on sel.id_seleccion_ep = contco.id_seleccion_ep

join co_proyecto_ep proy
on proy.id_estudios_previos = sel.id_estudios_previos

join rvc_formato_proy_rp proyfp
on proyfp.id_proyecto_ep = proy.id_proyecto_ep

where
formt.id_formato_pago = $id_formato_pago
and proyfp.vigencia_rp < formt.id_anhos 
EOD;

                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                }
            }



            /*
             * Guardar log general
             */
            $request['id_usuario_log'] = $request['id_username'];

            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 1;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RVC_FORMATO_PROYECTO');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, "Solicitud anulacion movimiento $id_movimientos_con de $id_vigencia");


            /**
             * Consulta 
             * Se quita relacion a EP ya que no es necesario - 20210831::LAVILA
             */
            $sql = <<<EOD
select   
tab0.id_formato_pago,
tab0.id_proyecto_ep as id_proyecto_ep, tab0.id_estudios_previos as id_estudios_previos, 
tab0.id_cpo as id_cpo, tab0.valor as valor, tab0.sgr as sgr, 

--tab1.proceso as proceso, tab1.modalidad as modalidad, 
tab2.codigo as codigo_proyecto, 
tab2.descripcion as descripcion_proyecto, tab2.codigo||' - '||tab2.descripcion as completo_proyecto, tab2.ano_fiscal as ano_fiscal 

from rvc_formato_proyecto tab0

--left join co_proyecto_ep tab3 on tab0.id_proyecto_ep = tab3.id_proyecto_ep
--left join co_estudios_previos_v tab1 on tab0.id_estudios_previos = tab1.id_estudios_previos  
left join co_proyectos_all_v tab2 on tab0.id_cpo = tab2.id and tab0.sgr = tab2.sgr 

where  
tab0.id_formato_pago != '-1' 
$whereFormatoPago
$whereProyectoEP                     
                    
order by 
tab0.id_formato_pago,
tab0.sgr,
tab2.codigo 
EOD;

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

            //respuesta
            $this->status = 0;
            $this->list_data = $records;
        } catch (Exception $e) {

            // Fin del proceso
            $this->status = 1;
            $this->mensajeError = "[formato_proyecto] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[formato_proyecto] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * UPDATE del valor
     * @param sfWebRequest $request
     */
    public function executeUpdate(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        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");

        /*
         * Manejo de errores
         */
        try {


            //Parametro de filtro
            $id_formato_pago = $request['id_formato_pago'];
            $id_proyecto_ep = $request['id_proyecto_ep'];
            $valor = $request['valor'];


            /*
             * El valor sumado en los proyectos no puede pasar el valor total de la cuenta de cobro
             */
            //consulta
            $sql = <<<EOD
select  
tab0.id_formato_pago,
sum(tab0.valor) + nvl('$valor',0) as valor_sum,
max(formt.valor_a_pagar) 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 
and tab0.id_proyecto_ep != $id_proyecto_ep 

having
max(formt.valor_a_pagar) <= ( sum(tab0.valor) + nvl('$valor',0) )

group by
tab0.id_formato_pago   
EOD;

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

            if (count($records) > 0) {
                throw new Exception("</br>El valor sumado en los proyectos no puede pasar el valor total de la cuenta de cobro, verificar.");
            }


            /*
             * Crear detalle segun contrato de contratacion si aplica
             */

            //insert
            $sql = <<<EOD
update rvc_formato_proyecto set valor = nvl('$valor',0)
where
id_formato_pago = $id_formato_pago
and id_proyecto_ep = $id_proyecto_ep 
EOD;

            //ejecuta el sql
            CN_TABLE::executeSQL($sql);



            /*
             * Guardar log general
             */
            $request['id_usuario_log'] = $request['id_username'];

            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 2;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RVC_FORMATO_PROYECTO');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, "Actualizacion del proyecto del pago id: $id_formato_pago");

            // Se quita relacion a EP ya que no es necesario - 20210831::LAVILA
            //consulta
            $sql = <<<EOD
select   
tab0.id_formato_pago,
tab0.id_proyecto_ep as id_proyecto_ep, tab0.id_estudios_previos as id_estudios_previos, 
tab0.id_cpo as id_cpo, tab0.valor as valor, tab0.sgr as sgr, 

--tab1.proceso as proceso, tab1.modalidad as modalidad, 
tab2.codigo as codigo_proyecto, 
tab2.descripcion as descripcion_proyecto, tab2.codigo||' - '||tab2.descripcion as completo_proyecto, tab2.ano_fiscal as ano_fiscal 

from rvc_formato_proyecto tab0

--left join co_proyecto_ep tab3 on tab0.id_proyecto_ep = tab3.id_proyecto_ep
--left join co_estudios_previos_v tab1 on tab0.id_estudios_previos = tab1.id_estudios_previos  
left join co_proyectos_all_v tab2 on tab0.id_cpo = tab2.id and tab0.sgr = tab2.sgr 

where  
tab0.id_formato_pago = $id_formato_pago  
and tab0.id_proyecto_ep = $id_proyecto_ep                       
                    
order by 
tab0.id_formato_pago,
tab0.sgr,
tab2.codigo 
EOD;

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

            //respuesta
            $this->status = 0;
            $this->list_data = $records;
        } catch (Exception $e) {

            // Fin del proceso
            $this->status = 1;
            $this->mensajeError = "[formato_proyecto] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[formato_proyecto] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
