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