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) {
|
||||
|
||||
case 'checkout.session.completed':
|
||||
|
||||
$session = $event->data->object;
|
||||
|
||||
$pagoId = $session->metadata->pago_id ?? null;
|
||||
Pago::where('id',$session->id)->update(['estado'=>'pagado']);
|
||||
|
||||
if ($pagoId) {
|
||||
Pago::where('id', $pagoId)->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.');
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -9,7 +9,7 @@ return new class extends Migration
|
||||
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prospectos', function (Blueprint $table) {
|
||||
Schema::create('alumnos', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('nivel');
|
||||
$table->unsignedBigInteger('plan_id');
|
||||
@@ -28,6 +28,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('prospectos');
|
||||
Schema::dropIfExists('alumnos');
|
||||
}
|
||||
};
|
||||
+4
-4
@@ -9,9 +9,9 @@ return new class extends Migration
|
||||
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prospecto_user', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('prospecto_id');
|
||||
$table->foreign('prospecto_id')->references('id')->on('prospectos');
|
||||
Schema::create('alumno_user', function (Blueprint $table) {
|
||||
$table->unsignedBigInteger('alumno_id');
|
||||
$table->foreign('alumno_id')->references('id')->on('alumnos');
|
||||
$table->unsignedBigInteger('user_id');
|
||||
$table->foreign('user_id')->references('id')->on('users');
|
||||
});
|
||||
@@ -19,6 +19,6 @@ return new class extends Migration
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('prospecto_user');
|
||||
Schema::dropIfExists('alumno_user');
|
||||
}
|
||||
};
|
||||
+2
-2
@@ -11,7 +11,7 @@ return new class extends Migration
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('prospecto_status', function (Blueprint $table) {
|
||||
Schema::create('alumno_status', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
});
|
||||
@@ -22,6 +22,6 @@ return new class extends Migration
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('prospecto_status');
|
||||
Schema::dropIfExists('alumno_status');
|
||||
}
|
||||
};
|
||||
+5
-5
@@ -5,24 +5,24 @@ namespace Database\Seeders;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class prospectoStatusSeeder extends Seeder
|
||||
class AlumnoStatusSeeder extends Seeder
|
||||
{
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
DB::table('prospecto_status')->insert([
|
||||
DB::table('alumno_status')->insert([
|
||||
'name' => 'activo'
|
||||
]);
|
||||
|
||||
DB::table('prospecto_status')->insert([
|
||||
DB::table('alumno_status')->insert([
|
||||
'name' => 'aspirante'
|
||||
]);
|
||||
|
||||
DB::table('prospecto_status')->insert([
|
||||
DB::table('alumno_status')->insert([
|
||||
'name' => 'inscrito'
|
||||
]);
|
||||
|
||||
DB::table('prospecto_status')->insert([
|
||||
DB::table('alumno_status')->insert([
|
||||
'name' => 'baja'
|
||||
]);
|
||||
}
|
||||
@@ -74,7 +74,7 @@ class ConceptoSeeder extends Seeder
|
||||
$concepto=Concepto::create([
|
||||
'name' => 2,
|
||||
'fecha_pago' => $year.'-'.$i.'-01',
|
||||
'monto' => '2000',
|
||||
'monto' => '20',
|
||||
'tipo' => $tipo,
|
||||
'recargo' => $recargo
|
||||
]);
|
||||
|
||||
@@ -18,7 +18,7 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call(DurationSeeder::class);
|
||||
$this->call(CarreraSeeder::class);
|
||||
$this->call(AreaSeeder::class);
|
||||
$this->call(prospectoStatusSeeder::class);
|
||||
$this->call(AlumnoStatusSeeder::class);
|
||||
$this->call(TurnoSeeder::class);
|
||||
$this->call(MedioSeeder::class);
|
||||
$this->call(CampanSeeder::class);
|
||||
|
||||
@@ -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'=>'Prospecto']);
|
||||
$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]);
|
||||
@@ -68,10 +68,10 @@ class RoleSeeder extends Seeder
|
||||
Permission::create(['name'=>'plan.edit','description'=>'Editar planes'])->syncRoles([$role1]);
|
||||
Permission::create(['name'=>'plan.destroy','description'=>'Eliminar planes'])->syncRoles([$role1]);
|
||||
|
||||
Permission::create(['name'=>'prospecto.index','description'=>'Ver prospectos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'prospecto.create','description'=>'Crear prospectos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'prospecto.edit','description'=>'Editar prospectos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'prospecto.destroy','description'=>'Eliminar prospectos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'alumno.index','description'=>'Ver alumnos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'alumno.create','description'=>'Crear alumnos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'alumno.edit','description'=>'Editar alumnos'])->syncRoles([$role1,$role3]);
|
||||
Permission::create(['name'=>'alumno.destroy','description'=>'Eliminar alumnos'])->syncRoles([$role1,$role3]);
|
||||
|
||||
Permission::create(['name'=>'area.index','description'=>'Ver areas'])->syncRoles([$role1]);
|
||||
Permission::create(['name'=>'area.create','description'=>'Crear areas'])->syncRoles([$role1]);
|
||||
|
||||
@@ -333,3 +333,56 @@ button:hover {
|
||||
min-height:18px;
|
||||
padding-left:5px;
|
||||
}
|
||||
|
||||
|
||||
/* carrusel */
|
||||
/* altura del carrusel */
|
||||
.carousel,
|
||||
.carousel-inner,
|
||||
.carousel-item {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* imágenes */
|
||||
.carousel-item img{
|
||||
height:100%;
|
||||
width:100%;
|
||||
object-fit:cover;
|
||||
}
|
||||
|
||||
/* zoom suave tipo landing page */
|
||||
.carousel-item img{
|
||||
transform: scale(1);
|
||||
transition: transform 8s ease;
|
||||
}
|
||||
|
||||
.carousel-item.active img{
|
||||
transform: scale(1.08);
|
||||
}
|
||||
|
||||
/* overlay oscuro elegante */
|
||||
.carousel-item::after{
|
||||
content:"";
|
||||
position:absolute;
|
||||
inset:0;
|
||||
background:rgba(0,0,0,0.35);
|
||||
}
|
||||
|
||||
/* texto encima del carrusel */
|
||||
.carousel-caption{
|
||||
bottom:40px;
|
||||
animation: fadeUp 1s ease;
|
||||
}
|
||||
|
||||
@keyframes fadeUp{
|
||||
from{
|
||||
opacity:0;
|
||||
transform:translateY(20px);
|
||||
}
|
||||
to{
|
||||
opacity:1;
|
||||
transform:translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* carrusel */
|
||||
|
||||
@@ -12,25 +12,23 @@
|
||||
<div class="card-header py-3">
|
||||
<div class="d-sm-flex align-items-center justify-content-between">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Prospectos</h6>
|
||||
@can('prospecto.create')
|
||||
@can('alumno.create')
|
||||
<button onclick="Livewire.dispatch('create-prospecto')" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Agregar</button>
|
||||
@endcan
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body row">
|
||||
<div class="col-sm-2 overflow-auto" style="height: 70vh">
|
||||
<div class="col-sm-2 overflow-auto" style="height: 80vh">
|
||||
<div class="list-group">
|
||||
@forelse ($prospectos as $prospecto)
|
||||
@forelse ($alumnos as $alumno)
|
||||
|
||||
@foreach ($prospecto->prospectos as $prospect)
|
||||
@foreach ($alumno->alumnos as $prospect)
|
||||
<a data-prospect-id="{{ $prospect->id }}"
|
||||
class="list-group-item list-group-item-action"
|
||||
onclick="Livewire.dispatch('edit-prospecto', { id: {{ $prospect->id }},user: {{ $prospecto->id }}})">
|
||||
onclick="Livewire.dispatch('edit-prospecto', { id: {{ $prospect->id }},user: {{ $alumno->id }}})">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<h5 class="mb-1">{{ $prospecto->name }}</h5>
|
||||
<h5 class="mb-1">{{ $alumno->name }}</h5>
|
||||
<div class="p-3">
|
||||
<i class="fa-duotone fa-regular fa-circle-user fa-2xl"></i>
|
||||
</div>
|
||||
@@ -47,7 +45,7 @@
|
||||
<div class="p-3"><i class="fa-duotone fa-solid fa-brake-warning fa-beat-fade fa-2xl" style="--fa-primary-color: #872222; --fa-secondary-color: #f00000;"></i></div>
|
||||
</div>
|
||||
<p class="mb-1"></p>
|
||||
<small>Agrega un prospecto...</small>
|
||||
<small>Agrega un alumno...</small>
|
||||
</a>
|
||||
@endforelse
|
||||
</div>
|
||||
@@ -1,34 +1,106 @@
|
||||
<x-guest-layout>
|
||||
<x-authentication-card>
|
||||
<x-slot name="logo">
|
||||
<x-authentication-card-logo />
|
||||
</x-slot>
|
||||
@include('layouts._partials.error')
|
||||
|
||||
<div class="mb-4 text-sm text-gray-600">
|
||||
{{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
@include('layouts._partials.head')
|
||||
@section('title',"Inicio")
|
||||
@livewireStyles
|
||||
</head>
|
||||
|
||||
<body class="bg-gradient-primary">
|
||||
|
||||
<div class="container-fluid d-flex align-items-center justify-content-center px-0" style="min-height:100vh;">
|
||||
|
||||
<div class="row justify-content-center w-100 mx-0">
|
||||
|
||||
<div class="col-12 col-md-9 col-lg-12 col-xl-10">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg">
|
||||
|
||||
<div class="card-body p-0">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-6 d-none d-lg-block p-0">
|
||||
<livewire:carrusel-inicio />
|
||||
</div>
|
||||
|
||||
@session('status')
|
||||
<div class="mb-4 font-medium text-sm text-green-600">
|
||||
{{ $value }}
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="p-5">
|
||||
|
||||
|
||||
{{-- contenido --}}
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="h4 text-gray-900 mb-4">Recuperacion de contraseña</h1>
|
||||
</div>
|
||||
@endsession
|
||||
|
||||
<x-validation-errors class="mb-4" />
|
||||
|
||||
<form method="POST" action="{{ route('password.email') }}">
|
||||
<form method="POST" action="{{ route('password.email') }}" class="user">
|
||||
@csrf
|
||||
|
||||
<div class="block">
|
||||
<x-label for="email" value="{{ __('Email') }}" />
|
||||
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus autocomplete="username" />
|
||||
|
||||
<div class="form-group">
|
||||
<label>Correo electrónico</label>
|
||||
<input type="email" class="form-control form-control-user" id="email" name="email" aria-describedby="emailHelp" placeholder="Correo electrónico..." value="{{ old('email') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-end mt-4">
|
||||
<x-button>
|
||||
{{ __('Email Password Reset Link') }}
|
||||
</x-button>
|
||||
</div>
|
||||
<input type="submit" value="Recuperar" class="btn btn-primary btn-user btn-block">
|
||||
|
||||
</form>
|
||||
</x-authentication-card>
|
||||
</x-guest-layout>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="text-center">
|
||||
<a class="small" href="{{ route('login') }}">Regresar!</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{-- contenido --}}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@include('layouts._partials.scripts')
|
||||
@livewireScripts
|
||||
@yield('scripts')
|
||||
|
||||
@if (session('status'))
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Correo enviado',
|
||||
text: '{{ session('status') }}',
|
||||
confirmButtonText: 'Ok'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($errors->any())
|
||||
<script>
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error',
|
||||
text: '{{ $errors->first() }}'
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
@@ -8,37 +8,52 @@
|
||||
@livewireStyles
|
||||
</head>
|
||||
|
||||
|
||||
<body class="bg-gradient-primary">
|
||||
|
||||
<div class="container">
|
||||
<div class="container-fluid d-flex align-items-center justify-content-center px-0" style="min-height:100vh;">
|
||||
|
||||
<!-- Outer Row -->
|
||||
<div class="row justify-content-center">
|
||||
<div class="row justify-content-center w-100 mx-0">
|
||||
|
||||
<div class="col-xl-10 col-lg-12 col-md-9">
|
||||
<div class="col-12 col-md-9 col-lg-12 col-xl-10">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg my-5">
|
||||
<div class="card-body p-0">
|
||||
<!-- Nested Row within Card Body -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 d-none d-lg-block bg-login-image"></div>
|
||||
|
||||
<div class="col-lg-6 d-none d-lg-block p-0">
|
||||
<livewire:carrusel-inicio />
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="p-5">
|
||||
|
||||
|
||||
{{-- contenido --}}
|
||||
<div class="text-center">
|
||||
<h1 class="h4 text-gray-900 mb-4">Bienvenido!</h1>
|
||||
<x-validation-errors class="mb-4" />
|
||||
</div>
|
||||
|
||||
<form method="POST" action="{{ route('login') }}" class="user">
|
||||
@csrf
|
||||
|
||||
<div class="form-group">
|
||||
<input type="email" class="form-control form-control-user" id="email" name="email" aria-describedby="emailHelp" placeholder="Correo electrónico..." :value="old('email')" required autofocus autocomplete="username">
|
||||
<input type="email"
|
||||
class="form-control form-control-user"
|
||||
name="email"
|
||||
placeholder="Correo electrónico..."
|
||||
value="{{ old('email') }}"
|
||||
required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<input type="password" class="form-control form-control-user" id="password" name="password" placeholder="Contraseña" required autocomplete="current-password">
|
||||
<input type="password"
|
||||
class="form-control form-control-user"
|
||||
name="password"
|
||||
placeholder="Contraseña"
|
||||
required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
@@ -63,19 +78,22 @@
|
||||
<div class="text-center">
|
||||
<a class="small" href="{{ route('register') }}">Registrarme!</a>
|
||||
</div>
|
||||
{{-- contenido --}}
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@include('layouts._partials.scripts')
|
||||
@livewireScripts
|
||||
@yield('scripts')
|
||||
@@ -84,14 +102,22 @@
|
||||
<script>
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Registro exitoso',
|
||||
title: 'Acceso exitoso',
|
||||
text: "{{ session('mensaje_registro') }}",
|
||||
confirmButtonText: 'Entendido'
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($errors->any())
|
||||
<script>
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error',
|
||||
text: '{{ $errors->first() }}'
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -8,26 +8,31 @@
|
||||
@livewireStyles
|
||||
</head>
|
||||
|
||||
|
||||
<body class="bg-gradient-primary">
|
||||
|
||||
<div class="container">
|
||||
<div class="container-fluid d-flex align-items-center justify-content-center px-0" style="min-height:100vh;">
|
||||
|
||||
<!-- Outer Row -->
|
||||
<div class="row justify-content-center">
|
||||
<div class="row justify-content-center w-100 mx-0">
|
||||
|
||||
<div class="col-xl-10 col-lg-12 col-md-9">
|
||||
<div class="col-12 col-md-9 col-lg-12 col-xl-10">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg my-5">
|
||||
<div class="card-body p-0">
|
||||
<!-- Nested Row within Card Body -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-6 d-none d-lg-block bg-login-image"></div>
|
||||
|
||||
<div class="col-lg-6 d-none d-lg-block p-0">
|
||||
<livewire:carrusel-inicio />
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="p-5">
|
||||
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="h4 text-gray-900 mb-4">Bienvenido!</h1>
|
||||
<x-validation-errors class="mb-4" />
|
||||
</div>
|
||||
|
||||
<form method="POST" action="{{ route('register') }}" class="user">
|
||||
@@ -76,19 +81,21 @@
|
||||
<div class="text-center">
|
||||
<a class="small" href="{{ route('login') }}">Regresar!</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@include('layouts._partials.scripts')
|
||||
@livewireScripts
|
||||
@yield('scripts')
|
||||
@@ -104,6 +111,3 @@ Swal.fire({
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,36 +1,117 @@
|
||||
<x-guest-layout>
|
||||
<x-authentication-card>
|
||||
<x-slot name="logo">
|
||||
<x-authentication-card-logo />
|
||||
</x-slot>
|
||||
@include('layouts._partials.error')
|
||||
|
||||
<x-validation-errors class="mb-4" />
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
@include('layouts._partials.head')
|
||||
@section('title',"Inicio")
|
||||
@livewireStyles
|
||||
</head>
|
||||
|
||||
<form method="POST" action="{{ route('password.update') }}">
|
||||
<body class="bg-gradient-primary">
|
||||
|
||||
<div class="container-fluid d-flex align-items-center justify-content-center px-0" style="min-height:100vh;">
|
||||
|
||||
<div class="row justify-content-center w-100 mx-0">
|
||||
|
||||
<div class="col-12 col-md-9 col-lg-12 col-xl-10">
|
||||
|
||||
<div class="card o-hidden border-0 shadow-lg">
|
||||
|
||||
<div class="card-body p-0">
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-6 d-none d-lg-block p-0">
|
||||
<livewire:carrusel-inicio />
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6">
|
||||
|
||||
<div class="p-5">
|
||||
|
||||
{{-- contenido --}}
|
||||
<div class="text-center">
|
||||
<h1 class="h4 text-gray-900 mb-4">Cambio de contraseña</h1>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="{{ route('password.update') }}" class="user">
|
||||
@csrf
|
||||
|
||||
<input type="hidden" name="token" value="{{ $request->route('token') }}">
|
||||
|
||||
<div class="block">
|
||||
<x-label for="email" value="{{ __('Email') }}" />
|
||||
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $request->email)" required autofocus autocomplete="username" />
|
||||
<div class="form-group">
|
||||
<label>Correo electrónico</label>
|
||||
<input type="email" class="form-control form-control-user" id="email" name="email" aria-describedby="emailHelp" placeholder="Correo electrónico..." value="{{ old('email') }}" required>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<x-label for="password" value="{{ __('Password') }}" />
|
||||
<x-input id="password" class="block mt-1 w-full" type="password" name="password" required autocomplete="new-password" />
|
||||
|
||||
<div class="form-group">
|
||||
<label>Contraseña</label>
|
||||
<input type="password" class="form-control form-control-user" id="password" name="password" autocomplete="new-password" required>
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<x-label for="password_confirmation" value="{{ __('Confirm Password') }}" />
|
||||
<x-input id="password_confirmation" class="block mt-1 w-full" type="password" name="password_confirmation" required autocomplete="new-password" />
|
||||
<div class="form-group">
|
||||
<label>Repetir contraseña</label>
|
||||
<input type="password" class="form-control form-control-user" id="password_confirmation" name="password_confirmation" autocomplete="new-password" required>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-end mt-4">
|
||||
<x-button>
|
||||
{{ __('Reset Password') }}
|
||||
</x-button>
|
||||
</div>
|
||||
<input type="submit" value="Guardar contraseña" class="btn btn-primary btn-user btn-block">
|
||||
|
||||
</form>
|
||||
</x-authentication-card>
|
||||
</x-guest-layout>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="text-center">
|
||||
<a class="small" href="{{ route('login') }}">Regresar!</a>
|
||||
</div>
|
||||
{{-- contenido --}}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@include('layouts._partials.scripts')
|
||||
@livewireScripts
|
||||
@yield('scripts')
|
||||
|
||||
@if (session('status'))
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Cambio realizado',
|
||||
text: '{{ session('status') }}',
|
||||
confirmButtonText: 'Ok'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if ($errors->any())
|
||||
<script>
|
||||
Swal.fire({
|
||||
icon: 'error',
|
||||
title: 'Error',
|
||||
text: '{{ $errors->first() }}'
|
||||
});
|
||||
</script>
|
||||
@endif
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -117,8 +117,8 @@
|
||||
<div class="bg-white py-2 collapse-inner rounded">
|
||||
<h6 class="collapse-header">Herramientas</h6>
|
||||
|
||||
@can('prospecto.index')
|
||||
<a class="collapse-item" href="{{ route('prospecto.index') }}" style="color:#85888e">Prospectos</a>
|
||||
@can('alumno.index')
|
||||
<a class="collapse-item" href="{{ route('alumno.index') }}" style="color:#85888e">Prospectos</a>
|
||||
@endcan
|
||||
<a class="collapse-item" href="difusion.php" style="color:#85888e">Difusión</a>
|
||||
<a class="collapse-item" href="informes.php" style="color:#85888e">Informes</a>
|
||||
@@ -128,7 +128,7 @@
|
||||
</li>
|
||||
@endrole
|
||||
|
||||
@hasrole(['Prospecto','Alumno'])
|
||||
@hasrole(['Alumno'])
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('pago.index') }}">
|
||||
<i class="fas fa-money-bill-alt" style="color: #e8e8e8;"></i>
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<div id="carouselExampleFade"
|
||||
class="carousel slide carousel-fade h-100"
|
||||
data-ride="carousel"
|
||||
data-interval="5000"
|
||||
data-pause="false">
|
||||
|
||||
<div class="carousel-inner h-100">
|
||||
|
||||
<div class="carousel-item active h-100">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/carrusel/1.jpg">
|
||||
|
||||
<div class="carousel-caption text-left">
|
||||
<h3>Sistema Académico</h3>
|
||||
<p>Gestión escolar moderna</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="carousel-item h-100">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/carrusel/2.jpg">
|
||||
|
||||
<div class="carousel-caption text-left">
|
||||
<h3>Plataforma Educativa</h3>
|
||||
<p>Acceso seguro para estudiantes</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="carousel-item h-100">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/carrusel/3.jpg">
|
||||
|
||||
<div class="carousel-caption text-left">
|
||||
<h3>Innovación educativa</h3>
|
||||
<p>Transformando la educación digital</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="carousel-item h-100">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/carrusel/4.jpg">
|
||||
|
||||
<div class="carousel-caption text-left">
|
||||
<h3>Plataforma accesible</h3>
|
||||
<p>Mejorando procesos internos</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="carousel-item h-100">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/carrusel/5.jpg">
|
||||
|
||||
<div class="carousel-caption text-left">
|
||||
<h3>Innovación educativa</h3>
|
||||
<p>Transformando la educación digital</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -21,6 +21,22 @@
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Apellido Paterno</label>
|
||||
<input class="form-control"
|
||||
wire:model.defer="papellidoPaterno"
|
||||
name="prospecto_apellidoPaterno"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Apellido Materno</label>
|
||||
<input class="form-control"
|
||||
wire:model.defer="papellidoMaterno"
|
||||
name="prospecto_apellidoMaterno"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Correo</label>
|
||||
<input class="form-control"
|
||||
@@ -45,17 +61,6 @@
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
@if(!$prospecto)
|
||||
<div class="col-md-6 mt-2">
|
||||
<label>Password</label>
|
||||
<input type="password"
|
||||
class="form-control"
|
||||
wire:model.defer="ppassword"
|
||||
name="prospecto_password"
|
||||
autocomplete="new-password">
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -35,6 +35,22 @@
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Apellido Paterno</label>
|
||||
<input class="form-control"
|
||||
wire:model.defer="papellidoPaterno"
|
||||
name="prospecto_apellidoPaterno"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Apellido Materno</label>
|
||||
<input class="form-control"
|
||||
wire:model.defer="papellidoMaterno"
|
||||
name="prospecto_apellidoMaterno"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label>Correo</label>
|
||||
<input class="form-control"
|
||||
@@ -59,16 +75,6 @@
|
||||
autocomplete="off">
|
||||
</div>
|
||||
|
||||
@if(!$prospecto)
|
||||
<div class="col-md-6 mt-2">
|
||||
<label>Password</label>
|
||||
<input type="password"
|
||||
class="form-control"
|
||||
wire:model.defer="ppassword"
|
||||
name="prospecto_password"
|
||||
autocomplete="new-password">
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
@extends('layouts.landing')
|
||||
|
||||
@section('title',"Crear")
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<div class="d-sm-flex align-items-center justify-content-between">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Crear carrera</h6>
|
||||
<a href="{{route('carrera.index')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Regresar</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form action="{{route('carrera.store')}}" method="POST">
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label class="small mb-1">Nombre</label>
|
||||
<input class="form-control" name="name">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status">Seleccionar nivel</label>
|
||||
<select class="form-control" name="nivel" id="nivel">
|
||||
@foreach ($nivels as $nivel)
|
||||
<option value="{{ $nivel->id }}">{{ $nivel->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status">Seleccionar status</label>
|
||||
<select class="form-control" name="status" id="status">
|
||||
<option value="1">Activo</option>
|
||||
<option value="0">Inactivo</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Crear">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
@@ -1,129 +0,0 @@
|
||||
@extends('layouts.landing')
|
||||
|
||||
@section('head')
|
||||
@include('layouts._partials.tablaStyle')
|
||||
@endsection
|
||||
|
||||
@section('title',"Edit")
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<div class="d-sm-flex align-items-center justify-content-between">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Editar carrera</h6>
|
||||
<a href="{{route('carrera.index')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Regresar</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('info'))
|
||||
<div class="alert alert-success">
|
||||
<strong>{{session('info')}}</strong>
|
||||
</div>
|
||||
@endif
|
||||
<form action="{{route('carrera.update',$carrera->id)}}" method="POST">
|
||||
@method('PUT')
|
||||
@csrf
|
||||
<div class="mb-3">
|
||||
<label class="small mb-1">Nombre</label>
|
||||
<input class="form-control" name="name" value="{{$carrera->name}}">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status">Seleccionar nivel</label>
|
||||
<select class="form-control" name="status" id="status">
|
||||
@foreach ($nivels as $nivel)
|
||||
<option value="{{ $nivel->id }}"{{ $carrera->nivel== $nivel->id ? 'selected' : '' }} >{{ $nivel->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="status">Seleccionar status</label>
|
||||
<select class="form-control" name="status" id="status" value="{{ $carrera->status }}">
|
||||
<option value="1" {{ $carrera->status=='1' ? 'selected' : '' }}>Activo</option>
|
||||
<option value="0" {{ $carrera->status=='0' ? 'selected' : '' }}>Inactivo</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Actualizar">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- contenedor de materias --}}
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3">
|
||||
<div class="d-sm-flex align-items-center justify-content-between">
|
||||
<h6 class="m-0 font-weight-bold text-primary">Materiales</h6>
|
||||
@can('material.create')
|
||||
<button data-toggle="modal" data-target="#exampleModal"class="d-sm-inline-block btn btn-sm btn-success shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Agregar</button>
|
||||
@endcan
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@if (session('infoMaterial'))
|
||||
<div class="alert alert-success">
|
||||
<strong>{{session('infoMaterial')}}</strong>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
<table id="tcont" class="table table-striped table-bordered nowrap table-hover" style="width:100%;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Nombre</th>
|
||||
<th>Opciones</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($carrera->carreraMaterial as $material)
|
||||
<tr style="width:100%">
|
||||
<td>{{$material->id}}</td>
|
||||
<td>{{$material->name}}</td>
|
||||
<td class="row mx-auto">
|
||||
@can('material.edit')
|
||||
<div class="col-sm-6 col-md-6"><a class="btn btn-primary" href="{{route('material.edit',$material->id)}}">Edit</a></div>
|
||||
@endcan
|
||||
|
||||
@can('material.destroy')
|
||||
<div class="col-sm-6 col-md-6">
|
||||
<form class="delete-form" action="{{route('material.destroy',$material->id)}}" method="POST">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<input class="d-none" name="carrera" value="{{$carrera->id}}">
|
||||
<input type="submit" value="DELETE" class="btn btn-danger">
|
||||
</form>
|
||||
</div>
|
||||
@endcan
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<p>Sin materiales.</p>
|
||||
@endforelse
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<livewire:modal-materias :carrera="$carrera"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
@include('layouts._partials.tablaScript')
|
||||
@include('layouts._partials.delete')
|
||||
@endsection
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<a href="{{ $url }}" style="display: inline-block;">
|
||||
@if (trim($slot) === 'Laravel')
|
||||
<div style="text-align:center; margin-bottom:25px;">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/logo.png" alt="Sistema Educativo CUIEP" style="height:70px;">
|
||||
<img src="https://devsecuiep.sistemasecuiep.com/img/logos/logo.png" alt="Sistema Educativo CUIEP" style="height:70px;">
|
||||
</div>
|
||||
@else
|
||||
{!! $slot !!}
|
||||
|
||||
+2
-3
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Events\MessageSent;
|
||||
use App\Http\Controllers\AlumnoController;
|
||||
use App\Http\Controllers\AreaCodeController;
|
||||
use App\Http\Controllers\AreaController;
|
||||
use App\Http\Controllers\CampanController;
|
||||
@@ -20,7 +21,6 @@ use App\Http\Controllers\PermissionController;
|
||||
use App\Http\Controllers\PlanController;
|
||||
use App\Http\Controllers\PlaneController;
|
||||
use App\Http\Controllers\PlantelController;
|
||||
use App\Http\Controllers\ProspectoController;
|
||||
use App\Http\Controllers\RoleController;
|
||||
use App\Http\Controllers\StripeController;
|
||||
use App\Http\Controllers\StripeWebhookController;
|
||||
@@ -41,7 +41,7 @@ Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified',
|
||||
])->group(function () {
|
||||
|
||||
Route::middleware(['auth'])->group(function () {
|
||||
|
||||
Route::resource('/alumno',AlumnoController::class);
|
||||
Route::resource('/area',AreaController::class);
|
||||
Route::resource('/areacode',AreaCodeController::class);
|
||||
Route::get('/dashboard', function () {return view('dashboard');})->name('dashboard');
|
||||
@@ -74,7 +74,6 @@ Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified',
|
||||
Route::resource('/plan',PlanController::class);
|
||||
Route::resource('/plane',PlaneController::class);
|
||||
Route::resource('/plantel',PlantelController::class);
|
||||
Route::resource('/prospecto',ProspectoController::class);
|
||||
Route::get('/registros', [CodeController::class,'registros' ])->name('registros');
|
||||
Route::resource('/role',RoleController::class);
|
||||
Route::get('/test-chat', function () { broadcast(new MessageSent('Hola realtime 🚀')); return 'Mensaje enviado';});
|
||||
|
||||
Reference in New Issue
Block a user