Actualización de moelo user y relación many con asistencias, creación del modelo de asistencia y control por middleware y autenticación
This commit is contained in:
@@ -3,33 +3,64 @@
|
||||
namespace App\Actions\Fortify;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Prospecto;
|
||||
use Laravel\Jetstream\Jetstream;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
||||
use Laravel\Jetstream\Jetstream;
|
||||
|
||||
class CreateNewUser implements CreatesNewUsers
|
||||
{
|
||||
use PasswordValidationRules;
|
||||
|
||||
/**
|
||||
* Validate and create a newly registered user.
|
||||
*
|
||||
* @param array<string, string> $input
|
||||
*/
|
||||
public function create(array $input): User
|
||||
public function create(array $input)
|
||||
{
|
||||
Validator::make($input, [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'telefono' => ['required', 'digits:10', 'unique:users,telefono'],
|
||||
'password' => $this->passwordRules(),
|
||||
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
|
||||
])->validate();
|
||||
|
||||
return User::create([
|
||||
'name' => $input['name'],
|
||||
'email' => $input['email'],
|
||||
'password' => Hash::make($input['password']),
|
||||
|
||||
|
||||
if (User::where('email', $input['email'])
|
||||
->orWhere('telefono', $input['telefono'])
|
||||
->exists()) {
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'email' => ['El correo o teléfono ya están registrados.']
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
$user = User::create([
|
||||
'name' => $input['name'],
|
||||
'email' => $input['email'],
|
||||
'telefono' => $input['telefono'],
|
||||
'direccion' => "",
|
||||
'password' => Hash::make($input['password']),
|
||||
'status' => 1
|
||||
]);
|
||||
|
||||
$user->roles()->sync([4]);
|
||||
$user->plantelUsuarios()->sync($input['plantels']);
|
||||
|
||||
$prospecto = Prospecto::create([
|
||||
'nivel' => 0,
|
||||
'plan_id' => 0,
|
||||
'usuario_registro' => 0,
|
||||
'ciclo' => 0,
|
||||
'turno' => 0,
|
||||
'medio' => 0,
|
||||
]);
|
||||
|
||||
$prospecto->prospectos()->sync([$user->id]);
|
||||
|
||||
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Code;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class CodeController extends Controller
|
||||
{
|
||||
public function __construct() {
|
||||
$this->middleware('can:code.index')->only('index','show','create');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
// $conceptos = Concepto::where('tipo','=','3')->get();
|
||||
return view('code.index');
|
||||
}
|
||||
|
||||
public function show()
|
||||
{
|
||||
return view('code.show');
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,10 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Nivel;
|
||||
use App\Models\Prospecto;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
|
||||
|
||||
class ProspectoController extends Controller
|
||||
@@ -24,38 +21,57 @@ class ProspectoController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$plantelesUsuario = $user->plantelUsuarios->pluck('id');
|
||||
|
||||
$prospectos = User::with(['prospectos' => function ($query) use ($user) {
|
||||
$query->where('usuario_registro', $user->id);
|
||||
}])
|
||||
->whereHas('prospectos', function ($query) use ($user) {
|
||||
$query->where('usuario_registro', $user->id);
|
||||
})
|
||||
->get();
|
||||
$prospectos = User::with(['prospectos' => 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) {
|
||||
$sub->whereIn('plantels.id', $plantelesUsuario);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}])
|
||||
->whereHas('prospectos', 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) {
|
||||
$sub->whereIn('plantels.id', $plantelesUsuario);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
})
|
||||
->get();
|
||||
|
||||
return view('prospecto.index', compact('prospectos'));
|
||||
}
|
||||
|
||||
public function destroy(Prospecto $prospecto)
|
||||
{
|
||||
$user = $prospecto->prospectos()->first();
|
||||
$user = $prospecto->prospectos()->first();
|
||||
|
||||
if ($user) {
|
||||
$user->roles()->detach();
|
||||
if ($user) {
|
||||
$user->roles()->detach();
|
||||
|
||||
$user->plantelUsuarios()->detach();
|
||||
$user->plantelUsuarios()->detach();
|
||||
|
||||
$prospecto->prospectos()->detach($user->id);
|
||||
$prospecto->prospectos()->detach($user->id);
|
||||
|
||||
$user->delete();
|
||||
}
|
||||
$user->delete();
|
||||
}
|
||||
|
||||
$prospecto->delete();
|
||||
session()->flash('swal',[
|
||||
'icon'=>'success',
|
||||
'title'=>'Eliminado!',
|
||||
'text'=>'Se ha eliminado el registro correctamente'
|
||||
]);
|
||||
$prospecto->delete();
|
||||
session()->flash('swal',[
|
||||
'icon'=>'success',
|
||||
'title'=>'Eliminado!',
|
||||
'text'=>'Se ha eliminado el registro correctamente'
|
||||
]);
|
||||
return redirect()->route('prospecto.index');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use Livewire\Component;
|
||||
use Livewire\Attributes\On;
|
||||
|
||||
class CodeScanner extends Component
|
||||
{
|
||||
|
||||
#[On('qrLeido')]
|
||||
public function qrLeido($texto, $lat, $lng)
|
||||
{
|
||||
|
||||
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
title: 'Asistencia registrada!',
|
||||
text: $lat,
|
||||
timer: 2000,
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.code-scanner');
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ class DataProspecto extends Component
|
||||
|
||||
public function actualizarProspecto()
|
||||
{
|
||||
$user = $this->prospecto->prospectos()->first();
|
||||
$user = $this->prospecto->prospectos()->first();
|
||||
if (!$user) return;
|
||||
|
||||
try {
|
||||
@@ -331,6 +331,7 @@ class DataProspecto extends Component
|
||||
$this->niveles = [];
|
||||
$this->plans = [];
|
||||
$this->turnos = [];
|
||||
$this->conceptos = [];
|
||||
|
||||
$this->active = "disabled";
|
||||
$this->prospecto = null;
|
||||
|
||||
@@ -68,9 +68,6 @@ class ModalProspecto extends Component
|
||||
$this->active = "disabled";
|
||||
}
|
||||
|
||||
/* ------------------ EDITAR ------------------ */
|
||||
|
||||
|
||||
/* ------------------ NUEVO ------------------ */
|
||||
#[On('create-prospecto')]
|
||||
public function createProspecto()
|
||||
@@ -118,10 +115,16 @@ class ModalProspecto extends Component
|
||||
->orWhere('telefono', $this->ptelefono)
|
||||
->exists()) {
|
||||
|
||||
$this->dispatch('swal:error', [
|
||||
'title' => 'Registro duplicado',
|
||||
'text' => 'El correo o teléfono ya están registrados.'
|
||||
]);
|
||||
$this->dispatch('swal',
|
||||
icon: 'error',
|
||||
title: 'Registro duplicado',
|
||||
text: 'El correo o teléfono ya están registrados.',
|
||||
timer: 2000,
|
||||
confirm: false,
|
||||
closeModal: true
|
||||
);
|
||||
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -149,8 +152,16 @@ class ModalProspecto extends Component
|
||||
|
||||
$prospecto->prospectos()->sync([$user->id]);
|
||||
|
||||
$this->dispatch('swal:success');
|
||||
$this->dispatch('prospecto-creado');
|
||||
$this->dispatch('swal',
|
||||
icon: 'success',
|
||||
title: 'Registrado!',
|
||||
text: 'Se registró el prospecto correctamente',
|
||||
timer: 2000,
|
||||
confirm: false,
|
||||
closeModal: true,
|
||||
reload: 2000
|
||||
);
|
||||
|
||||
$this->resetForm();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class Code extends Model
|
||||
{
|
||||
protected $guarded = [];
|
||||
|
||||
protected $casts = [
|
||||
'registro' => 'datetime',
|
||||
];
|
||||
|
||||
public function user(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
+8
-10
@@ -37,14 +37,11 @@ class User extends Authenticatable
|
||||
'direccion',
|
||||
'plantel',
|
||||
'password',
|
||||
'code',
|
||||
'status',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
@@ -53,11 +50,7 @@ class User extends Authenticatable
|
||||
'status',
|
||||
];
|
||||
|
||||
/**
|
||||
* The accessors to append to the model's array form.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
|
||||
protected $appends = [
|
||||
'profile_photo_url',
|
||||
];
|
||||
@@ -87,6 +80,11 @@ class User extends Authenticatable
|
||||
return $this->hasMany(Note::class);
|
||||
}
|
||||
|
||||
public function codes() : HasMany
|
||||
{
|
||||
return $this->hasMany(Code::class);
|
||||
}
|
||||
|
||||
public function pagos() : HasMany
|
||||
{
|
||||
return $this->hasMany(Pago::class);
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Actions\Fortify\CreateNewUser;
|
||||
use App\Actions\Fortify\ResetUserPassword;
|
||||
use App\Actions\Fortify\UpdateUserPassword;
|
||||
use App\Actions\Fortify\UpdateUserProfileInformation;
|
||||
use App\Models\Plantel;
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
@@ -38,6 +39,14 @@ class FortifyServiceProvider extends ServiceProvider
|
||||
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
|
||||
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
||||
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);
|
||||
Fortify::registerView(function () {
|
||||
|
||||
$plantels = Plantel::where('status',1)->get();
|
||||
|
||||
return view('auth.register', [
|
||||
'plantels' => $plantels
|
||||
]);
|
||||
});
|
||||
|
||||
Fortify::authenticateUsing(function (Request $request) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user