<?php

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

    /**
     * Executes list 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");

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }

        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = ' Order by fecha_radicado, radicado';
        }
        $sortBy = ' ';

        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $id_formato_pago = $request['id_formato_pago'];

            /*
             * Variables opcionales
             */
            //id_contratista
            if (isset($request['id_contratista'])) {
                $whereIdContratista = " AND tab0.id_contratista = " . $request['id_contratista'];
            } else {
                $whereIdContratista = ' ';
            }
            //id_contrato
            if (isset($request['id_contrato'])) {
                $whereIdContrato = " AND tab0.id_contrato = " . $request['id_contrato'];
            } else {
                $whereIdContrato = ' ';
            }
            //id_numero_pago
            if (isset($request['id_numero_pago'])) {
                $whereIdNumeroPago = " AND tab0.id_numero_pago = " . $request['id_numero_pago'];
            } else {
                $whereIdNumeroPago = ' ';
            }

            //sentencia sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
            //ejecuta y obtiene el resultado del sql
            CN_TABLE::executeSQL($sql);

            /**
             * Consulta de pagos por fecha y estado aprobado
             * Recurso: 0-ANM 1-SGR
             * Cambiar  "Fecha Inicio de Pago"-"Fecha Aprobación Financiera:    - 20180822
             * Campo rubro_corto para filtro de TCON - 20220405
             */
            $consulta_sql = <<<EOD
select

tab0.id_formato_pago,
tab0.id_proyecto_ep,
tab0.id_rp,
tab0.vigencia_rp,
tab0.is_rp_sgr, 
tab0.id_rubro,
tab0.rubro, 
tab0.descripcion_rubro,
                    
nvl(SUBSTR( rubro, 0 , INSTR(rubro,'-',1,3)-1 ),rubro) as rubro_corto,

max(tab0.tipo_gasto) as tipo_gasto,
max(tab0.tipo_operacion) as tipo_operacion,
max(tab0.uso_contable) as uso_contable,
max(tab0.cuenta_contable) as cuenta_contable,

sum(tab0.valor) as valor

from(
    SELECT   
    tab0.id_formato_pago as id_formato_pago, 
    tab0.id_proyecto_ep as id_proyecto_ep, 
    tab0.id_rp as id_rp, 
    tab0.vigencia_rp as vigencia_rp, 
    tab0.is_rp_sgr as is_rp_sgr, 
    tab0.id_rubro as id_rubro, 
    tab0.id_elementos_gasto as id_elementos_gasto, 
    tab0.valor as valor, 
    tab0.id_tipo_rec as id_tipo_rec, 
    tab1.rubro as rubro, 
    tab1.descripcion as descripcion_rubro, 
    tab2.codigo_gasto as codigo_gasto, 
    tab2.codigo_uso as codigo_uso, 
    tab2.descripcion_gasto as descripcion_gasto,
    tab3.codigo as codigo_rec, 
    tab3.descripcion as descripcio_rec, 
    tab3.id_agrup as id_agrup, 
    tab4.codigo as codigo_agrup, 
    tab4.descripcion as descripcion_agrup, 
    tab4.abreviatura as abreviatura,
    
    tab0.tipo_gasto,
    tab0.tipo_operacion,
    tab0.uso_contable,
    tab0.cuenta_contable
    
    FROM RVC_FORMATO_PROY_RP tab0 
    
    LEFT JOIN PR_RUBRO_PGNSGR_V tab1 ON tab0.id_rubro = tab1.id_rubro AND tab0.is_rp_sgr = tab1.sgr 
    LEFT JOIN PR_ELEMENTOS_GASTO_PGNSGR_V tab2 ON tab0.id_elementos_gasto = tab2.id_elementos_gasto AND tab0.is_rp_sgr = tab2.sgr 
    LEFT JOIN PR_TIPO_REC tab3 ON tab0.id_tipo_rec = tab3.id LEFT JOIN PR_AGRUP_REC tab4 ON tab3.id_agrup = tab4.id 
    
    WHERE  
    tab0.id_formato_pago != '-1' 
    AND tab0.id_formato_pago = '$id_formato_pago' 

)tab0

group by
tab0.id_formato_pago,
tab0.id_proyecto_ep,
tab0.id_rp,
tab0.vigencia_rp,
tab0.is_rp_sgr, 
tab0.id_rubro,
tab0.rubro, 
tab0.descripcion_rubro

ORDER BY 
tab0.id_formato_pago, 
tab0.id_proyecto_ep, 
tab0.vigencia_rp, 
tab0.id_rp, 
tab0.is_rp_sgr, 
tab0.id_rubro  
EOD;

            /*
             * Sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (
                    
    $consulta_sql    
                    
)
EOD;


            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];


            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

    $consulta_sql

    $sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[formato_proy_rpsiif] Consulta exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Actualizar campos de registros carga masiva de obligaciones SIIF, segun cada formato pago y seleccion TCON - 20220405
     * 
     * @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");


        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        //sentencia sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

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

        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $id_formato_pago = $request['id_formato_pago'];
            $id_proyecto_ep = $request['id_proyecto_ep'];
            $id_rp = $request['id_rp'];
            $vigencia_rp = $request['vigencia_rp'];
            $id_rubro = $request['id_rubro'];


            $is_rp_sgr = $request['is_rp_sgr'];

            if ($is_rp_sgr == 'true') {
                $is_rp_sgr = 1;
            }elseif ($is_rp_sgr == 'false') {
                $is_rp_sgr = 0;
            }else{
                $is_rp_sgr = 0;
            }


            /*
             * Variables opcionales
             */
            $tipo_gasto = $request['tipo_gasto'];
            $tipo_operacion = $request['tipo_operacion'];
            $uso_contable = $request['uso_contable'];
            $cuenta_contable = $request['cuenta_contable'];


            /**
             * Actualizar
             */
            //sentencia sql
            $sql = <<<EOD
update rvc_formato_proy_rp set tipo_gasto = '$tipo_gasto', tipo_operacion = '$tipo_operacion', 
    uso_contable = '$uso_contable', cuenta_contable = '$cuenta_contable'
where
id_formato_pago = $id_formato_pago
and id_proyecto_ep = $id_proyecto_ep
and id_rp = $id_rp
and vigencia_rp =$vigencia_rp
and is_rp_sgr = $is_rp_sgr
and id_rubro = $id_rubro
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();

            $this->status = 0;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("[formato_proy_rpsiif] Actualizacion exitosa.");
        } catch (Exception $e) {

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

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
