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;
|
namespace App\Actions\Fortify;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Models\Prospecto;
|
||||||
|
use Laravel\Jetstream\Jetstream;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
||||||
use Laravel\Jetstream\Jetstream;
|
|
||||||
|
|
||||||
class CreateNewUser implements CreatesNewUsers
|
class CreateNewUser implements CreatesNewUsers
|
||||||
{
|
{
|
||||||
use PasswordValidationRules;
|
use PasswordValidationRules;
|
||||||
|
|
||||||
/**
|
public function create(array $input)
|
||||||
* Validate and create a newly registered user.
|
|
||||||
*
|
|
||||||
* @param array<string, string> $input
|
|
||||||
*/
|
|
||||||
public function create(array $input): User
|
|
||||||
{
|
{
|
||||||
Validator::make($input, [
|
Validator::make($input, [
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['required', 'string', 'max:255'],
|
||||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||||
|
'telefono' => ['required', 'digits:10', 'unique:users,telefono'],
|
||||||
'password' => $this->passwordRules(),
|
'password' => $this->passwordRules(),
|
||||||
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
|
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
|
||||||
])->validate();
|
])->validate();
|
||||||
|
|
||||||
return User::create([
|
|
||||||
|
|
||||||
|
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'],
|
'name' => $input['name'],
|
||||||
'email' => $input['email'],
|
'email' => $input['email'],
|
||||||
|
'telefono' => $input['telefono'],
|
||||||
|
'direccion' => "",
|
||||||
'password' => Hash::make($input['password']),
|
'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;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\Nivel;
|
|
||||||
use App\Models\Prospecto;
|
use App\Models\Prospecto;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Routing\Controller;
|
use Illuminate\Routing\Controller;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Spatie\Permission\Models\Permission;
|
|
||||||
|
|
||||||
|
|
||||||
class ProspectoController extends Controller
|
class ProspectoController extends Controller
|
||||||
@@ -24,12 +21,31 @@ class ProspectoController extends Controller
|
|||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
$plantelesUsuario = $user->plantelUsuarios->pluck('id');
|
||||||
|
|
||||||
|
$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);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
$prospectos = User::with(['prospectos' => function ($query) use ($user) {
|
|
||||||
$query->where('usuario_registro', $user->id);
|
|
||||||
}])
|
}])
|
||||||
->whereHas('prospectos', function ($query) use ($user) {
|
->whereHas('prospectos', function ($query) use ($user, $plantelesUsuario) {
|
||||||
$query->where('usuario_registro', $user->id);
|
|
||||||
|
$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();
|
->get();
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -331,6 +331,7 @@ class DataProspecto extends Component
|
|||||||
$this->niveles = [];
|
$this->niveles = [];
|
||||||
$this->plans = [];
|
$this->plans = [];
|
||||||
$this->turnos = [];
|
$this->turnos = [];
|
||||||
|
$this->conceptos = [];
|
||||||
|
|
||||||
$this->active = "disabled";
|
$this->active = "disabled";
|
||||||
$this->prospecto = null;
|
$this->prospecto = null;
|
||||||
|
|||||||
@@ -68,9 +68,6 @@ class ModalProspecto extends Component
|
|||||||
$this->active = "disabled";
|
$this->active = "disabled";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------ EDITAR ------------------ */
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------ NUEVO ------------------ */
|
/* ------------------ NUEVO ------------------ */
|
||||||
#[On('create-prospecto')]
|
#[On('create-prospecto')]
|
||||||
public function createProspecto()
|
public function createProspecto()
|
||||||
@@ -118,10 +115,16 @@ class ModalProspecto extends Component
|
|||||||
->orWhere('telefono', $this->ptelefono)
|
->orWhere('telefono', $this->ptelefono)
|
||||||
->exists()) {
|
->exists()) {
|
||||||
|
|
||||||
$this->dispatch('swal:error', [
|
$this->dispatch('swal',
|
||||||
'title' => 'Registro duplicado',
|
icon: 'error',
|
||||||
'text' => 'El correo o teléfono ya están registrados.'
|
title: 'Registro duplicado',
|
||||||
]);
|
text: 'El correo o teléfono ya están registrados.',
|
||||||
|
timer: 2000,
|
||||||
|
confirm: false,
|
||||||
|
closeModal: true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -149,8 +152,16 @@ class ModalProspecto extends Component
|
|||||||
|
|
||||||
$prospecto->prospectos()->sync([$user->id]);
|
$prospecto->prospectos()->sync([$user->id]);
|
||||||
|
|
||||||
$this->dispatch('swal:success');
|
$this->dispatch('swal',
|
||||||
$this->dispatch('prospecto-creado');
|
icon: 'success',
|
||||||
|
title: 'Registrado!',
|
||||||
|
text: 'Se registró el prospecto correctamente',
|
||||||
|
timer: 2000,
|
||||||
|
confirm: false,
|
||||||
|
closeModal: true,
|
||||||
|
reload: 2000
|
||||||
|
);
|
||||||
|
|
||||||
$this->resetForm();
|
$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',
|
'direccion',
|
||||||
'plantel',
|
'plantel',
|
||||||
'password',
|
'password',
|
||||||
|
'code',
|
||||||
'status',
|
'status',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* The attributes that should be hidden for serialization.
|
|
||||||
*
|
|
||||||
* @var array<int, string>
|
|
||||||
*/
|
|
||||||
protected $hidden = [
|
protected $hidden = [
|
||||||
'password',
|
'password',
|
||||||
'remember_token',
|
'remember_token',
|
||||||
@@ -53,11 +50,7 @@ class User extends Authenticatable
|
|||||||
'status',
|
'status',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* The accessors to append to the model's array form.
|
|
||||||
*
|
|
||||||
* @var array<int, string>
|
|
||||||
*/
|
|
||||||
protected $appends = [
|
protected $appends = [
|
||||||
'profile_photo_url',
|
'profile_photo_url',
|
||||||
];
|
];
|
||||||
@@ -87,6 +80,11 @@ class User extends Authenticatable
|
|||||||
return $this->hasMany(Note::class);
|
return $this->hasMany(Note::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function codes() : HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(Code::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function pagos() : HasMany
|
public function pagos() : HasMany
|
||||||
{
|
{
|
||||||
return $this->hasMany(Pago::class);
|
return $this->hasMany(Pago::class);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ use App\Actions\Fortify\CreateNewUser;
|
|||||||
use App\Actions\Fortify\ResetUserPassword;
|
use App\Actions\Fortify\ResetUserPassword;
|
||||||
use App\Actions\Fortify\UpdateUserPassword;
|
use App\Actions\Fortify\UpdateUserPassword;
|
||||||
use App\Actions\Fortify\UpdateUserProfileInformation;
|
use App\Actions\Fortify\UpdateUserProfileInformation;
|
||||||
|
use App\Models\Plantel;
|
||||||
use Illuminate\Cache\RateLimiting\Limit;
|
use Illuminate\Cache\RateLimiting\Limit;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\RateLimiter;
|
use Illuminate\Support\Facades\RateLimiter;
|
||||||
@@ -38,6 +39,14 @@ class FortifyServiceProvider extends ServiceProvider
|
|||||||
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
|
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
|
||||||
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
||||||
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::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) {
|
Fortify::authenticateUsing(function (Request $request) {
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ return new class extends Migration
|
|||||||
$table->unsignedBigInteger('telefono')->unique();
|
$table->unsignedBigInteger('telefono')->unique();
|
||||||
$table->string('direccion');
|
$table->string('direccion');
|
||||||
$table->string('password');
|
$table->string('password');
|
||||||
|
$table->string('code')->nullable();
|
||||||
$table->boolean('status');
|
$table->boolean('status');
|
||||||
$table->rememberToken();
|
$table->rememberToken();
|
||||||
$table->foreignId('current_team_id')->nullable();
|
$table->foreignId('current_team_id')->nullable();
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('codes', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->unsignedBigInteger('user_id');
|
||||||
|
$table->dateTime('registro')->nullable();
|
||||||
|
$table->string('latitud');
|
||||||
|
$table->string('longitud');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('codes');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('area_code', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('name');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('area_code');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class AreaCodeSeeder extends Seeder
|
||||||
|
{
|
||||||
|
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
DB::table('area_code')->insert([
|
||||||
|
'name' => 'COR-DSIS'
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::table('area_code')->insert([
|
||||||
|
'name' => 'COR-PROG'
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::table('area_code')->insert([
|
||||||
|
'name' => 'COR-CSIS'
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::table('area_code')->insert([
|
||||||
|
'name' => 'COR-RECU'
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::table('area_code')->insert([
|
||||||
|
'name' => 'COR-COMP'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ class DatabaseSeeder extends Seeder
|
|||||||
{
|
{
|
||||||
$this->call(RoleSeeder::class);
|
$this->call(RoleSeeder::class);
|
||||||
$this->call(PlantelSeeder::class);
|
$this->call(PlantelSeeder::class);
|
||||||
|
$this->call(AreaCodeSeeder::class);
|
||||||
$this->call(UserSeeder::class);
|
$this->call(UserSeeder::class);
|
||||||
$this->call(NivelSeeder::class);
|
$this->call(NivelSeeder::class);
|
||||||
$this->call(DurationSeeder::class);
|
$this->call(DurationSeeder::class);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
use Spatie\Permission\Models\Permission;
|
use Spatie\Permission\Models\Permission;
|
||||||
@@ -103,5 +102,14 @@ class RoleSeeder extends Seeder
|
|||||||
Permission::create(['name'=>'concepto.create','description'=>'Crear conceptos'])->syncRoles([$role1]);
|
Permission::create(['name'=>'concepto.create','description'=>'Crear conceptos'])->syncRoles([$role1]);
|
||||||
Permission::create(['name'=>'concepto.edit','description'=>'Editar conceptos'])->syncRoles([$role1]);
|
Permission::create(['name'=>'concepto.edit','description'=>'Editar conceptos'])->syncRoles([$role1]);
|
||||||
Permission::create(['name'=>'concepto.destroy','description'=>'Eliminar conceptos'])->syncRoles([$role1]);
|
Permission::create(['name'=>'concepto.destroy','description'=>'Eliminar conceptos'])->syncRoles([$role1]);
|
||||||
|
|
||||||
|
Permission::create(['name'=>'code.index','description'=>'Ver asistencia digital'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'code.create','description'=>'Asistencia digital'])->syncRoles([$role1]);
|
||||||
|
|
||||||
|
Permission::create(['name'=>'asistencia.index','description'=>'Ver asistencias'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'asistencia.create','description'=>'Crear asistencias'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'asistencia.edit','description'=>'Editar asistencias'])->syncRoles([$role1]);
|
||||||
|
Permission::create(['name'=>'asistencia.destroy','description'=>'Eliminar asistencias'])->syncRoles([$role1]);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class UserSeeder extends Seeder
|
|||||||
'direccion'=>'Zacatenco mz 21 lt 2 san francisco cuautliquixca',
|
'direccion'=>'Zacatenco mz 21 lt 2 san francisco cuautliquixca',
|
||||||
'telefono'=>'5636287759',
|
'telefono'=>'5636287759',
|
||||||
'password' => bcrypt('6686'),
|
'password' => bcrypt('6686'),
|
||||||
|
'code'=>1,
|
||||||
'status'=>1
|
'status'=>1
|
||||||
])->assignRole('Admin');
|
])->assignRole('Admin');
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,10 @@ namespace Database\Seeders;
|
|||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
||||||
|
|
||||||
class prospectoStatusSeeder extends Seeder
|
class prospectoStatusSeeder extends Seeder
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Run the database seeds.
|
|
||||||
*/
|
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
DB::table('prospecto_status')->insert([
|
DB::table('prospecto_status')->insert([
|
||||||
|
|||||||
@@ -32,6 +32,15 @@
|
|||||||
|
|
||||||
<form method="POST" action="{{ route('register') }}" class="user">
|
<form method="POST" action="{{ route('register') }}" class="user">
|
||||||
@csrf
|
@csrf
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="plantels">Seleccionar Campus</label>
|
||||||
|
<select class="form-control" name="plantels" id="plantels" >
|
||||||
|
<option value="0" >Selecciona un plantel</option>
|
||||||
|
@foreach($plantels as $plantel)
|
||||||
|
<option value="{{ $plantel->id }}">{{ $plantel->name }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nombre</label>
|
<label>Nombre</label>
|
||||||
@@ -45,7 +54,7 @@
|
|||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Teléfono</label>
|
<label>Teléfono</label>
|
||||||
<input type="number" class="form-control form-control-user" name="telefono" autocomplete="off" required autofocus autocomplete="telefono">
|
<input type="text" class="form-control form-control-user" name="telefono" maxlength="10" onkeypress="return event.charCode >= 48 && event.charCode <= 57" inputmode="numeric" autocomplete="off" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -55,7 +64,7 @@
|
|||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Confirmar contraseña</label>
|
<label>Confirmar contraseña</label>
|
||||||
<input type="password" class="form-control form-control-user" id="password" name="password" placeholder="Confirmar contraseña" required autocomplete="current-password">
|
<input type="password" class="form-control form-control-user" id="password_confirmation" name="password_confirmation" placeholder="Confirmar contraseña" required autocomplete="current-password">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -84,6 +93,15 @@
|
|||||||
@include('layouts._partials.scripts')
|
@include('layouts._partials.scripts')
|
||||||
@livewireScripts
|
@livewireScripts
|
||||||
@yield('scripts')
|
@yield('scripts')
|
||||||
|
@if ($errors->any())
|
||||||
|
<script>
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'error',
|
||||||
|
title: 'Error',
|
||||||
|
text: '{{ $errors->first() }}'
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
@extends('layouts.landing')
|
||||||
|
|
||||||
|
@section('title',"Inicio")
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">Asistencia</h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
@livewire('code-scanner')
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('scripts')
|
||||||
|
<script src="https://unpkg.com/html5-qrcode"></script>
|
||||||
|
@endsection
|
||||||
File diff suppressed because one or more lines are too long
@@ -24,12 +24,6 @@
|
|||||||
<!-- Heading -->
|
<!-- Heading -->
|
||||||
<div class="sidebar-heading" style="color:white">Modulos</div>
|
<div class="sidebar-heading" style="color:white">Modulos</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Roles -->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Nav Item - Utilities Collapse Menu -->
|
|
||||||
@hasrole('Admin')
|
@hasrole('Admin')
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Administrador"
|
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Administrador"
|
||||||
@@ -102,41 +96,6 @@
|
|||||||
</li>
|
</li>
|
||||||
@endrole
|
@endrole
|
||||||
|
|
||||||
<!-- Nav Item - Utilities Collapse Menu -->
|
|
||||||
{{-- <li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Inventario"
|
|
||||||
aria-expanded="true" aria-controls="Inventario">
|
|
||||||
<i class="fas fa-fw fa-wrench" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Inventario</span>
|
|
||||||
</a>
|
|
||||||
<div id="Inventario" class="collapse" aria-labelledby="headingUtilities"
|
|
||||||
data-parent="#accordionSidebar">
|
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
|
||||||
<h6 class="collapse-header">Herramientas:</h6>
|
|
||||||
<a class="collapse-item" href="inicio_inventario.php" style="color:#85888e">Pagina Principal</a>
|
|
||||||
<a class="collapse-item" href="proveedores.php" style="color:#85888e">Proveedores</a>
|
|
||||||
<a class="collapse-item" href="historial_compras.php" style="color:#85888e">Historial de compras</a>
|
|
||||||
<a class="collapse-item" href="evalucion.php" style="color:#85888e">Evaluación</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li> --}}
|
|
||||||
|
|
||||||
|
|
||||||
{{-- <li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#ControlEscolar"
|
|
||||||
aria-expanded="true" aria-controls="ControlEscolar">
|
|
||||||
<i class="fas fa-book" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Control Escolar</span>
|
|
||||||
</a>
|
|
||||||
<div id="ControlEscolar" class="collapse" aria-labelledby="ControlEscolar" data-parent="#accordionSidebar">
|
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
|
||||||
<h6 class="collapse-header">Herramientas</h6>
|
|
||||||
<a class="collapse-item" href="dal.php" style="color:#85888e">Alumnos</a>
|
|
||||||
<a class="collapse-item" href="calificaciones.php" style="color:#85888e">Calificaciones</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li> --}}
|
|
||||||
|
|
||||||
@hasrole('Promotor')
|
@hasrole('Promotor')
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Promocion"
|
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Promocion"
|
||||||
@@ -167,40 +126,20 @@
|
|||||||
</li>
|
</li>
|
||||||
@endrole
|
@endrole
|
||||||
|
|
||||||
{{-- <li class="nav-item">
|
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#Finanzas"
|
|
||||||
aria-expanded="true" aria-controls="Finanzas">
|
|
||||||
<i class="fas fa-money-bill-alt" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Finanzas</span>
|
|
||||||
</a>
|
|
||||||
<div id="Finanzas" class="collapse" aria-labelledby="Finanzas" data-parent="#accordionSidebar">
|
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
|
||||||
<h6 class="collapse-header">Herramientas</h6>
|
|
||||||
<a class="collapse-item" href="dal.php" style="color:#85888e">Alumnos</a>
|
|
||||||
<a class="collapse-item" href="calificaciones.php" style="color:#85888e">Calificaciones</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li> --}}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- /Roles -->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Divider -->
|
<!-- Divider -->
|
||||||
<hr class="sidebar-divider">
|
<hr class="sidebar-divider">
|
||||||
<!-- Heading -->
|
<!-- Heading -->
|
||||||
<div class="sidebar-heading" style="color:white">Adicionales</div>
|
<div class="sidebar-heading" style="color:white">Adicionales</div>
|
||||||
|
|
||||||
<!-- Nav Item - Chats -->
|
{{-- <li class="nav-item">
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="chats.php">
|
<a class="nav-link" href="chats.php">
|
||||||
<i class="fas fa-fw fa-comments" style="color: #e8e8e8;"></i>
|
<i class="fas fa-fw fa-comments" style="color: #e8e8e8;"></i>
|
||||||
<span>Chats</span></a>
|
<span>Chats</span></a>
|
||||||
</li>
|
</li> --}}
|
||||||
|
|
||||||
<!-- Nav Item - Utilities Collapse Menu -->
|
|
||||||
|
@can('code.index')
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities"
|
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities"
|
||||||
aria-expanded="true" aria-controls="collapseUtilities">
|
aria-expanded="true" aria-controls="collapseUtilities">
|
||||||
@@ -211,46 +150,14 @@
|
|||||||
data-parent="#accordionSidebar">
|
data-parent="#accordionSidebar">
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
<div class="bg-white py-2 collapse-inner rounded">
|
||||||
<h6 class="collapse-header">Herramientas:</h6>
|
<h6 class="collapse-header">Herramientas:</h6>
|
||||||
<a class="collapse-item" href="unidad.php" style="color:gray">Mi unidad</a>
|
<a class="collapse-item" href="{{ route('code.index') }}" style="color:gray">Escanear</a>
|
||||||
|
{{-- <a class="collapse-item" href="{{ route('code.show') }}" style="color:gray">Registros</a> --}}
|
||||||
<a class="collapse-item" href="asistencia.php" style="color:gray">Generar Chequeos</a>
|
|
||||||
|
|
||||||
<a class="collapse-item" href="mapa.php" style="color:gray">Rastreo</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
@endcan
|
||||||
|
|
||||||
|
|
||||||
<!-- Nav Item - Chats -->
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="calendario.php">
|
|
||||||
<i class="fas fa-fw fa-calendar" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Calendario</span></a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<!-- Nav Item - Chats -->
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="blog.php">
|
|
||||||
<i class="fas fa-fw fa-blog" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Blog</span></a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Nav Item - notes -->
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="reporte_sistemas.php">
|
|
||||||
<i class="fas fa-file-alt" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Reporte de sistemas</span></a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Nav Item - notes -->
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="tienda.php">
|
|
||||||
<i class="fas fa-store" style="color: #e8e8e8;"></i>
|
|
||||||
<span>Tienda Online</span></a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Nav Item - notes -->
|
<!-- Nav Item - notes -->
|
||||||
@can('note.index')
|
@can('note.index')
|
||||||
|
|||||||
@@ -33,30 +33,59 @@
|
|||||||
{{-- scripts por vista --}}
|
{{-- scripts por vista --}}
|
||||||
@yield('scripts')
|
@yield('scripts')
|
||||||
|
|
||||||
|
@stack('scripts')
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
window.addEventListener('swal', event => {
|
document.addEventListener('livewire:init', () => {
|
||||||
|
|
||||||
console.log('Evento swal recibido:', event.detail);
|
Livewire.on('swal', (data, ...payload) => {
|
||||||
|
|
||||||
if (!event.detail) return;
|
// 🔥 compatibilidad Livewire viejo y nuevo
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
data = data[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data && payload.length) {
|
||||||
|
data = payload[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data || !data.text) {
|
||||||
|
console.warn('SweetAlert disparado sin datos', data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
icon: event.detail.icon ?? 'info',
|
icon: data.icon ?? 'info',
|
||||||
title: event.detail.title ?? 'Aviso',
|
title: data.title ?? 'Aviso',
|
||||||
text: event.detail.text ?? '',
|
text: data.text,
|
||||||
|
timer: data.timer ?? null,
|
||||||
|
showConfirmButton: data.confirm ?? true,
|
||||||
});
|
});
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
if (data.reload) {
|
||||||
window.addEventListener('close-modal', () => {
|
setTimeout(() => location.reload(), data.reload);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.closeModal) {
|
||||||
|
$('#exampleModal').modal('hide');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Livewire.on('open-prospecto-modal', () => {
|
||||||
|
$('#exampleModal').modal('show');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('close-modal', () => {
|
||||||
const modal = bootstrap.Modal.getInstance(
|
const modal = bootstrap.Modal.getInstance(
|
||||||
document.getElementById('logoutSessionsModal')
|
document.getElementById('logoutSessionsModal')
|
||||||
);
|
);
|
||||||
modal?.hide();
|
modal?.hide();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<div>
|
||||||
|
<div wire:ignore>
|
||||||
|
<div id="reader"></div>
|
||||||
|
|
||||||
|
<p>Latitud: <span id="latitud">Esperando GPS...</span></p>
|
||||||
|
<p>Longitud: <span id="longitud">Esperando GPS...</span></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@push('scripts')
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
let scanner = null;
|
||||||
|
let gpsListo = false;
|
||||||
|
let yaEscaneado = false;
|
||||||
|
let latitud = null;
|
||||||
|
let longitud = null;
|
||||||
|
|
||||||
|
function iniciarScanner(){
|
||||||
|
|
||||||
|
if(scanner !== null) return;
|
||||||
|
|
||||||
|
scanner = new Html5Qrcode("reader");
|
||||||
|
|
||||||
|
scanner.start(
|
||||||
|
{ facingMode: "environment" },
|
||||||
|
{ fps: 10, qrbox: 250 },
|
||||||
|
(mensaje) => {
|
||||||
|
|
||||||
|
if(!gpsListo){
|
||||||
|
Swal.fire("GPS","Esperando ubicación...","warning");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(yaEscaneado) return;
|
||||||
|
yaEscaneado = true;
|
||||||
|
|
||||||
|
Livewire.dispatch('qrLeido', {
|
||||||
|
texto: mensaje,
|
||||||
|
lat: latitud,
|
||||||
|
lng: longitud
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('livewire:init', () => {
|
||||||
|
|
||||||
|
if ("geolocation" in navigator) {
|
||||||
|
|
||||||
|
navigator.geolocation.getCurrentPosition(
|
||||||
|
|
||||||
|
function(pos){
|
||||||
|
|
||||||
|
latitud = pos.coords.latitude;
|
||||||
|
longitud = pos.coords.longitude;
|
||||||
|
gpsListo = true;
|
||||||
|
|
||||||
|
document.getElementById("latitud").innerText = latitud;
|
||||||
|
document.getElementById("longitud").innerText = longitud;
|
||||||
|
|
||||||
|
iniciarScanner();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
function(error){
|
||||||
|
Swal.fire(
|
||||||
|
"GPS ERROR",
|
||||||
|
"Activa el gps y vuelve a intentar",
|
||||||
|
"error"
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
enableHighAccuracy:true,
|
||||||
|
timeout:15000,
|
||||||
|
maximumAge:0
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener("visibilitychange", function() {
|
||||||
|
|
||||||
|
if(document.hidden && scanner){
|
||||||
|
scanner.stop().catch(()=>{});
|
||||||
|
scanner = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!document.hidden && gpsListo){
|
||||||
|
iniciarScanner();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@endpush
|
||||||
@@ -71,35 +71,6 @@
|
|||||||
@include('layouts._partials.delete')
|
@include('layouts._partials.delete')
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('livewire:init', () => {
|
document.addEventListener('livewire:init', () => {
|
||||||
|
|
||||||
Livewire.on('swal', data => {
|
|
||||||
|
|
||||||
if (!data?.text) {
|
|
||||||
console.warn('SweetAlert disparado sin datos', data);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: data.icon ?? 'info',
|
|
||||||
title: data.title ?? 'Aviso',
|
|
||||||
text: data.text,
|
|
||||||
timer: data.timer ?? null,
|
|
||||||
showConfirmButton: data.confirm ?? true,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (data.reload) {
|
|
||||||
setTimeout(() => location.reload(), data.reload);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.closeModal) {
|
|
||||||
$('#exampleModal').modal('hide');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Livewire.on('open-prospecto-modal', () => {
|
|
||||||
$('#exampleModal').modal('show');
|
|
||||||
});
|
|
||||||
|
|
||||||
Livewire.on('mark-active-prospect', ({ id }) => {
|
Livewire.on('mark-active-prospect', ({ id }) => {
|
||||||
|
|
||||||
document.querySelectorAll('.list-group-item')
|
document.querySelectorAll('.list-group-item')
|
||||||
|
|||||||
+20
-16
@@ -14,6 +14,7 @@ use App\Http\Controllers\TurnoController;
|
|||||||
use App\Http\Controllers\CampanController;
|
use App\Http\Controllers\CampanController;
|
||||||
use App\Http\Controllers\StripeController;
|
use App\Http\Controllers\StripeController;
|
||||||
use App\Http\Controllers\CarreraController;
|
use App\Http\Controllers\CarreraController;
|
||||||
|
use App\Http\Controllers\CodeController;
|
||||||
use App\Http\Controllers\PlantelController;
|
use App\Http\Controllers\PlantelController;
|
||||||
use App\Http\Controllers\ConceptoController;
|
use App\Http\Controllers\ConceptoController;
|
||||||
use App\Http\Controllers\DurationController;
|
use App\Http\Controllers\DurationController;
|
||||||
@@ -31,26 +32,29 @@ Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified',
|
|||||||
])->group(function () {
|
])->group(function () {
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
Route::middleware(['auth'])->group(function () {
|
||||||
Route::get('/perfil', [UserProfileController::class, 'show'])->name('profile.show');});
|
|
||||||
Route::get('/dashboard', function () {return view('dashboard');})->name('dashboard');
|
|
||||||
Route::resource('/note',NoteController::class);
|
|
||||||
Route::resource('/user',UserController::class);
|
|
||||||
Route::resource('/role',RoleController::class);
|
|
||||||
Route::resource('/plantel',PlantelController::class);
|
|
||||||
Route::resource('/permission',PermissionController::class);
|
|
||||||
Route::resource('/nivel',NivelController::class);
|
|
||||||
Route::resource('/carrera',CarreraController::class);
|
|
||||||
Route::resource('/duration',DurationController::class);
|
|
||||||
Route::resource('/plan',PlanController::class);
|
|
||||||
Route::resource('/material',MaterialController::class);
|
|
||||||
Route::resource('/prospecto',ProspectoController::class);
|
|
||||||
Route::resource('/area',AreaController::class);
|
Route::resource('/area',AreaController::class);
|
||||||
|
Route::get('/dashboard', function () {return view('dashboard');})->name('dashboard');
|
||||||
Route::resource('/campan',CampanController::class);
|
Route::resource('/campan',CampanController::class);
|
||||||
Route::resource('/turno',TurnoController::class);
|
Route::resource('/carrera',CarreraController::class);
|
||||||
Route::resource('/medio',MedioController::class);
|
Route::resource('/code',CodeController::class);
|
||||||
Route::resource('/plane',PlaneController::class);
|
|
||||||
Route::resource('/concepto',ConceptoController::class);
|
Route::resource('/concepto',ConceptoController::class);
|
||||||
|
Route::resource('/duration',DurationController::class);
|
||||||
|
Route::resource('/material',MaterialController::class);
|
||||||
|
Route::resource('/medio',MedioController::class);
|
||||||
|
Route::resource('/nivel',NivelController::class);
|
||||||
|
Route::resource('/note',NoteController::class);
|
||||||
Route::resource('/pago',PagoController::class);
|
Route::resource('/pago',PagoController::class);
|
||||||
Route::post('/pagar/{pago}', [StripeController::class, 'pagar'])->name('pagar');
|
Route::post('/pagar/{pago}', [StripeController::class, 'pagar'])->name('pagar');
|
||||||
Route::get('/pagar/{status}', [StripeController::class, 'show'])->name('pagar.show');
|
Route::get('/pagar/{status}', [StripeController::class, 'show'])->name('pagar.show');
|
||||||
|
Route::get('/perfil', [UserProfileController::class, 'show'])->name('profile.show');});
|
||||||
|
Route::resource('/permission',PermissionController::class);
|
||||||
|
Route::resource('/plan',PlanController::class);
|
||||||
|
Route::resource('/plane',PlaneController::class);
|
||||||
|
Route::resource('/plantel',PlantelController::class);
|
||||||
|
Route::resource('/prospecto',ProspectoController::class);
|
||||||
|
Route::resource('/role',RoleController::class);
|
||||||
|
Route::resource('/turno',TurnoController::class);
|
||||||
|
Route::resource('/user',UserController::class);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user