Example #1
0
 /**
  * Nueva gestion para los tickets ganadores
  * 
  * @param unknown_type $fecha
  */
 public static function calcularTicketGanador($fecha, $arregloLogrosGuardados)
 {
     //obtenemos las ventas que no esten anuladas
     ini_set('memory_limit', '1024M');
     BitacoraDAO::registrarComentario("En VentasDAO::calcularTicketGanador (iniciando): " . print_r($arregloLogrosGuardados, true));
     $extraWhere = "";
     if (count($arregloLogrosGuardados) == 0) {
         $extraWhere = " AND vd1.fecha_venta='" . $fecha . "'";
     } else {
         //tenemos logros especificos, buscamos solo esos
         foreach ($arregloLogrosGuardados as $idLogroEquipo) {
             if ($extraWhere == "") {
                 $extraWhere = "AND vd1.idlogro_equipo IN (" . $idLogroEquipo;
             } else {
                 $extraWhere .= ", " . $idLogroEquipo;
             }
         }
         $extraWhere .= ")";
     }
     $sql1 = "SELECT vd1.idventa" . " FROM vista_ventas_detalles vd1" . " WHERE 1 = 1 " . $extraWhere . " GROUP BY vd1.idventa";
     $sql = "SELECT vd.*" . " FROM vista_ventas_detalles vd, (" . $sql1 . ") vd2" . " WHERE vd.anulado = 0 " . " AND vd.idventa = vd2.idventa" . " ORDER BY vd.idventa, vd.idventa_detalle";
     $results = DBUtil::executeSelect($sql);
     BitacoraDAO::registrarComentario("En VentasDAO::calcularTicketGanador -> ejecutado '" . $sql . "'");
     if (count($results) > 0) {
         $ventaDetalle = array();
         foreach ($results as $venta) {
             $ventaObj = new VentasDTO($venta["idventa"], $venta["idventa_detalle"], $venta["apuesta"], $venta["total_ganar"], $venta["pago"], NULL);
             //si es null el array, se procesa sin discriminar nada
             //vemos si el logro de este registro fue especificamente guardado su resultado
             //desde la pagina como tal
             if (count($arregloLogrosGuardados) == 0 || isset($arregloLogrosGuardados[$venta["idlogro_equipo"]])) {
                 $teniaLogro = true;
                 if ($venta["suspendido"] == 1) {
                     //el juego asociado a esta venta fue suspendido
                     //no hacemos calculo de ganador ni nada
                     BitacoraDAO::registrarComentario("La venta [" . $venta["idventa"] . "][" . $venta["idventa_detalle"] . "] esta suspendida, no calculamos nada");
                     $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SUSPENDIDO);
                     $ventaDetalle[$venta["idventa"]][$venta["idventa_detalle"]] = $ventaObj;
                 } else {
                     //o es null el array o se especifico resultado para este logro
                     //en ambos casos se procesa
                     //el juego no esta en suspendido
                     //vemos si fue almacenado el resultado para el mismo
                     $existe = DBUtil::executeSelect("select idlogro_equipo_categoria_resultado from logros_equipos_categorias_resultados where idlogro_equipo='" . $venta["idlogro_equipo"] . "' and estatus='1' limit 1");
                     if ($existe[0]["idlogro_equipo_categoria_resultado"] > 0) {
                         //si tenemos resultado
                         //calculamos si es ganador, perdedor o tablas
                         BitacoraDAO::registrarComentario("La venta [" . $venta["idventa"] . "][" . $venta["idventa_detalle"] . "] si tiene resultado guardado");
                         $codeReturn = VentasDAO::verificarSiEsGanador($venta["idventa_detalle"]);
                         $ventaObj->setEstadoFinal($codeReturn);
                         $ventaDetalle[$venta["idventa"]][$venta["idventa_detalle"]] = $ventaObj;
                     } else {
                         //no tenemos resultado, no podemos evaluar nada aun
                         BitacoraDAO::registrarComentario("La venta [" . $venta["idventa"] . "][" . $venta["idventa_detalle"] . "] no tiene resultado guardado, dejamos su estado como esta (" . $venta["edoVentaDetalle"] . ")");
                         //dejamos el estado final de esta venta tal cual esta
                         if ($venta["edoVentaDetalle"] == 2) {
                             //estado solo vendido
                             $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SOLO_VENDIDO);
                         } else {
                             if ($venta["edoVentaDetalle"] == 5) {
                                 //estado ganador
                                 $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_GANADOR);
                             } else {
                                 if ($venta["edoVentaDetalle"] == 6) {
                                     //estado perdedor
                                     $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_PERDEDOR);
                                 } else {
                                     if ($venta["edoVentaDetalle"] == 1) {
                                         //estado suspendido
                                         $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SUSPENDIDO);
                                     } else {
                                         if ($venta["edoVentaDetalle"] == 4) {
                                             //estado empatado
                                             $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_EMPATADO_DEBE_SUSPENDER);
                                         } else {
                                             //estado por defecto (solo vendido)
                                             $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SOLO_VENDIDO);
                                         }
                                     }
                                 }
                             }
                         }
                         $ventaDetalle[$venta["idventa"]][$venta["idventa_detalle"]] = $ventaObj;
                     }
                 }
             } else {
                 //este logro no fue indicado especificamente al guardar resultados
                 //no se toma en cuenta
                 BitacoraDAO::registrarComentario("La venta [" . $venta["idventa"] . "][" . $venta["idventa_detalle"] . "] no fue indicada en el momento de almacenar los resultados (" . $venta["idlogro_equipo"] . "), la dejamos con su estado actual (" . $venta["edoVentaDetalle"] . ")");
                 //dejamos el estado final de esta venta tal cual esta
                 if ($venta["edoVentaDetalle"] == 2) {
                     //estado solo vendido
                     $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SOLO_VENDIDO);
                 } else {
                     if ($venta["edoVentaDetalle"] == 5) {
                         //estado ganador
                         $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_GANADOR);
                     } else {
                         if ($venta["edoVentaDetalle"] == 6) {
                             //estado perdedor
                             $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_PERDEDOR);
                         } else {
                             if ($venta["edoVentaDetalle"] == 1) {
                                 //estado suspendido
                                 $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SUSPENDIDO);
                             } else {
                                 if ($venta["edoVentaDetalle"] == 4) {
                                     //estado empatado
                                     $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_EMPATADO_DEBE_SUSPENDER);
                                 } else {
                                     //estado por defecto (solo vendido)
                                     $ventaObj->setEstadoFinal(VentasDAO::$RESULTADO_SOLO_VENDIDO);
                                 }
                             }
                         }
                     }
                 }
                 $ventaDetalle[$venta["idventa"]][$venta["idventa_detalle"]] = $ventaObj;
             }
         }
     } else {
         BitacoraDAO::registrarComentario("La consulta inicial para tickets ganadores no trajo resultados para el ticket " . $i);
     }
     //ya con el resultado de cada transaccion
     //procedemos a colocar un estado a cada venta como tal
     //tomando en cuenta el estado interno de sus tickets
     foreach ($ventaDetalle as $idVenta => $arrayVentaDetalle) {
         //echo "idVenta=".$idVenta;
         //print_r($arrayVentaDetalle);
         //inicializamos contadores para la venta
         $numeroApuestasEnTicket = count($arrayVentaDetalle);
         $apuestasGanadoras = 0;
         $apuestasPerdedoras = 0;
         $apuestasSuspendidas = 0;
         $apuestasEmpatadas = 0;
         $factor = 1;
         reset($arrayVentaDetalle);
         //la venta tiene mas de una apuesta
         //debemos evaluar el conjunto para saber el resultado final
         foreach ($arrayVentaDetalle as $apuesta) {
             if ($apuesta->getEstadoFinal() == VentasDAO::$RESULTADO_GANADOR) {
                 $apuestasGanadoras++;
                 //actualizamos el estado especifico de la apuesta dentro del ticket
                 $query = "UPDATE ventas_detalles SET edo_venta_detalle=5 WHERE idventa_detalle = " . $apuesta->getIdVentaDetalle();
                 DBUtil::executeQuery($query);
                 //calculo el factor parlay de esta apuesta
                 if ($apuesta->getPago() < 0) {
                     $factor *= 1 + 100 / abs($apuesta->getPago());
                     BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] calculando factor=(1 + (100 / " . abs($apuesta->getPago()) . "))");
                 } else {
                     $factor *= 1 + $apuesta->getPago() / 100;
                     BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] calculando factor=(1 + (" . $apuesta->getPago() . "/100))");
                 }
                 BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] actualizada a estado Ganador con factor " . $factor);
             } else {
                 if ($apuesta->getEstadoFinal() == VentasDAO::$RESULTADO_PERDEDOR) {
                     $apuestasPerdedoras++;
                     //actualizamos el estado especifico de la apuesta dentro del ticket
                     $query = "UPDATE ventas_detalles SET edo_venta_detalle=6 WHERE idventa_detalle = " . $apuesta->getIdVentaDetalle();
                     DBUtil::executeQuery($query);
                     $factor *= 0;
                     BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] actualizada a estado Perdedor");
                 } else {
                     if ($apuesta->getEstadoFinal() == VentasDAO::$RESULTADO_SUSPENDIDO) {
                         $apuestasSuspendidas++;
                         //actualizamos el estado especifico de la apuesta dentro del ticket
                         $query = "UPDATE ventas_detalles SET edo_venta_detalle=1 WHERE idventa_detalle = " . $apuesta->getIdVentaDetalle();
                         DBUtil::executeQuery($query);
                         $factor *= 1;
                         BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] actualizada a estado Suspendido");
                     } else {
                         if ($apuesta->getEstadoFinal() == VentasDAO::$RESULTADO_EMPATADO_DEBE_SUSPENDER) {
                             $apuestasEmpatadas++;
                             //actualizamos el estado especifico de la apuesta dentro del ticket
                             $query = "UPDATE ventas_detalles SET edo_venta_detalle=4 WHERE idventa_detalle = " . $apuesta->getIdVentaDetalle();
                             DBUtil::executeQuery($query);
                             $factor *= 1;
                             BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] actualizada a estado Reembolsar");
                         } else {
                             //no es ninguno de los casos esperados, lo dejo como solo vendido
                             //aunque esto no deberia pasar
                             BitacoraDAO::registrarComentario("[" . $idVenta . "-" . $apuesta->getIdVentaDetalle() . "] caso atipico con estado final de venta =" . $ventaObj->getEstadoFinal());
                         }
                     }
                 }
             }
         }
         //fue procesado todo el detalle de un determinado ticket
         BitacoraDAO::registrarComentario("[" . $idVenta . "] tiene lo siguiente: " . "numeroApuestasEnTicket=" . $numeroApuestasEnTicket . ", apuestasGanadoras=" . $apuestasGanadoras . ", apuestasPerdedoras=" . $apuestasPerdedoras . ", apuestasEmpatadas=" . $apuestasEmpatadas . ", apuestasSuspendidas=" . $apuestasSuspendidas . ", factor=" . $factor . ", montoApuesta=" . $ventaObj->getMontoApuesta());
         //verificamos si es perdedor
         if ($apuestasPerdedoras > 0) {
             //tiene al menos una apuesta del ticket perdiendo, por lo tanto, el ticket completo pierde
             $query = "UPDATE ventas SET perdedor='1', reembolsar=0, ganador=0, " . " monto_real_pagar=0, recalculado='0' " . " WHERE idventa='" . $idVenta . "' LIMIT 1";
             DBUtil::executeQuery($query);
             BitacoraDAO::registrarComentario("[" . $idVenta . "] actualizada a estado Perdedor");
         } else {
             //no es perdedor el ticket, vemos si es totalmente ganador
             if ($apuestasGanadoras == $numeroApuestasEnTicket) {
                 //la persona gano todas sus apuestas
                 $query = "UPDATE ventas SET perdedor=0, reembolsar=0, ganador='1', " . " monto_real_pagar=apuesta*" . $factor . ",recalculado='0' " . " WHERE idventa='" . $idVenta . "' LIMIT 1";
                 DBUtil::executeQuery($query);
                 BitacoraDAO::registrarComentario("[" . $idVenta . "] actualizada a estado Ganador");
             } else {
                 //debe ser obligatoramiente un reembolso o un recalculo
                 if ($apuestasGanadoras > 0) {
                     //la persona gano al menos una, confirmo recalculo
                     if ($apuestasGanadoras + $apuestasEmpatadas + $apuestasSuspendidas == $numeroApuestasEnTicket) {
                         //es recalculo
                         $query = "UPDATE ventas SET perdedor=0, recalculado=1, ganador=0, " . " reembolsar='0', monto_real_pagar=apuesta*" . $factor . " WHERE idventa='" . $idVenta . "' LIMIT 1";
                         DBUtil::executeQuery($query);
                         BitacoraDAO::registrarComentario("[" . $idVenta . "] actualizada a estado Recalculado");
                     } else {
                         //caso extraño
                     }
                 } else {
                     //no gano, aparentemente solo es reembolso
                     if ($apuestasEmpatadas + $apuestasSuspendidas == $numeroApuestasEnTicket) {
                         //debe ser un reembolso
                         $query = "UPDATE ventas SET perdedor=0, recalculado=0, ganador=0, " . " reembolsar='1', monto_real_pagar=apuesta " . " WHERE idventa='" . $idVenta . "' LIMIT 1";
                         DBUtil::executeQuery($query);
                         BitacoraDAO::registrarComentario("[" . $idVenta . "] actualizada a estado Reembolsar");
                     } else {
                         //caso extraño
                     }
                 }
             }
         }
     }
     BitacoraDAO::registrarComentario("En VentasDAO::calcularTicketGanador (finalizando): " . print_r($arregloLogrosGuardados, true));
 }
Example #2
0
function calcula_ticket_ganadorOLD($fecha, $arregloLogrosGuardados = null)
{
    VentasDAO::calcularTicketGanador($fecha, $arregloLogrosGuardados);
    return;
    //echo "fecha: ".$fecha."\n\n<br><br>";
    //  return false;
    $sql = "select * from vista_ventas_detalles where fecha_venta='" . $fecha . "' order by idventa";
    $query = mysql_debug_query($sql);
    if (mysql_num_rows($query) > 0) {
        $apuestas = $aciertos = 0;
        $idventa = $evaluar_parley = '';
        //La variable $evaluar_parley me permite saber si ejecutar el claculo de ticket ganador para un determinado parley jugado
        while ($var = mysql_fetch_assoc($query)) {
            if ($idventa != $var['idventa']) {
                if ($idventa != '' && $evaluar_parley == '') {
                    if ($apuestas == $aciertos) {
                        if ($acerto == 1) {
                            //si acerto al menos una apuesta
                            //mysql_debug_query("update ventas set monto_real_pagar=0, perdedor=0, reembolsar=0, ganador='1', monto_real_pagar='".$acum."',recalculado='".$recalculado."' where idventa='".$idventa."' limit 1");
                            $codeReturn = VentasDAO::verificarSiEsGanador($var["idventa_detalle"]);
                            echo "<br /> codeReturn para " . $idventa . " fue: " . $codeReturn . "<br />";
                            if ($codeReturn == VentasDAO::$RESULTADO_GANADOR || $codeReturn == VentasDAO::$RESULTADO_NO_MAPEADO_AUN) {
                                mysql_debug_query("update ventas set monto_real_pagar=0, perdedor=0, reembolsar=0, ganador='1', monto_real_pagar='" . $acum . "',recalculado='" . $recalculado . "' where idventa='" . $idventa . "' limit 1");
                            } else {
                                if ($codeReturn == VentasDAO::$RESULTADO_PERDEDOR) {
                                    mysql_debug_query("update ventas set monto_real_pagar=0, reembolsar=0, recalculado=0, ganador=0, perdedor='1' where idventa='" . $idventa . "' limit 1");
                                } else {
                                    if ($codeReturn == VentasDAO::$RESULTADO_EMPATADO_DEBE_SUSPENDER) {
                                        mysql_debug_query("update ventas set perdedor=0, recalculado=0, ganador=0, reembolsar='1',monto_real_pagar=apuesta where idventa='" . $idventa . "' limit 1");
                                    }
                                }
                            }
                        } else {
                            mysql_debug_query("update ventas set perdedor=0, recalculado=0, ganador=0, reembolsar='1',monto_real_pagar=apuesta where idventa='" . $idventa . "' limit 1");
                        }
                    } else {
                        mysql_debug_query("update ventas set monto_real_pagar=0, reembolsar=0, recalculado=0, ganador=0, perdedor='1' where idventa='" . $idventa . "' limit 1");
                    }
                }
                $idventa = $var['idventa'];
                $acerto = $recalculado = $acum = $apuestas = $aciertos = 0;
                $nocalcular = $evaluar_parley = $idlogroequipoventa = '';
                $acum = $var['apuesta'];
            }
            echo "\n<br>id_venta: {$var['idventa']} - logro {$var['idlogro_equipo']} - ";
            echo "\n<br>ini: {$var['idventa']} - ";
            $nocalcular = '';
            if ($var['suspendido'] != 1) {
                if ($idlogroequipoventa != $var['idlogro_equipo'] && $evaluar_parley == '') {
                    $idlogroequipoventa = $var['idlogro_equipo'];
                    $existe = dame_datos("select idlogro_equipo_categoria_resultado from logros_equipos_categorias_resultados where idlogro_equipo='" . $idlogroequipoventa . "' and estatus='1' limit 1");
                    if (!$existe) {
                        echo "evaluar_parley NO!!";
                        $evaluar_parley = 'no';
                    }
                }
                if ($evaluar_parley == '') {
                    //ejecuto esto si es posible el calculo del parley
                    $existe = dame_datos("select idlogro_equipo_categoria_apuesta_banquero_acierto from logros_equipos_categorias_apuestas_banqueros_aciertos where idlogro_equipo_categoria_apuesta_banquero='" . $var['idlogro_equipo_categoria_apuesta_banquero'] . "' and estatus='1' limit 1");
                    if ($existe) {
                        $aciertos++;
                        $acerto = 1;
                        echo "\n<br>Acert\n";
                        print_r($existe);
                    } else {
                        //FJR
                        //$nocalcular='no';
                        $nocalcular = '';
                        $acerto = 1;
                        $aciertos++;
                        //END FJR
                        echo "\n<br>No Acerto! idlogro_equipo_categoria_apuesta_banquero='" . $var['idlogro_equipo_categoria_apuesta_banquero'] . "' and estatus='1'";
                    }
                    $apuestas++;
                }
            } else {
                echo "\n<br>Suspendido";
                $aciertos++;
                $apuestas++;
                $nocalcular = 'no';
                $recalculado = 1;
            }
            if ($nocalcular == '') {
                if ($var['pago'] > 0) {
                    //acum=acum*parseFloat(1+parseFloat(sep_logro_apuestas_[j])/100);
                    $acum = (double) ($acum * (double) (1 + (double) ($var['pago'] / 100)));
                } elseif ($var['pago'] < 0) {
                    //acum=acum*parseFloat(1+100/(parseFloat(sep_logro_apuestas_[j])*-1));
                    $acum = (double) (double) ($acum * (double) (1 + (double) (100 / (double) ($var['pago'] * -1))));
                }
            }
            echo "\n<br>end: {$var['idventa']} - ";
        }
        if ($apuestas == $aciertos && $idventa != '' && $evaluar_parley == '') {
            if ($acerto == 1) {
                //si acerto al menos una apuesta
                //mysql_debug_query("update ventas set monto_real_pagar=0, perdedor=0, reembolsar=0, ganador='1', monto_real_pagar='".$acum."',recalculado='".$recalculado."' where idventa='".$idventa."' limit 1");
                $codeReturn = VentasDAO::verificarSiEsGanador($var["idventa_detalle"]);
                echo "<br /> codeReturn para " . $idventa . " fue: " . $codeReturn . "<br />";
                if ($codeReturn == VentasDAO::$RESULTADO_GANADOR || $codeReturn == VentasDAO::$RESULTADO_NO_MAPEADO_AUN) {
                    mysql_debug_query("update ventas set monto_real_pagar=0, perdedor=0, reembolsar=0, ganador='1', monto_real_pagar='" . $acum . "',recalculado='" . $recalculado . "' where idventa='" . $idventa . "' limit 1");
                } else {
                    if ($codeReturn == VentasDAO::$RESULTADO_PERDEDOR) {
                        mysql_debug_query("update ventas set monto_real_pagar=0, reembolsar=0, recalculado=0, ganador=0, perdedor='1' where idventa='" . $idventa . "' limit 1");
                    } else {
                        if ($codeReturn == VentasDAO::$RESULTADO_EMPATADO_DEBE_SUSPENDER) {
                            mysql_debug_query("update ventas set perdedor=0, recalculado=0, ganador=0, reembolsar='1',monto_real_pagar=apuesta where idventa='" . $idventa . "' limit 1");
                        }
                    }
                }
            } else {
                mysql_debug_query("update ventas set perdedor=0, recalculado=0, ganador=0, reembolsar='1',monto_real_pagar=apuesta where idventa='" . $idventa . "' limit 1");
            }
        } elseif ($idventa != '' && $evaluar_parley == '') {
            mysql_debug_query("update ventas set monto_real_pagar=0, reembolsar=0, recalculado=0, ganador=0, perdedor='1' where idventa='" . $idventa . "' limit 1");
        }
    }
}