<?php

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

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeIndex(sfWebRequest $request) {
        $this->forward('default', 'module');
    }

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

        $id_anho = $request['id_anho'];

        /*
         * Manejo de errores
         */
        try {

            //Sin mensajes
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("[inf_estado_cm] Consulta exitosa.");

            /*
             * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
             */
            $array = sfYaml::load(dirname(__FILE__) . '/../../../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++;
            }

            //Solo si es COL revisa las cajas - 20181017
            if ($entidadCliente == 5) {


                /*
                 *  Validar la operación, ya sea por SQL
                 */
                //Se obtiene los diferentes saldos de todas las cajas
                $sql = <<<EOD
SELECT 
NVL(sum(VALOR_PAGO),0) PAGOS, 
NVL(SUM(VALOR_ANULA),0) ANULA_PAGOS, 
NVL(SUM(VALOR_REIN),0) REINTEGROS, 
NVL(SUM(ANUL_REIN),0) ANULA_REIN,
NVL(SUM(VALOR_REEM),0) VALOR_REEM,
NVL(SUM(ANUL_REEM),0) ANUL_REEM,
id_proyecto,
descripcion,
codigo,
valor
                
FROM(

    select distinct 
    tab0.ID_PAGO_EGRESO,
    presup.id_proyecto,
    presup.descripcion,
    presup.codigo,
    nvl(presup.valor,0) as valor,
    nvl(tab0.VALOR_NETO,0) VALOR_PAGO,
    nvl(tab1.valor,0) VALOR_ANULA,
    nvl(tab2.valor,0) VALOR_REIN,
    nvl(tab3.valor,0) ANUL_REIN,
    nvl(tab4.valor,0) VALOR_REEM,
    nvl(tab5.valor,0) ANUL_REEM
    
    from COM_PAGO_EGRESO tab0
    
    left join(    
        select tab0.id_pago_egreso,sum(tab0.VALOR_NETO) VALOR    
        from COM_PAGO_EGRESO tab0
        where tab0.ID_ANHOS = $id_anho and tab0.estado=0
        GROUP BY tab0.id_pago_egreso
    )tab1 ON tab1.id_pago_egreso = tab0.id_pago_egreso
    
    left join(    
        select tab0.id_pago_egreso,sum(tab0.VALOR_TOTAL) VALOR    
        from COM_REINTEGRO tab0
        where tab0.ID_ANHOS = $id_anho AND TAB0.ESTADO=1
        GROUP BY tab0.id_pago_egreso    
    )tab2 ON tab2.id_pago_egreso = tab0.id_pago_egreso
    
    left join(    
        select tab0.id_pago_egreso,sum(tab0.VALOR_TOTAL) VALOR    
        from COM_REINTEGRO tab0
        where tab0.ID_ANHOS = $id_anho AND TAB0.ESTADO=0
        GROUP BY tab0.id_pago_egreso
    )tab3 ON tab3.id_pago_egreso = tab0.id_pago_egreso
    
    left join(    
        select 
        det.id_pago_egreso,
        sum(nvl(det.valor_reembolso,0)) as valor
        from com_reembolso reem
        left join com_deta_reembolso det
        on reem.id_reembolso = det.id_reembolso
        where 
        reem.id_anhos = $id_anho
        and reem.estado = 1
        and det.id_pago_egreso is not null
        group by
        det.id_pago_egreso
    )tab4 ON tab4.id_pago_egreso = tab0.id_pago_egreso
    
    left join(    
        select 
        det.id_pago_egreso,
        sum(nvl(det.valor_reembolso,0)) as valor
        from com_reembolso reem
        left join com_deta_reembolso det
        on reem.id_reembolso = det.id_reembolso
        where 
        reem.id_anhos = $id_anho
        and reem.estado = 0
        and det.id_pago_egreso is not null
        group by
        det.id_pago_egreso
    )tab5 ON tab5.id_pago_egreso = tab0.id_pago_egreso
    
    join COM_CUENTA tab4 ON tab4.id_cuenta = tab0.id_cuenta 
    
    join com_resolucion res on res.id_resolucion = tab4.id_resolucion
    
    join com_comision comm on comm.id_comision = res.id_comision 

    join (select tab0.id_proyecto,proy.descripcion,proy.codigo,id_anhos,sum(tab0.valor_asignado) as valor
          from COM_DETALLE_PRESUP tab0 join PROYECTOS proy on proy.id=tab0.id_proyecto group by tab0.id_proyecto,id_anhos,proy.descripcion,proy.codigo)presup on presup.id_proyecto=comm.id_proyecto
    
    where 
    tab0.ID_ANHOS = $id_anho
) group by id_proyecto,descripcion,codigo,valor                
EOD;

                $records = CN_TABLE::executeSQL($sql);

                if (count($records) > 0) {

                    $pendientes = "";
                    $separador = "";
                    $i = 0;
                    $txtcajas = "";
                    foreach ($records as $value) {

                        $pagos_saldo = $value['pagos'];
                        $anu_pa_saldo = $value['anula_pagos'];
                        $reintegro_saldo = $value['reintegros'];
                        $rein_anu_saldo = $value['anula_rein'];
                        $reembolso_saldo = $value['valor_reem'];
                        $reem_anu_saldo = $value['anul_reem'];
                        $valor_asignado = $value['valor'];
                        $codigo_caja = $value['codigo'];

                        $presupuesto = $valor_asignado + $reintegro_saldo - $rein_anu_saldo + $reembolso_saldo - $reem_anu_saldo;
                        $gastos = $pagos_saldo - $anu_pa_saldo;
                        $this->logMessage("presupuesto: " . $presupuesto . " , gastos:." . $gastos . " . Caja: " . $codigo_caja);
                        $porc_consumido = ($gastos * 100) / $presupuesto;

                        $this->logMessage("DDD porcentaje consumido = " . $porc_consumido);

                        if ($porc_consumido > 70) {
                            $txtcajas = $txtcajas . $codigo_caja . ", ";
                            //$this->logMessage("DDD entro a asignar el nombre de la caja".$txtcajas);
                        }
                        $i++;
                    }
                    if ($txtcajas == "") {
                        $this->totalRows = 0;
                        $this->startRow = 0;
                        $this->endRow = 0;
                        $this->list_data = array();
                        $this->status = 0;
                        $this->mensajeError = "";
                        $this->logMessage("Todas las cajas OK");
                    } else {
                        //$mensaje = "presupuesto: ".$presupuesto." , gastos:.".$gastos." . Registros: ".$i;
                        $mensaje = "Las Cajas Codigo: " . $txtcajas . " han excedido el 70% de su presupuesto.";
                        $this->totalRows = 0;
                        $this->startRow = 0;
                        $this->endRow = 0;
                        $this->list_data = array();
                        $this->status = 2;
                        $this->mensajeError = $mensaje;
                        $this->logMessage($mensaje);
                    }
                }
            } else {
                $this->list_data = array();
                $this->status = 0;
            }
        } 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());
        }
    }

}
