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




        $records = array();

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

        /*
         * 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'];
            }


            //estado
            $estado;
            if (isset($request['estado'])) {
                $estado = $request['estado'];
            }


            //aprobado
            $aprobado;
            if (isset($request['aprobado'])) {
                $aprobado = $request['aprobado'];
            }

            /**
             * Solo valida formatos aprobados y en estado != 0, se valida por codigo de contrato y no id - 20200331::LAVILA
             * Al momento de seleccionar el formato para pago el sistema verifica que con el CODIGO del contrato existe saldo, contra todos los pagos aprobados y activos - 20200331::LAVILA
             */
            //Sql
            $sql = <<<EOD
SELECT 
tab13.* 
FROM (

    SELECT 
    max(tab12.valor_contrato) as valor_contrato,
    sum(tab12.valor_mensual) as valor_mensual
    
    FROM (
        
        SELECT
        tab0.id_contrato,
        tab0.id_contratista,
        tab0.num_contrato,
        tab0.estado,
        tab0.adic,
        rnp.numero,
        ta.razon_social,
        tab0.numero_pago,
        
        TO_CHAR(tab0.fecha_ini_pago,'yyyy-mm-dd') as fecha_ini,
        TO_CHAR(tab0.fecha_fin_pago,'yyyy-mm-dd') as fecha_fin,
        
        tab0.valor_mensual,
        (tab0.valor_contrato + tab0.adic) as valor_contrato,
        (tab0.valor_sgr+tab0.valor_anm) as valor_contrato_c
        
        FROM (SELECT num_contrato, LISTAGG(id_contrato ,', ') WITHIN GROUP (ORDER BY num_contrato) as id_contrato FROM RVC_CONTRATO  GROUP BY num_contrato) contrato
        
        LEFT JOIN (
        
            SELECT tab0.id_contrato,
            tab0.id_contratista,
            tab0.num_contrato,
            tab0.estado,
            tab0.numero_pago,
            tab0.valor_sgr,
            tab0.valor_anm,
            nvl(tab1.valor_anm_new,0) + nvl(tab1.valor_sgr_new,0) as adic,
            tab.id_formato_pago,
            tab.valor_mensual,
            tab.valor_contrato,
            tab.id_numero_pago,
            tab.fecha_ini_pago,
            tab.fecha_fin_pago
            FROM RVC_CONTRATO tab0
            LEFT JOIN RVC_FORMATO_PAGO tab ON tab.id_contrato=tab0.id_contrato AND tab.estado!=0
            LEFT JOIN RVC_NOVEDAD_PRORR_TERMI tab1 ON tab1.id_contrato=tab0.id_contrato
            where
            tab.estado != 0 and tab.aprobado = 1
        ) tab0 ON to_char(tab0.num_contrato) IN (contrato.num_contrato)
        
        LEFT JOIN RVC_CONTRATISTA ta ON ta.id_contratista=tab0.id_contratista
        LEFT JOIN RVC_NUMERO_PAGO rnp ON tab0.id_numero_pago= rnp.id_numero_pago
                        
        where
        1=1
        --AND tab0.id_contratista=$id_contratista
        --AND tab0.id_contrato=$id_contrato
        and tab0.num_contrato = (select num_contrato from rvc_contrato where id_contrato=$id_contrato )
        
        ORDER BY 
        tab0.id_contrato,tab0.num_contrato, 
        rnp.numero,tab0.fecha_ini_pago
    )tab12

)tab13

WHERE 1=1 
AND tab13.valor_contrato > tab13.valor_mensual
EOD;
            //Ejecutar SQL
            $resultado = CN_TABLE::executeSQL($sql);

            $valor = $resultado[0]['valor_contrato'];
            if ($valor != null) {

                $records[0]['paso'] = true;
            } else {

                /**
                 * Solo valida formatos aprobados y en estado != 0 - 20200331::LAVILA
                 */
                $sql = <<<EOD
SELECT 
count(tab0.id_formato_pago) as total 
    
FROM RVC_FORMATO_PAGO tab0
                        
where
1=1 
AND tab0.id_contratista=$id_contratista
AND tab0.id_contrato=$id_contrato
and tab0.estado != 0 and tab0.aprobado = 1
EOD;
                $response = CN_TABLE::executeSQL($sql);

                $tot = $response[0]['total'];
                if ($tot == 0) {
                    $records[0]['paso'] = true;
                } else {
                    $records[0]['paso'] = false;
                }
            }

            $mensaje = "Error";

            if ($status == 0) {
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = $records;
                $this->logMessage("[formato_pago_contratista_valor] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[formato_pago_contratista_valor] ERROR!");
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {

            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[formato_pago_contratista_valor] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[formato_pago_contratista_valor] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
