diff --git a/app/Http/Controllers/MenuController.php b/app/Http/Controllers/MenuController.php index ff602e1..368ea05 100755 --- a/app/Http/Controllers/MenuController.php +++ b/app/Http/Controllers/MenuController.php @@ -286,13 +286,28 @@ class MenuController extends Controller if((int)$pantalla_servicio_completa >= (int)$cantidad_solicitada ){ $suma = $pantalla_servicio-$cantidad_solicitada; - $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado','activo')->having('historiales_count', '<=', $suma)->first(); + $cuenta = Cuentas::where('servicio_id', $servicio_id) + ->whereDate('inicio', '>=', $fecha) + ->orderBy('created_at', 'ASC') + ->withCount('historiales') + ->where('estado', 'activo') + ->havingRaw('COUNT(historiales.id) <= ?', [$suma]) // ✅ Corrección + ->first(); + }elseif((int)$pantalla_servicio_completa == (int)$cantidad_solicitada){ $this->fecha_final_1 = $today = Carbon::now()->addDays($pantallas->dias-15); $this->fecha_final_2 = $today = Carbon::now()->addDays($pantallas->dias+15); //completas - $cuenta = Cuentas::where('servicio_id',$this->servicio_id)->whereDate('inicio','>=',$this->fecha)->whereDate('vencimiento','>=',$this->fecha_final_1)->whereDate('vencimiento','<=',$this->fecha_final_2)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado','pendiente')->having('historiales_count', '==', 0)->first(); - }else{ + $cuenta = Cuentas::where('servicio_id', $this->servicio_id) + ->whereDate('inicio', '>=', $this->fecha) + ->whereDate('vencimiento', '>=', $this->fecha_final_1) + ->whereDate('vencimiento', '<=', $this->fecha_final_2) + ->orderBy('created_at', 'ASC') + ->withCount('historiales') + ->where('estado', 'pendiente') + ->havingRaw('COUNT(historiales.id) = 0') // ✅ Corrección + ->first(); + $cuenta=null; } @@ -332,8 +347,15 @@ class MenuController extends Controller for ($h=0; $h < (int)$cantidad_tarjetaPlan ; $h++) { //dd($n); - $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado','activo')->having('historiales_count', '<=', (int)$suma2)->first(); - //dd($cuenta); + $cuenta = Cuentas::where('servicio_id', $servicio_id) + ->whereDate('inicio', '>=', $fecha) + ->orderBy('created_at', 'ASC') + ->with('historiales') + ->withCount('historiales') + ->where('estado', 'activo') + ->havingRaw('historiales_count <= ?', [(int) $suma2]) // ✅ SQL nativo + ->first(); + //dd($cuenta); if (!empty($cuenta)) { $perfil = $cuenta->historiales_count; for ($y=0; $y < (int)$pantallas ; $y++) { @@ -381,10 +403,26 @@ class MenuController extends Controller if ($pantalla_servicio_completa == $pantallas_tarifa) { $this->fecha_final_1 = $today = Carbon::now()->addDays($tarifa->dias-15); $this->fecha_final_2 = $today = Carbon::now()->addDays($tarifa->dias+15); - $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->whereDate('vencimiento','>=',$this->fecha_final_1)->whereDate('vencimiento','<=',$this->fecha_final_2)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado','pendiente')->having('historiales_count', '==', 0)->first(); + $cuenta = Cuentas::where('servicio_id', $servicio_id) + ->whereDate('inicio', '>=', $fecha) + ->whereDate('vencimiento', '>=', $this->fecha_final_1) + ->whereDate('vencimiento', '<=', $this->fecha_final_2) + ->orderBy('created_at', 'ASC') + ->with('historiales') + ->withCount('historiales') + ->where('estado', 'pendiente') + ->havingRaw('historiales_count = ?', [0]) // ✅ SQL nativo + ->first(); }else{ - $cuenta = Cuentas::where('servicio_id', $servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado', 'activo')->having('historiales_count', '<=', (int)$faltante)->first(); - } + $cuenta = Cuentas::where('servicio_id', $servicio_id) + ->whereDate('inicio', '>=', $fecha) + ->orderBy('created_at', 'ASC') + ->with('historiales') + ->withCount('historiales') + ->where('estado', 'activo') + ->havingRaw('historiales_count <= ?', [(int) $faltante]) // ✅ SQL nativo + ->first(); + } //dd($tarifa); diff --git a/app/Http/Livewire/ShowPromociones.php b/app/Http/Livewire/ShowPromociones.php index 3c61994..cb9f442 100755 --- a/app/Http/Livewire/ShowPromociones.php +++ b/app/Http/Livewire/ShowPromociones.php @@ -275,29 +275,31 @@ class ShowPromociones extends Component //dd($tarifa); if ($pantalla_servicio_completa == $pantallas_tarifa) { - $this->fecha_final_1 = $today = Carbon::now()->addDays($tarifa->dias - 20); - $this->fecha_final_2 = $today = Carbon::now()->addDays($tarifa->dias + 20); + $this->fecha_final_1 = Carbon::now()->addDays($tarifa->dias - 20); + $this->fecha_final_2 = Carbon::now()->addDays($tarifa->dias + 20); $cuenta = Cuentas::where('servicio_id', $servicio_id) ->whereDate('inicio', '>=', $this->fecha) ->whereDate('vencimiento', '>=', $this->fecha_final_1) ->whereDate('vencimiento', '<=', $this->fecha_final_2) - ->Orderby('inicio', 'ASC')->with('historiales') + ->orderBy('inicio', 'ASC') + ->with('historiales') ->withCount('historiales') + ->havingRaw('COUNT(historiales.id) = 0') // ✅ Corrección ->where('estado', 'pendiente') - ->having('historiales_count', '==', 0) ->first(); } else { $cuenta = Cuentas::where('servicio_id', $servicio_id) ->whereDate('inicio', '>=', $this->fecha) - ->Orderby('inicio', 'ASC') + ->orderBy('inicio', 'ASC') ->with('historiales') ->withCount('historiales') + ->havingRaw('COUNT(historiales.id) <= ?', [(int) $faltante]) // ✅ Corrección ->where('estado', 'activo') - ->having('historiales_count', '<=', (int) $faltante) ->first(); } + if (!is_null($cuenta)) { $perfil = $cuenta->historiales_count; for ($y = 0; $y < (int) $pantallas_tarifa; $y++) { @@ -363,7 +365,7 @@ class ShowPromociones extends Component $logsGeneral = new Log_general(); $logsGeneral->user_id = Auth::user()->id; - $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' ha comprado la promocion ' . $this->consulta->nombre . ' - ' . $this->consulta->descripcion . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor .', Saldo anterior: $'.$saldo_anterior.', Nuevo saldo disponible: $'.$nuevo_saldo; + $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' ha comprado la promocion ' . $this->consulta->nombre . ' - ' . $this->consulta->descripcion . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor . ', Saldo anterior: $' . $saldo_anterior . ', Nuevo saldo disponible: $' . $nuevo_saldo; $logsGeneral->tipo = 'compra'; $logsGeneral->historial_id = $historial->id; $logsGeneral->save(); @@ -405,7 +407,7 @@ class ShowPromociones extends Component $logsGeneral = new Log_general(); $logsGeneral->user_id = Auth::user()->id; - $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' ha comprado la promocion ' . $this->consulta->nombre . ' - ' . $this->consulta->descripcion . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor ?? '' . ' y algunos han quedado pendientes'.', Saldo anterior: $'.$saldo_anterior.', Nuevo saldo disponible: $'.$nuevo_saldo; + $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' ha comprado la promocion ' . $this->consulta->nombre . ' - ' . $this->consulta->descripcion . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor ?? '' . ' y algunos han quedado pendientes' . ', Saldo anterior: $' . $saldo_anterior . ', Nuevo saldo disponible: $' . $nuevo_saldo; $logsGeneral->tipo = 'compra'; $logsGeneral->historial_id = $this->historial->id; $logsGeneral->save(); @@ -415,9 +417,9 @@ class ShowPromociones extends Component Historial_cuenta::whereIn('id', $this->n)->delete(); $logsGeneral = new Log_general(); $logsGeneral->user_id = Auth::user()->id; - $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' Tuvo error en el cobro, Comprando la promoción ' . $this->consulta->nombre . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor .' No se desconto el saldo, ni se asignaron cuentas.'; + $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' Tuvo error en el cobro, Comprando la promoción ' . $this->consulta->nombre . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor . ' No se desconto el saldo, ni se asignaron cuentas.'; $logsGeneral->tipo = 'compra_error'; - $logsGeneral->historial_id = $this->historial->id; + $logsGeneral->historial_id = $this->historial->id; $logsGeneral->save(); $this->alert('warning', 'Error en el cobro, comuniquese con soporte!', [ 'position' => 'top' @@ -439,7 +441,7 @@ class ShowPromociones extends Component Historial_cuenta::whereIn('id', $this->n)->delete(); $logsGeneral = new Log_general(); $logsGeneral->user_id = Auth::user()->id; - $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' Cancelo la compra del plan ' . $this->consulta->nombre . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor.' No se desconto el saldo, ni se asignaron cuentas.'; + $logsGeneral->detalle = 'El usuario ' . Auth::user()->name . ' - ' . Auth::user()->email . ' Cancelo la compra del plan ' . $this->consulta->nombre . ' cantidad de ' . $this->historial->cantidad . ' por un valor de $' . $this->historial->valor . ' No se desconto el saldo, ni se asignaron cuentas.'; $logsGeneral->tipo = 'compra_cancelada'; $logsGeneral->historial_id = $this->historial->id; $logsGeneral->save(); diff --git a/app/Http/Livewire/ShowServicios.php b/app/Http/Livewire/ShowServicios.php index f110fdd..5428d50 100755 --- a/app/Http/Livewire/ShowServicios.php +++ b/app/Http/Livewire/ShowServicios.php @@ -183,16 +183,10 @@ class ShowServicios extends Component ->whereDate('vencimiento', '<=', $this->fecha_final_2) ->where('servicio_id', $servicio_tarifa->id) ->where('estado', 'activo') - //->with('perfil') - //->whereDoesntHave('perfil', function ($query) use ($cantidad_restante) { - // $query->select('cuenta_id') - // ->groupBy('cuenta_id') - // ->havingRaw("COUNT(*) >= $cantidad_restante"); - //}) ->withCount('historiales') - ->where('estado', 'activo') - ->having('historiales_count', '<=', $cantidad_restante) + ->havingRaw("(SELECT COUNT(*) FROM historiales WHERE historiales.cuenta_id = cuentas.id) <= ?", [$cantidad_restante]) ->get(); + //dd($cuentas_pantallas); // con count da un numero entero $cuentas_pantallas_tomadas = Historial_cuenta::whereIn('cuenta_id', $cuentas_pantallas @@ -474,12 +468,12 @@ class ShowServicios extends Component DB::rollBack(); $this->credenciales = false; - $this->cuentas =[]; + $this->cuentas = []; - $this->alert('warning', 'Error al comprar: Esta cuenta ha sido tomada por otro usuario al mismo tiempo, intenta nuevamente' , [ + $this->alert('warning', 'Error al comprar: Esta cuenta ha sido tomada por otro usuario al mismo tiempo, intenta nuevamente', [ 'position' => 'top' ]); - + } }