Se modifican procesos para pagos en linea a travez de stripe
This commit is contained in:
+16
-16
@@ -3,19 +3,19 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Prospecto;
|
||||
use App\Models\Alumno;
|
||||
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
|
||||
class ProspectoController extends Controller
|
||||
class AlumnoController extends Controller
|
||||
{
|
||||
public function __construct() {
|
||||
$this->middleware('can:prospecto.index')->only('index','show');
|
||||
$this->middleware('can:prospecto.create')->only('create','store');
|
||||
$this->middleware('can:prospecto.edit')->only('edit','update');
|
||||
$this->middleware('can:prospecto.destroy')->only('destroy');
|
||||
$this->middleware('can:alumno.index')->only('index','show');
|
||||
$this->middleware('can:alumno.create')->only('create','store');
|
||||
$this->middleware('can:alumno.edit')->only('edit','update');
|
||||
$this->middleware('can:alumno.destroy')->only('destroy');
|
||||
}
|
||||
|
||||
public function index()
|
||||
@@ -23,24 +23,24 @@ class ProspectoController extends Controller
|
||||
$user = Auth::user();
|
||||
$plantelesUsuario = $user->plantelUsuarios->pluck('id');
|
||||
|
||||
$prospectos = User::with(['prospectos' => function ($query) use ($user, $plantelesUsuario) {
|
||||
$alumnos = User::with(['alumnos' => function ($query) use ($user, $plantelesUsuario) {
|
||||
|
||||
$query->where(function ($q) use ($user, $plantelesUsuario) {
|
||||
|
||||
$q->where('usuario_registro', $user->id)
|
||||
->orWhereHas('prospectos.plantelUsuarios', function ($sub) use ($plantelesUsuario) {
|
||||
->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) {
|
||||
$sub->whereIn('plantels.id', $plantelesUsuario);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}])
|
||||
->whereHas('prospectos', function ($query) use ($user, $plantelesUsuario) {
|
||||
->whereHas('alumnos', function ($query) use ($user, $plantelesUsuario) {
|
||||
|
||||
$query->where(function ($q) use ($user, $plantelesUsuario) {
|
||||
|
||||
$q->where('usuario_registro', $user->id)
|
||||
->orWhereHas('prospectos.plantelUsuarios', function ($sub) use ($plantelesUsuario) {
|
||||
->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) {
|
||||
$sub->whereIn('plantels.id', $plantelesUsuario);
|
||||
});
|
||||
|
||||
@@ -49,29 +49,29 @@ class ProspectoController extends Controller
|
||||
})
|
||||
->get();
|
||||
|
||||
return view('prospecto.index', compact('prospectos'));
|
||||
return view('alumno.index', compact('alumnos'));
|
||||
}
|
||||
|
||||
public function destroy(Prospecto $prospecto)
|
||||
public function destroy(Alumno $alumno)
|
||||
{
|
||||
$user = $prospecto->prospectos()->first();
|
||||
$user = $alumno->alumnos()->first();
|
||||
|
||||
if ($user) {
|
||||
$user->roles()->detach();
|
||||
|
||||
$user->plantelUsuarios()->detach();
|
||||
|
||||
$prospecto->prospectos()->detach($user->id);
|
||||
$alumno->alumnos()->detach($user->id);
|
||||
|
||||
$user->delete();
|
||||
}
|
||||
|
||||
$prospecto->delete();
|
||||
$alumno->delete();
|
||||
session()->flash('swal',[
|
||||
'icon'=>'success',
|
||||
'title'=>'Eliminado!',
|
||||
'text'=>'Se ha eliminado el registro correctamente'
|
||||
]);
|
||||
return redirect()->route('prospecto.index');
|
||||
return redirect()->route('alumno.index');
|
||||
}
|
||||
}
|
||||
@@ -4,41 +4,44 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Pago;
|
||||
use Illuminate\Http\Request;
|
||||
use Stripe\Webhook;
|
||||
use Stripe\Exception\SignatureVerificationException;
|
||||
use Stripe\Webhook;
|
||||
|
||||
class StripeWebhookController extends Controller
|
||||
{
|
||||
public function handle(Request $request)
|
||||
{
|
||||
$payload = $request->getContent();
|
||||
$signature = $request->header('Stripe-Signature');
|
||||
$sigHeader = $request->header('Stripe-Signature');
|
||||
$secret = config('services.stripe.webhook_secret');
|
||||
|
||||
try {
|
||||
$event = Webhook::constructEvent(
|
||||
$payload,
|
||||
$signature,
|
||||
$sigHeader,
|
||||
$secret
|
||||
);
|
||||
} catch (SignatureVerificationException $e) {
|
||||
return response('Firma inválida', 400);
|
||||
return response()->json(['error' => 'Webhook inválido'], 400);
|
||||
}
|
||||
|
||||
// 👉 Evento que nos importa
|
||||
if ($event->type === 'checkout.session.completed') {
|
||||
switch ($event->type) {
|
||||
|
||||
$session = $event->data->object;
|
||||
case 'checkout.session.completed':
|
||||
|
||||
$pagoId = $session->metadata->pago_id ?? null;
|
||||
$session = $event->data->object;
|
||||
|
||||
if ($pagoId) {
|
||||
Pago::where('id', $pagoId)->update([
|
||||
'estado' => 'pagado',
|
||||
]);
|
||||
}
|
||||
Pago::where('id',$session->id)->update(['estado'=>'pagado']);
|
||||
|
||||
break;
|
||||
|
||||
case 'payment_intent.payment_failed':
|
||||
|
||||
// manejar fallo de pago
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return response('OK', 200);
|
||||
return response()->json(['status' => 'ok']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,7 @@ class UserController extends Controller
|
||||
public function destroy(User $user)
|
||||
{
|
||||
$user->plantelUsuarios()->detach();
|
||||
$user->roles()->detach();
|
||||
$user->delete();
|
||||
session()->flash('swal',[
|
||||
'icon'=>'success',
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
class CarruselInicio extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.carrusel-inicio');
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\Models\Alumno;
|
||||
use App\Models\Pago;
|
||||
use App\Models\Plan;
|
||||
use App\Models\Medio;
|
||||
@@ -12,7 +13,6 @@ use App\Models\Campan;
|
||||
use App\Models\Plantel;
|
||||
use Livewire\Component;
|
||||
use App\Models\Concepto;
|
||||
use App\Models\Prospecto;
|
||||
use Livewire\Attributes\On;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Spatie\Permission\Models\Role;
|
||||
@@ -26,6 +26,8 @@ class DataProspecto extends Component
|
||||
public $activeProspectId = null;
|
||||
|
||||
public $pname;
|
||||
public $papellidoPaterno;
|
||||
public $papellidoMaterno;
|
||||
public $pemail;
|
||||
public $ptelefono;
|
||||
public $pdireccion;
|
||||
@@ -121,13 +123,15 @@ class DataProspecto extends Component
|
||||
|
||||
public function actualizarProspecto()
|
||||
{
|
||||
$user = $this->prospecto->prospectos()->first();
|
||||
$user = $this->prospecto->alumnos()->first();
|
||||
if (!$user) return;
|
||||
|
||||
try {
|
||||
|
||||
$this->validate([
|
||||
'pname' => 'required',
|
||||
'papellidoPaterno' => 'required',
|
||||
'papellidoMaterno' => 'required',
|
||||
|
||||
'pemail' => [
|
||||
'required',
|
||||
@@ -143,6 +147,8 @@ class DataProspecto extends Component
|
||||
|
||||
], [
|
||||
'pname.required' => 'El nombre es obligatorio',
|
||||
'papellidoPaterno.required' => 'El apellido paterno es obligatorio',
|
||||
'papellidoMaterno.required' => 'El apellido materno es obligatorio',
|
||||
'pemail.required' => 'El correo es obligatorio',
|
||||
'pemail.email' => 'El correo no es válido',
|
||||
'pemail.unique' => 'Este correo ya está registrado',
|
||||
@@ -171,7 +177,9 @@ class DataProspecto extends Component
|
||||
}
|
||||
|
||||
$user->update([
|
||||
'name' => $this->pname,
|
||||
'name' => mb_strtoupper($this->pname, 'UTF-8'),
|
||||
'apellidoPaterno' => mb_strtoupper($this->papellidoPaterno, 'UTF-8'),
|
||||
'apellidoMaterno' => mb_strtoupper($this->papellidoMaterno, 'UTF-8'),
|
||||
'email' => $this->pemail,
|
||||
'telefono' => $this->ptelefono,
|
||||
'direccion' => $this->pdireccion,
|
||||
@@ -205,11 +213,13 @@ class DataProspecto extends Component
|
||||
|
||||
$this->resetForm();
|
||||
|
||||
$this->prospecto = Prospecto::findOrFail($id);
|
||||
$user = $this->prospecto->prospectos()->first();
|
||||
$this->prospecto = Alumno::findOrFail($id);
|
||||
$user = $this->prospecto->alumnos()->first();
|
||||
if (!$user) return;
|
||||
|
||||
$this->pname = $user->name;
|
||||
$this->papellidoPaterno = $user->apellidoPaterno;
|
||||
$this->papellidoMaterno = $user->apellidoPaterno;
|
||||
$this->pemail = $user->email;
|
||||
$this->ptelefono = $user->telefono;
|
||||
$this->pdireccion = $user->direccion;
|
||||
@@ -260,7 +270,6 @@ class DataProspecto extends Component
|
||||
public function plan()
|
||||
{
|
||||
|
||||
|
||||
if($this->prospecto->plane_id != $this->selectedplane){
|
||||
|
||||
Pago::where('user_id', '=', $this->prospecto->id)->delete();
|
||||
@@ -313,6 +322,9 @@ class DataProspecto extends Component
|
||||
{
|
||||
// Usuario
|
||||
$this->pname = null;
|
||||
$this->papellidoPaterno = null;
|
||||
$this->papellidoMaterno = null;
|
||||
$this->pname = null;
|
||||
$this->pemail = null;
|
||||
$this->ptelefono = null;
|
||||
$this->pdireccion = null;
|
||||
|
||||
@@ -2,28 +2,32 @@
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\Models\Alumno;
|
||||
use App\Models\Campan;
|
||||
use App\Models\Medio;
|
||||
use App\Models\User;
|
||||
use App\Models\Nivel;
|
||||
use App\Models\Plan;
|
||||
use App\Models\Plantel;
|
||||
use App\Models\Prospecto;
|
||||
use App\Models\Turno;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Notifications\ResetPassword;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Support\Str;
|
||||
use Livewire\Attributes\On;
|
||||
use Livewire\Component;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class ModalProspecto extends Component
|
||||
{
|
||||
// Usuario
|
||||
public $pname;
|
||||
public $papellidoPaterno;
|
||||
public $papellidoMaterno;
|
||||
public $pemail;
|
||||
public $ptelefono;
|
||||
public $pdireccion;
|
||||
public $ppassword;
|
||||
public $pplantels;
|
||||
public $proles;
|
||||
|
||||
@@ -48,10 +52,11 @@ class ModalProspecto extends Component
|
||||
{
|
||||
$this->reset([
|
||||
'pname',
|
||||
'papellidoPaterno',
|
||||
'papellidoMaterno',
|
||||
'pemail',
|
||||
'ptelefono',
|
||||
'pdireccion',
|
||||
'ppassword',
|
||||
'pplantels',
|
||||
'proles',
|
||||
'selectedNivel',
|
||||
@@ -108,7 +113,6 @@ class ModalProspecto extends Component
|
||||
$this->active = "";
|
||||
}
|
||||
|
||||
/* ------------------ GUARDAR ------------------ */
|
||||
public function guardarProspecto()
|
||||
{
|
||||
if (User::where('email', $this->pemail)
|
||||
@@ -124,24 +128,29 @@ class ModalProspecto extends Component
|
||||
closeModal: true
|
||||
);
|
||||
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$passwordTemporal = Str::random(12);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $this->pname,
|
||||
'name' => mb_strtoupper($this->pname, 'UTF-8'),
|
||||
'apellidoPaterno' => mb_strtoupper($this->papellidoPaterno, 'UTF-8'),
|
||||
'apellidoMaterno' => mb_strtoupper($this->papellidoMaterno, 'UTF-8'),
|
||||
'email' => $this->pemail,
|
||||
'telefono' => $this->ptelefono,
|
||||
'direccion' => $this->pdireccion,
|
||||
'password' => Hash::make($this->ppassword),
|
||||
'password' => Hash::make($passwordTemporal),
|
||||
'status' => 1
|
||||
]);
|
||||
|
||||
$user->roles()->sync($this->proles);
|
||||
$user->plantelUsuarios()->sync([$this->pplantels]);
|
||||
|
||||
$prospecto = Prospecto::create([
|
||||
$token = Password::createToken($user);
|
||||
$user->notify(new ResetPassword($token));
|
||||
|
||||
$prospecto = Alumno::create([
|
||||
'nivel' => $this->selectedNivel,
|
||||
'plan_id' => $this->selectedplan,
|
||||
'usuario_registro' => Auth::id(),
|
||||
@@ -150,7 +159,7 @@ class ModalProspecto extends Component
|
||||
'medio' => $this->pmedio,
|
||||
]);
|
||||
|
||||
$prospecto->prospectos()->sync([$user->id]);
|
||||
$prospecto->alumnos()->sync([$user->id]);
|
||||
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
@@ -165,8 +174,6 @@ class ModalProspecto extends Component
|
||||
$this->resetForm();
|
||||
}
|
||||
|
||||
|
||||
/* ------------------ RENDER ------------------ */
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.modal-prospecto', [
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
|
||||
class Alumno extends Model
|
||||
{
|
||||
protected $guarded = [];
|
||||
|
||||
public function plantelUsuarios(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Plantel::class);
|
||||
}
|
||||
|
||||
public function existe($plantelId): bool
|
||||
{
|
||||
return $this->plantelUsuarios()
|
||||
->where('plantels.id', $plantelId)
|
||||
->exists();
|
||||
}
|
||||
|
||||
public function alumnos() : BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(User::class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\Plantel;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
|
||||
class Prospecto extends Model
|
||||
{
|
||||
protected $guarded = [];
|
||||
|
||||
|
||||
public function plantelUsuarios(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Plantel::class);
|
||||
}
|
||||
|
||||
public function existe($plantelId): bool
|
||||
{
|
||||
return $this->plantelUsuarios()
|
||||
->where('plantels.id', $plantelId)
|
||||
->exists();
|
||||
}
|
||||
|
||||
public function prospectos() : BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(User::class);
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -125,9 +125,9 @@ class User extends Authenticatable
|
||||
}
|
||||
|
||||
|
||||
public function prospectos() : BelongsToMany
|
||||
public function alumnos() : BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Prospecto::class);
|
||||
return $this->belongsToMany(Alumno::class);
|
||||
}
|
||||
|
||||
protected static function booted()
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class SetInitialPassword extends Notification
|
||||
{
|
||||
public $token;
|
||||
|
||||
public function __construct($token)
|
||||
{
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
$url = url(route('password.reset', [
|
||||
'token' => $this->token,
|
||||
'email' => $notifiable->email,
|
||||
], false));
|
||||
|
||||
return (new MailMessage)
|
||||
->subject('Configura tu contraseña')
|
||||
->greeting('Hola '.$notifiable->name)
|
||||
->line('Se ha creado una cuenta para ti en el sistema.')
|
||||
->line('Para acceder debes definir tu contraseña.')
|
||||
->action('Definir contraseña', $url)
|
||||
->line('Si no solicitaste esta cuenta puedes ignorar este correo.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user