From 58e27fc5fc187a30e71151ae1054c13a9d4c2b98 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 12 Mar 2026 17:17:03 -0600 Subject: [PATCH] Se cargan las modificaciones para pasarela stripe --- app/Http/Controllers/PagoController.php | 2 +- app/Http/Controllers/PlaneController.php | 8 +++-- app/Http/Controllers/StripeController.php | 10 ++++++- .../Controllers/StripeWebhookController.php | 13 +++++++-- app/Livewire/DataProspecto.php | 5 +++- app/Models/Nivel.php | 5 ++++ app/Models/Plane.php | 16 ++++++++++ ..._01_21_163854_create_nivel_plane_table.php | 29 +++++++++++++++++++ database/seeders/RoleSeeder.php | 2 +- resources/views/plane/edit.blade.php | 17 +++++++++++ 10 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2026_01_21_163854_create_nivel_plane_table.php diff --git a/app/Http/Controllers/PagoController.php b/app/Http/Controllers/PagoController.php index 2754ca8b..c6616b0e 100644 --- a/app/Http/Controllers/PagoController.php +++ b/app/Http/Controllers/PagoController.php @@ -16,7 +16,7 @@ class PagoController extends Controller { $user = Auth::user(); - $prospectoId = $user->prospectos()->value('prospectos.id'); + $prospectoId = $user->alumnos()->value('alumnos.id'); $pagos = Pago::where('user_id', $prospectoId)->get(); diff --git a/app/Http/Controllers/PlaneController.php b/app/Http/Controllers/PlaneController.php index 386abe69..79b96e2d 100644 --- a/app/Http/Controllers/PlaneController.php +++ b/app/Http/Controllers/PlaneController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Models\Plane; use App\Models\Plantel; use App\Models\Concepto; +use App\Models\Nivel; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -53,9 +54,10 @@ class PlaneController extends Controller public function edit(Plane $plane) { $planConceptos = $plane->conceptos; $plantels = Plantel::where('status','=','1')->get(); + $nivels = Nivel::where('status','=','1')->get(); $conceptos = Concepto::where('tipo','=','3')->get(); - return view('plane.edit',compact('plane','plantels','conceptos','planConceptos')); + return view('plane.edit',compact('plane','plantels','conceptos','planConceptos','nivels')); } public function update(Request $request,Plane $plane) @@ -64,9 +66,10 @@ class PlaneController extends Controller 'name'=>'required' ]); - $plane->update($request->except(['plantels'])); + $plane->update($request->except(['plantels','nivels'])); $plane->planPlantel()->sync($request->plantels); + $plane->nivelPlane()->sync($request->nivels); return redirect()->route('plane.edit',$plane)->with('info','El plan se actualizo correctamente'); } @@ -75,6 +78,7 @@ class PlaneController extends Controller public function destroy(Plane $plane) { $plane->planPlantel()->detach(); + $plane->nivelPlane()->detach(); $plane->delete(); session()->flash('swal',[ 'icon'=>'success', diff --git a/app/Http/Controllers/StripeController.php b/app/Http/Controllers/StripeController.php index 48d0c98e..1b0d9aa1 100644 --- a/app/Http/Controllers/StripeController.php +++ b/app/Http/Controllers/StripeController.php @@ -4,8 +4,9 @@ namespace App\Http\Controllers; use App\Models\Concepto; use App\Models\Pago; -use Stripe\Stripe; +use Illuminate\Support\Facades\Auth; use Stripe\Checkout\Session; +use Stripe\Stripe; class StripeController extends Controller { @@ -13,10 +14,14 @@ class StripeController extends Controller { $concepto = Concepto::where('id', $pago->concepto)->first(); + $user = Auth::user(); + Stripe::setApiKey(config('services.stripe.secret')); $session = Session::create([ 'mode' => 'payment', + 'customer_email' => $user->email, + 'line_items' => [[ 'price_data' => [ 'currency' => 'mxn', @@ -27,10 +32,13 @@ class StripeController extends Controller ], 'quantity' => 1, ]], + 'success_url' => route('pagar.show',1), 'cancel_url' => route('pagar.show',0), + 'metadata' => [ 'pago_id' => $pago->id, + 'user_id' => $user->id, ], ]); diff --git a/app/Http/Controllers/StripeWebhookController.php b/app/Http/Controllers/StripeWebhookController.php index 6934c869..1020acb2 100644 --- a/app/Http/Controllers/StripeWebhookController.php +++ b/app/Http/Controllers/StripeWebhookController.php @@ -31,14 +31,23 @@ class StripeWebhookController extends Controller $session = $event->data->object; - Pago::where('id',$session->id)->update(['estado'=>'pagado']); + $pagoId = $session->metadata->pago_id ?? null; + + if ($pagoId) { + + $pago = Pago::find($pagoId); + + if ($pago) { + $pago->estado = 'pagado'; + $pago->save(); + } + } break; case 'payment_intent.payment_failed': // manejar fallo de pago - break; } diff --git a/app/Livewire/DataProspecto.php b/app/Livewire/DataProspecto.php index d61a2a16..3e6bc904 100644 --- a/app/Livewire/DataProspecto.php +++ b/app/Livewire/DataProspecto.php @@ -255,7 +255,10 @@ class DataProspecto extends Component $q->where('plantels.id', $this->pplantels) )->get(); - $this->planesPago = Plane::where('nivel', $this->selectedNivel) + $this->planesPago = Plane::query() + ->whereHas('nivelPlane', function ($q) { + $q->where('nivels.id', $this->selectedNivel); + }) ->whereHas('planPlantel', function ($q) { $q->where('plantels.id', $this->pplantels); }) diff --git a/app/Models/Nivel.php b/app/Models/Nivel.php index dd31f37e..4cb3a5ea 100644 --- a/app/Models/Nivel.php +++ b/app/Models/Nivel.php @@ -17,6 +17,11 @@ class Nivel extends Model return $this->belongsToMany(Plantel::class)->withPivot('plantel_id'); } + public function nivelPlane() : BelongsToMany + { + return $this->belongsToMany(Plane::class); + } + public function existe($plantelId = null) { if (!$plantelId) { diff --git a/app/Models/Plane.php b/app/Models/Plane.php index 36ec17ce..130117ab 100644 --- a/app/Models/Plane.php +++ b/app/Models/Plane.php @@ -16,6 +16,11 @@ class Plane extends Model return $this->belongsToMany(Plantel::class)->withPivot('plantel_id'); } + public function nivelPlane() : BelongsToMany + { + return $this->belongsToMany(Nivel::class); + } + public function existe($plantelId = null) { if (!$plantelId) { @@ -27,6 +32,17 @@ class Plane extends Model ->exists(); } + public function nivel($nivelId = null) + { + if (!$nivelId) { + return false; + } + + return $this->nivelPlane() + ->wherePivot('nivel_id', $nivelId) + ->exists(); + } + public function conceptos(): BelongsToMany { return $this->belongsToMany(Concepto::class) diff --git a/database/migrations/2026_01_21_163854_create_nivel_plane_table.php b/database/migrations/2026_01_21_163854_create_nivel_plane_table.php new file mode 100644 index 00000000..1a7323ef --- /dev/null +++ b/database/migrations/2026_01_21_163854_create_nivel_plane_table.php @@ -0,0 +1,29 @@ +unsignedBigInteger('nivel_id'); + $table->foreign('nivel_id')->references('id')->on('nivels'); + $table->unsignedBigInteger('plane_id'); + $table->foreign('plane_id')->references('id')->on('planes'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('nivel_plane'); + } +}; diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index b43a5270..6a8b114b 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -16,7 +16,7 @@ class RoleSeeder extends Seeder $role1 = Role::create(['name'=>'Admin']); $role2 = Role::create(['name'=>'Blogger']); $role3 = Role::create(['name'=>'Promotor']); - $role4 = Role::create(['name'=>'alumno']); + $role4 = Role::create(['name'=>'Alumno']); Permission::create(['name'=>'note.index','description'=>'Ver notas'])->syncRoles([$role2]); Permission::create(['name'=>'note.create','description'=>'Crear notas'])->syncRoles([$role2]); diff --git a/resources/views/plane/edit.blade.php b/resources/views/plane/edit.blade.php index d02ad902..24183bdd 100644 --- a/resources/views/plane/edit.blade.php +++ b/resources/views/plane/edit.blade.php @@ -49,6 +49,23 @@ @endforeach +
+ + + @foreach ($nivels as $nivel) +
+ nivel($nivel->id) ? 'checked' : '' }} + > + +
+ @endforeach +
+