diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php index 7681c590..d12a7c3b 100644 --- a/app/Actions/Fortify/CreateNewUser.php +++ b/app/Actions/Fortify/CreateNewUser.php @@ -2,6 +2,7 @@ namespace App\Actions\Fortify; +use App\Models\Alumno; use App\Models\Prospecto; use App\Models\User; use Illuminate\Auth\Notifications\ResetPassword; @@ -52,7 +53,7 @@ class CreateNewUser implements CreatesNewUsers $user->roles()->sync([4]); $user->plantelUsuarios()->sync($input['plantels']); - $prospecto = Prospecto::create([ + $prospecto = Alumno::create([ 'nivel' => 0, 'plan_id' => 0, 'usuario_registro' => 0, @@ -61,7 +62,7 @@ class CreateNewUser implements CreatesNewUsers 'medio' => 0, ]); - $prospecto->prospectos()->sync([$user->id]); + $prospecto->alumnos()->sync([$user->id]); $token = Password::createToken($user); $user->notify(new ResetPassword($token)); diff --git a/app/Http/Controllers/AlumnoController.php b/app/Http/Controllers/AlumnoController.php index 16f8a143..a3817dd1 100644 --- a/app/Http/Controllers/AlumnoController.php +++ b/app/Http/Controllers/AlumnoController.php @@ -2,9 +2,9 @@ namespace App\Http\Controllers; -use App\Models\User; use App\Models\Alumno; - +use App\Models\User; +use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Auth; @@ -21,37 +21,65 @@ class AlumnoController extends Controller public function index() { $user = Auth::user(); + + if ($user->hasRole('Promotor')) { + $plantelesUsuario = $user->plantelUsuarios->pluck('id'); + + $alumnos = User::with(['alumnos' => function ($query) use ($user, $plantelesUsuario) { + + $query->where('status', 1) + ->where(function ($q) use ($user, $plantelesUsuario) { + + $q->where('usuario_registro', $user->id) + ->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) { + $sub->whereIn('plantels.id', $plantelesUsuario); + }); + }); + + }]) + ->whereHas('alumnos', function ($query) use ($user, $plantelesUsuario) { + + $query->where('status', 1) + ->where(function ($q) use ($user, $plantelesUsuario) { + + $q->where('usuario_registro', $user->id) + ->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) { + $sub->whereIn('plantels.id', $plantelesUsuario); + }); + + }); + + }) + ->get(); + } + + if ($user->hasRole('Control escolar')) { $plantelesUsuario = $user->plantelUsuarios->pluck('id'); - $alumnos = User::with(['alumnos' => function ($query) use ($user, $plantelesUsuario) { + $alumnos = Alumno::with(['alumnos.plantelUsuarios','statusAlumno']) + ->where('status','!=',1) + ->whereHas('alumnos.plantelUsuarios', function ($q) use ($plantelesUsuario) { + $q->whereIn('plantels.id', $plantelesUsuario); + }) + ->get(); + } - $query->where(function ($q) use ($user, $plantelesUsuario) { - - $q->where('usuario_registro', $user->id) - ->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) { - $sub->whereIn('plantels.id', $plantelesUsuario); - }); - - }); - - }]) - ->whereHas('alumnos', function ($query) use ($user, $plantelesUsuario) { - - $query->where(function ($q) use ($user, $plantelesUsuario) { - - $q->where('usuario_registro', $user->id) - ->orWhereHas('alumnos.plantelUsuarios', function ($sub) use ($plantelesUsuario) { - $sub->whereIn('plantels.id', $plantelesUsuario); - }); - - }); - - }) - ->get(); return view('alumno.index', compact('alumnos')); } + public function edit(Alumno $alumno) + { + return view('alumno.edit',compact('alumno')); + } + + + public function update(Request $request, Alumno $alumno) + { + $alumno->update($request->all()); + return redirect()->route('alumno.edit',$alumno)->with('info','El alumno se actualizo correctamente'); + } + public function destroy(Alumno $alumno) { $user = $alumno->alumnos()->first(); diff --git a/app/Http/Controllers/DocenteController.php b/app/Http/Controllers/DocenteController.php new file mode 100644 index 00000000..d79aa2be --- /dev/null +++ b/app/Http/Controllers/DocenteController.php @@ -0,0 +1,64 @@ +middleware('can:grupo.index')->only('index','show'); + $this->middleware('can:grupo.create')->only('create','store'); + $this->middleware('can:grupo.edit')->only('edit','update'); + $this->middleware('can:grupo.destroy')->only('destroy'); + } + + public function index() + { + $user = Auth::user(); + + if ($user->hasRole('Admin')) { + $grupos = Grupo::all(); + } + + if ($user->hasRole(['Control escolar','Coordinación académica'])) { + + $plantelesIds = $user->plantelUsuarios->pluck('id'); + + $grupos = Grupo::with('plan') + ->whereHas('plan.planesPlantel', function ($query) use ($plantelesIds) { + $query->whereIn('plantel_id', $plantelesIds); + }) + ->get(); + } + + return view('grupo.index', compact('grupos')); + } + + + public function create() + { + $turnos= Turno::all(); + $user = Auth::user(); + $plantels = $user->plantelUsuarios->pluck('id'); + $planteles = $user->plantelUsuarios; + + $plans = Plan::with(['carreraRel', 'nivelRel']) + ->whereHas('planesPlantel', function ($query) use ($plantels) { + $query->whereIn('plantel_id', $plantels); + }) + ->get() + ->groupBy(function ($plan) { + return $plan->nivelRel->name; + }); + + return view('grupo.create',compact(['turnos','plans','planteles'])); + } + + + public function store(Request $request) + { + $nivel = Plan::where('id',$request->plan_id)->first(); + $grupo = Grupo::create([ + 'plan_id' => $request->plan_id, + 'ciclo' => 1, + 'nivel' => $nivel->nivel, + 'plantel' => $request->plantel, + 'turno' => $request->turno, + 'status'=>1 + ]); + + return redirect()->route('grupo.edit',$grupo)->with('info','El grupo se creo correctamente'); + + } + + + public function show(Plane $plane) + { + return view('grupo.show',compact('plane')); + } + + + public function edit(Grupo $grupo) + { + $turnos= Turno::all(); + $user = Auth::user(); + $plantels = $user->plantelUsuarios->pluck('id'); + $planteles = $user->plantelUsuarios; + + $plans = Plan::with(['carreraRel', 'nivelRel']) + ->whereHas('planesPlantel', function ($query) use ($plantels) { + $query->whereIn('plantel_id', $plantels); + }) + ->get() + ->groupBy(function ($plan) { + return $plan->nivelRel->name; + }); + $ciclos = Plan::where('id',$grupo->plan_id)->first(); + + return view('grupo.edit',compact(['grupo','turnos','plans','planteles','ciclos'])); + } + + public function update(Request $request,Grupo $grupo) + { + $nivel = Plan::where('id',$request->plan_id)->first(); + $grupo = Grupo::update([ + 'plan_id' => $request->plan_id, + 'ciclo' => 1, + 'nivel' => $nivel->nivel, + 'plantel' => $request->plantel, + 'turno' => $request->turno, + 'status'=>1 + ]); + + + + return redirect()->route('grupo.edit',$grupo)->with('info','El grupo se actualizo correctamente'); + } + + + public function destroy(Grupo $grupo,Request $request) + { + + if($request->alumno){ + $alumno= Alumno::find($request->alumno); + $alumno->grupos()->detach(); + + session()->flash('swal',[ + 'icon'=>'success', + 'title'=>'Eliminado!', + 'text'=>'Se ha eliminado el registro correctamente' + ]); + return redirect()->route('grupo.edit',$grupo); + }else{ + $grupo->alumnos()->detach(); + $grupo->delete(); + session()->flash('swal',[ + 'icon'=>'success', + 'title'=>'Eliminado!', + 'text'=>'Se ha eliminado el registro correctamente' + ]); + return redirect()->route('grupo.index'); + } + + + } +} diff --git a/app/Http/Controllers/MateriaController.php b/app/Http/Controllers/MateriaController.php new file mode 100644 index 00000000..65b3c2f4 --- /dev/null +++ b/app/Http/Controllers/MateriaController.php @@ -0,0 +1,64 @@ +except(['carrera'])); diff --git a/app/Http/Controllers/PlaneController.php b/app/Http/Controllers/PlaneController.php index 79b96e2d..361f7f29 100644 --- a/app/Http/Controllers/PlaneController.php +++ b/app/Http/Controllers/PlaneController.php @@ -24,7 +24,6 @@ class PlaneController extends Controller return view('plane.index',compact('planes')); } - public function create() { $plantels=Plantel::where('status','=','1')->get(); diff --git a/app/Livewire/DataProspecto.php b/app/Livewire/DataProspecto.php index 3e6bc904..316b7fa0 100644 --- a/app/Livewire/DataProspecto.php +++ b/app/Livewire/DataProspecto.php @@ -360,7 +360,10 @@ class DataProspecto extends Component 'roles' => Role::whereHas('areas', fn($q) => $q->where('areas.name', 'Promoción'))->get(), 'plantels'=> Plantel::all(), 'user' => Auth::user(), - 'campans' => Campan::all(), + 'campans' => Campan::whereDate('periodoInicial', '<=', now()) + ->whereDate('periodoFinal', '>=', now()) + ->where('status', 1) + ->get(), 'medios' => Medio::all(), ]); } diff --git a/app/Livewire/GrupoAlumno.php b/app/Livewire/GrupoAlumno.php new file mode 100644 index 00000000..eb98d2d1 --- /dev/null +++ b/app/Livewire/GrupoAlumno.php @@ -0,0 +1,92 @@ +dispatch('open-grupo-modal'); + } + + public function mount($grupo) + { + $this->grupo = $grupo; + } + + public function guardar() + { + if (empty($this->selectedAlumnos)) { + session()->flash('error', 'Selecciona al menos un alumno'); + return; + } + + $this->grupo->alumnos()->syncWithoutDetaching($this->selectedAlumnos); + + $this->reset('selectedAlumnos'); + + $this->dispatch('swal', + icon: 'success', + title: 'Anexado!', + text: 'Se agrego el alumno correctamente', + timer: 2000, + confirm: false, + closeModal: true, + reload: 2000 + ); + + $this->dispatch('close-modal'); + } + + public function render() + { + $user = Auth::user(); + $grupo = $this->grupo; + + $plantelesUsuario = $user->plantelUsuarios->pluck('id'); + + $alumnos = Alumno::query() + ->with(['alumnos.plantelUsuarios', 'statusAlumno', 'plan.carreraRel','nivelRel']) + + ->where('status', 2) + + ->where('nivel', $grupo->nivel) + + ->whereDoesntHave('grupos') + + ->whereHas('alumnos.plantelUsuarios', function ($q) use ($plantelesUsuario) { + $q->whereIn('plantels.id', $plantelesUsuario); + }) + + ->orderByRaw(" + CASE + WHEN plan_id = {$grupo->plan_id} THEN 0 + ELSE 1 + END + ") + ->orderByRaw(" + CASE + WHEN nivel = {$grupo->nivel} THEN 0 + ELSE 1 + END" + ) + + ->get(); + + return view('livewire.grupo-alumno', [ + 'alumnos' => $alumnos, + ]); + } + +} diff --git a/app/Livewire/ModalProspecto.php b/app/Livewire/ModalProspecto.php index e0504088..ea0dc811 100644 --- a/app/Livewire/ModalProspecto.php +++ b/app/Livewire/ModalProspecto.php @@ -180,7 +180,10 @@ class ModalProspecto extends Component 'roles' => Role::whereHas('areas', fn($q) => $q->where('areas.name', 'Promoción'))->get(), 'plantels'=> Plantel::all(), 'user' => Auth::user(), - 'campans' => Campan::all(), + 'campans' => Campan::whereDate('periodoInicial', '<=', now()) + ->whereDate('periodoFinal', '>=', now()) + ->where('status', 1) + ->get(), 'medios' => Medio::all(), ]); } diff --git a/app/Models/Alumno.php b/app/Models/Alumno.php index 07bfd13b..e60c529a 100644 --- a/app/Models/Alumno.php +++ b/app/Models/Alumno.php @@ -3,17 +3,13 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; 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() @@ -26,4 +22,29 @@ class Alumno extends Model return $this->belongsToMany(User::class); } + public function usuario() + { + return $this->belongsToMany(User::class); + } + + public function statusAlumno(): BelongsTo + { + return $this->belongsTo(AlumnoStatus::class, 'status'); + } + + public function grupos(): BelongsToMany + { + return $this->belongsToMany(Grupo::class); + } + + public function plan() + { + return $this->belongsTo(Plan::class); + } + + public function nivelRel() + { + return $this->belongsTo(Nivel::class, 'nivel'); + } + } diff --git a/app/Models/AlumnoStatus.php b/app/Models/AlumnoStatus.php new file mode 100644 index 00000000..f303ec03 --- /dev/null +++ b/app/Models/AlumnoStatus.php @@ -0,0 +1,14 @@ +belongsToMany(Alumno::class); + } + + public function plan() +{ + return $this->belongsTo(Plan::class); +} + +} diff --git a/app/Models/Materia.php b/app/Models/Materia.php new file mode 100644 index 00000000..0c05c804 --- /dev/null +++ b/app/Models/Materia.php @@ -0,0 +1,10 @@ +exists(); } + public function carreraRel() + { + return $this->belongsTo(Carrera::class, 'carrera'); + } + + public function nivelRel() + { + return $this->belongsTo(Nivel::class, 'nivel'); + } + } diff --git a/database/migrations/2026_03_13_171243_create_grupos_table.php b/database/migrations/2026_03_13_171243_create_grupos_table.php new file mode 100644 index 00000000..e1e8776d --- /dev/null +++ b/database/migrations/2026_03_13_171243_create_grupos_table.php @@ -0,0 +1,26 @@ +id(); + $table->unsignedBigInteger('plan_id'); + $table->unsignedBigInteger('ciclo'); + $table->unsignedBigInteger('nivel'); + $table->unsignedBigInteger('plantel'); + $table->unsignedBigInteger('turno'); + $table->boolean('status'); + }); + } + + public function down(): void + { + Schema::dropIfExists('grupos'); + } +}; diff --git a/database/migrations/2026_03_13_171827_create_alumno_grupo_table.php b/database/migrations/2026_03_13_171827_create_alumno_grupo_table.php new file mode 100644 index 00000000..7da54362 --- /dev/null +++ b/database/migrations/2026_03_13_171827_create_alumno_grupo_table.php @@ -0,0 +1,29 @@ +unsignedBigInteger('alumno_id'); + $table->foreign('alumno_id')->references('id')->on('alumnos'); + $table->unsignedBigInteger('grupo_id'); + $table->foreign('grupo_id')->references('id')->on('grupos'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('alumno_grupo'); + } +}; diff --git a/database/migrations/2026_03_19_135700_create_materias_table.php b/database/migrations/2026_03_19_135700_create_materias_table.php new file mode 100644 index 00000000..1ad869cb --- /dev/null +++ b/database/migrations/2026_03_19_135700_create_materias_table.php @@ -0,0 +1,27 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('materias'); + } +}; diff --git a/database/migrations/2026_03_19_135756_create_docentes_table.php b/database/migrations/2026_03_19_135756_create_docentes_table.php new file mode 100644 index 00000000..40efe97c --- /dev/null +++ b/database/migrations/2026_03_19_135756_create_docentes_table.php @@ -0,0 +1,27 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('docentes'); + } +}; diff --git a/database/seeders/AlumnoStatusSeeder.php b/database/seeders/AlumnoStatusSeeder.php index 8c1a4a36..71f1bf14 100644 --- a/database/seeders/AlumnoStatusSeeder.php +++ b/database/seeders/AlumnoStatusSeeder.php @@ -11,11 +11,7 @@ class AlumnoStatusSeeder extends Seeder public function run(): void { DB::table('alumno_status')->insert([ - 'name' => 'activo' - ]); - - DB::table('alumno_status')->insert([ - 'name' => 'aspirante' + 'name' => 'prospecto' ]); DB::table('alumno_status')->insert([ @@ -23,7 +19,19 @@ class AlumnoStatusSeeder extends Seeder ]); DB::table('alumno_status')->insert([ - 'name' => 'baja' + 'name' => 'alumno' + ]); + + DB::table('alumno_status')->insert([ + 'name' => 'baja temporal' + ]); + + DB::table('alumno_status')->insert([ + 'name' => 'baja definitiva' + ]); + + DB::table('alumno_status')->insert([ + 'name' => 'graduado' ]); } } diff --git a/database/seeders/CampanSeeder.php b/database/seeders/CampanSeeder.php index e0e027ca..aa193208 100644 --- a/database/seeders/CampanSeeder.php +++ b/database/seeders/CampanSeeder.php @@ -19,5 +19,20 @@ class CampanSeeder extends Seeder 'periodoFinal'=> '2026-02-28', 'status'=>1 ]); + + Campan::create([ + 'name'=>'FEBRERO - MARZO 2026', + 'periodoInicial'=> '2026-02-01', + 'periodoFinal'=> '2026-03-31', + 'status'=>1 + ]); + + + Campan::create([ + 'name'=>'ENERO - ABRIL 2026', + 'periodoInicial'=> '2026-01-01', + 'periodoFinal'=> '2026-04-30', + 'status'=>1 + ]); } } diff --git a/database/seeders/ConceptoSeeder.php b/database/seeders/ConceptoSeeder.php index 7d58e842..b61549da 100644 --- a/database/seeders/ConceptoSeeder.php +++ b/database/seeders/ConceptoSeeder.php @@ -49,7 +49,7 @@ class ConceptoSeeder extends Seeder 'recargo' => '0' ]); - $concepto1->planConceptos()->sync([1]); + $concepto1->planConceptos()->sync([1,2]); $concepto2=Concepto::create([ 'name' => '3', @@ -58,7 +58,7 @@ class ConceptoSeeder extends Seeder 'tipo' => '1', 'recargo' => '0' ]); - $concepto2->planConceptos()->sync([1]); + $concepto2->planConceptos()->sync([1,2]); $year=2026; $tipo=1; @@ -79,7 +79,7 @@ class ConceptoSeeder extends Seeder 'recargo' => $recargo ]); - $concepto->planConceptos()->sync([1]); + $concepto->planConceptos()->sync([1,2]); } $year++; } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index c1ac75e0..ac28212c 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -24,6 +24,9 @@ class DatabaseSeeder extends Seeder $this->call(CampanSeeder::class); $this->call(TipoConceptoSeeder::class); $this->call(PlaneSeeder::class); + $this->call(PlanSeeder::class); $this->call(ConceptoSeeder::class); + $this->call(MaterialSeeder::class); + $this->call(GrupoSeeder::class); } } diff --git a/database/seeders/GrupoSeeder.php b/database/seeders/GrupoSeeder.php new file mode 100644 index 00000000..c68f2e80 --- /dev/null +++ b/database/seeders/GrupoSeeder.php @@ -0,0 +1,48 @@ + 1, + 'ciclo'=> 1, + 'nivel'=> 1, + 'plantel'=> 3, + 'turno'=> 1, + 'status'=> 1 + ]); + $grupo->alumnos()->sync([1,2,3,4,5,6,7,8,9,10]); + + for ($i=1; $i <=10 ; $i++) { + Alumno::where('id', $i)->update([ + 'status' => 3 + ]); + } + + $grupo2 = Grupo::create([ + 'plan_id'=> 2, + 'ciclo'=> 1, + 'nivel'=> 2, + 'plantel'=> 3, + 'turno'=> 2, + 'status'=> 1 + ]); + $grupo2->alumnos()->sync([16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]); + + for ($i=16; $i <=30 ; $i++) { + Alumno::where('id', $i)->update([ + 'status' => 3 + ]); + } + } +} diff --git a/database/seeders/MaterialSeeder.php b/database/seeders/MaterialSeeder.php new file mode 100644 index 00000000..e65d2e39 --- /dev/null +++ b/database/seeders/MaterialSeeder.php @@ -0,0 +1,83 @@ +word(); + $material=''; + if($f==1){ + $material= Material::create([ + 'name'=> $fakeWord, + 'objetivo'=>'desarrollo de material del ciclo'.$e, + 'creditos'=>10, + 'ciclo'=>$f, + 'horas'=>5, + 'clave'=>$e.'-car', + 'serial'=>'car', + 'status'=>1 + ]); + $material->carreraMaterial()->sync([1]); + }else{ + $material= Material::create([ + 'name'=> $fakeWord, + 'objetivo'=>'desarrollo de material del ciclo'.$e, + 'creditos'=>10, + 'ciclo'=>$f, + 'horas'=>5, + 'clave'=>$e.'-car', + 'serial'=>'car', + 'status'=>0 + ]); + $material->carreraMaterial()->sync([1]); + } + } + } + + + for ($f=1; $f <=10; $f++) { + for($e=1 ; $e <=8 ; $e++) { + $fakeWord = fake()->word(); + $material2=''; + if($f==1){ + $material2= Material::create([ + 'name'=> $fakeWord, + 'objetivo'=>'desarrollo de material del ciclo'.$e, + 'creditos'=>10, + 'ciclo'=>$f, + 'horas'=>5, + 'clave'=>$e.'-car', + 'serial'=>'car', + 'status'=>1 + ]); + $material2->carreraMaterial()->sync([13]); + }else{ + $material2= Material::create([ + 'name'=> $fakeWord, + 'objetivo'=>'desarrollo de material del ciclo'.$e, + 'creditos'=>10, + 'ciclo'=>$f, + 'horas'=>5, + 'clave'=>$e.'-car', + 'serial'=>'car', + 'status'=>0 + ]); + $material2->carreraMaterial()->sync([13]); + } + } + } + + + + + } +} diff --git a/database/seeders/NivelSeeder.php b/database/seeders/NivelSeeder.php index d8c52e61..66513c34 100644 --- a/database/seeders/NivelSeeder.php +++ b/database/seeders/NivelSeeder.php @@ -18,13 +18,16 @@ class NivelSeeder extends Seeder 'status' => 1 ]); - $nivel1->nivelPlantel()->sync(1); + $nivel1->nivelPlantel()->sync([1,2,3]); - Nivel::create([ + $nivel2= Nivel::create([ 'name' => 'Licenciatura', 'status' => 1 ]); + $nivel2->nivelPlantel()->sync([1,2,3]); + + Nivel::create([ 'name' => 'Maestría', 'status' => 1 diff --git a/database/seeders/PlanSeeder.php b/database/seeders/PlanSeeder.php new file mode 100644 index 00000000..6ed2d65a --- /dev/null +++ b/database/seeders/PlanSeeder.php @@ -0,0 +1,36 @@ + 'Bachillerato', + 'rvoe'=>'1234567890', + 'duracion'=>6, + 'duration_id'=>1, + 'nivel'=>1, + 'carrera'=>2 + ]); + $plan1->planesPlantel()->sync([1,2,3]); + + $plan2=Plan::create([ + 'name'=> 'Licenciatura', + 'rvoe'=>'1234567890', + 'duracion'=>10, + 'duration_id'=>2, + 'nivel'=>2, + 'carrera'=>14 + ]); + + $plan2->planesPlantel()->sync([1,2,3]); + } +} diff --git a/database/seeders/PlaneSeeder.php b/database/seeders/PlaneSeeder.php index 311f5be6..e96e1890 100644 --- a/database/seeders/PlaneSeeder.php +++ b/database/seeders/PlaneSeeder.php @@ -11,9 +11,18 @@ class PlaneSeeder extends Seeder public function run(): void { - Plane::create([ + $plan1=Plane::create([ + 'name' => 'BACHILLERATO', + 'status' => 1 + ]); + $plan1->planPlantel()->sync([1,2,3]); + + $plan2=Plane::create([ 'name' => 'LICENCIATURA', 'status' => 1 ]); + + $plan2->planPlantel()->sync([1,2,3]); + } } diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index 6a8b114b..2b4937d2 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -8,20 +8,21 @@ use Spatie\Permission\Models\Permission; class RoleSeeder extends Seeder { - /** - * Run the database seeds. - */ + public function run(): void { $role1 = Role::create(['name'=>'Admin']); - $role2 = Role::create(['name'=>'Blogger']); + $role2 = Role::create(['name'=>'Programador']); $role3 = Role::create(['name'=>'Promotor']); $role4 = Role::create(['name'=>'Alumno']); + $role5 = Role::create(['name'=>'Control escolar']); + $role6 = Role::create(['name'=>'Coordinación académica']); + $role7 = Role::create(['name'=>'Docente']); - Permission::create(['name'=>'note.index','description'=>'Ver notas'])->syncRoles([$role2]); - Permission::create(['name'=>'note.create','description'=>'Crear notas'])->syncRoles([$role2]); - Permission::create(['name'=>'note.edit','description'=>'Editar notas'])->syncRoles([$role2]); - Permission::create(['name'=>'note.destroy','description'=>'Eliminar notas'])->syncRoles([$role2]); + Permission::create(['name'=>'note.index','description'=>'Ver notas'])->syncRoles([$role1,$role2,$role3,$role4,$role5]); + Permission::create(['name'=>'note.create','description'=>'Crear notas'])->syncRoles([$role1,$role2,$role3,$role4,$role5]); + Permission::create(['name'=>'note.edit','description'=>'Editar notas'])->syncRoles([$role1,$role2,$role3,$role4,$role5]); + Permission::create(['name'=>'note.destroy','description'=>'Eliminar notas'])->syncRoles([$role1,$role2,$role3,$role4,$role5]); Permission::create(['name'=>'user.index','description'=>'Ver usuarios'])->syncRoles([$role1]); Permission::create(['name'=>'user.create','description'=>'Crear usuarios'])->syncRoles([$role1]); @@ -68,10 +69,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'=>'alumno.index','description'=>'Ver alumnos'])->syncRoles([$role1,$role3]); + Permission::create(['name'=>'alumno.index','description'=>'Ver alumnos'])->syncRoles([$role1,$role3,$role5]); 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'=>'alumno.edit','description'=>'Editar alumnos'])->syncRoles([$role1,$role3,$role5]); + Permission::create(['name'=>'alumno.destroy','description'=>'Eliminar alumnos'])->syncRoles([$role1]); Permission::create(['name'=>'area.index','description'=>'Ver areas'])->syncRoles([$role1]); Permission::create(['name'=>'area.create','description'=>'Crear areas'])->syncRoles([$role1]); @@ -120,5 +121,19 @@ class RoleSeeder extends Seeder Permission::create(['name'=>'horario.edit','description'=>'Editar horario'])->syncRoles([$role1]); Permission::create(['name'=>'horario.destroy','description'=>'Eliminar horario'])->syncRoles([$role1]); + Permission::create(['name'=>'pago.index','description'=>'Ver pagos'])->syncRoles([$role1,$role3,$role4]); + Permission::create(['name'=>'pago.create','description'=>'Crear pagos'])->syncRoles([$role1,$role3]); + Permission::create(['name'=>'pago.edit','description'=>'Editar pagos'])->syncRoles([$role1]); + Permission::create(['name'=>'pago.destroy','description'=>'Eliminar pagos'])->syncRoles([$role1,$role3]); + + Permission::create(['name'=>'grupo.index','description'=>'Ver grupos'])->syncRoles([$role1,$role4,$role5,$role6,$role7]); + Permission::create(['name'=>'grupo.create','description'=>'Crear grupos'])->syncRoles([$role1,$role5]); + Permission::create(['name'=>'grupo.edit','description'=>'Editar grupos'])->syncRoles([$role1,$role5,$role6]); + Permission::create(['name'=>'grupo.destroy','description'=>'Eliminar grupos'])->syncRoles([$role1,$role5]); + + Permission::create(['name'=>'docente.index','description'=>'Ver docentes'])->syncRoles([$role1,$role6]); + Permission::create(['name'=>'docente.create','description'=>'Crear docentes'])->syncRoles([$role1,$role6]); + Permission::create(['name'=>'docente.edit','description'=>'Editar docentes'])->syncRoles([$role1,$role6]); + Permission::create(['name'=>'docente.destroy','description'=>'Eliminar docentes'])->syncRoles([$role1,$role6]); } } diff --git a/database/seeders/TurnoSeeder.php b/database/seeders/TurnoSeeder.php index 6628c020..0c732e81 100644 --- a/database/seeders/TurnoSeeder.php +++ b/database/seeders/TurnoSeeder.php @@ -17,6 +17,18 @@ class TurnoSeeder extends Seeder 'name'=>'Escolarizado', 'status'=> 1 ]); - $turno1->turnoPlantel()->sync(1); + $turno1->turnoPlantel()->sync([1,2,3,4,5,6]); + + $turno2=Turno::create([ + 'name'=>'Sabatíno', + 'status'=> 1 + ]); + $turno2->turnoPlantel()->sync([1,2,3,4,5,6]); + + $turno3=Turno::create([ + 'name'=>'Mixto', + 'status'=> 1 + ]); + $turno3->turnoPlantel()->sync([1,2,3,4,5,6]); } } diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index f496ce91..8b89a6c5 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -2,18 +2,16 @@ namespace Database\Seeders; +use App\Models\Alumno; use App\Models\User; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class UserSeeder extends Seeder { - /** - * Run the database seeds. - */ public function run(): void { - $user1= User::create([ + + $user= User::create([ 'name'=>'Luis Fernando', 'apellidoPaterno'=>'Pérez', 'apellidoMaterno'=>'Luna', @@ -25,19 +23,56 @@ class UserSeeder extends Seeder 'status'=>1 ])->assignRole('Admin'); - $user1->plantelUsuarios()->sync(1); + $user->plantelUsuarios()->sync(3); - $user2= User::create([ - 'name'=>'Antonio Azulito', - 'apellidoPaterno'=>'Real', + $user1= User::create([ + 'name'=>'Crokly', + 'apellidoPaterno'=>'real', 'apellidoMaterno'=>'Luna', - 'email'=>'reydelfin@gmail.com', + 'email'=>'fernandoestr61@gmail.com', 'direccion'=>'Zacatenco mz 21 lt 2 san francisco cuautliquixca', - 'telefono'=>'5636287758', + 'telefono'=>'5636287760', 'password' => bcrypt('6686'), 'code'=>1, 'status'=>1 - ])->assignRole('Admin'); - $user2->plantelUsuarios()->sync([1,2,3]); + ])->assignRole('Coordinación académica'); + + $user1->plantelUsuarios()->sync(3); + + + for ($e=1; $e <=2 ; $e++) { + for ($i=1; $i <=15; $i++) { + $usr = User::create([ + 'name'=>fake('es_MX')->firstName(), + 'apellidoPaterno'=>fake()->lastName(), + 'apellidoMaterno'=>fake()->lastName(), + 'email'=> fake()->email(), + 'direccion'=>fake()->address(), + 'telefono'=>fake()->numerify('55########'), + 'password' => bcrypt('6686'), + 'code'=>0, + 'status'=>1 + ])->assignRole('Alumno'); + $usr->plantelUsuarios()->sync([3]); + + $alumno = Alumno::create([ + 'nivel'=>$e, + 'plan_id'=>$e, + 'ciclo'=>3, + 'turno'=>1, + 'medio'=>1, + 'usuario_registro'=>1, + 'plane_id'=>0, + 'status'=>2 + ]); + $alumno->alumnos()->sync($usr->id); + } + } + + + + + + } } diff --git a/resources/views/alumno/edit.blade.php b/resources/views/alumno/edit.blade.php new file mode 100644 index 00000000..91f50bc4 --- /dev/null +++ b/resources/views/alumno/edit.blade.php @@ -0,0 +1,33 @@ +@extends('layouts.landing') + +@section('title',"Edit") + +@section('content') + +
+
+
+
+
Editar alumno
+ Regresar +
+
+ +
+ @if (session('info')) +
+ {{session('info')}} +
+ @endif +
+ @csrf + @method('PUT') + + + +
+
+
+
+ +@endsection diff --git a/resources/views/alumno/index.blade.php b/resources/views/alumno/index.blade.php index 78e6169c..02683993 100644 --- a/resources/views/alumno/index.blade.php +++ b/resources/views/alumno/index.blade.php @@ -11,7 +11,13 @@
+ @hasrole('Promotor')
Prospectos
+ @endrole + + @hasrole('Control escolar') +
Alumnos
+ @endrole @can('alumno.create') @endcan @@ -19,6 +25,8 @@
+ + @hasrole('Promotor')
@forelse ($alumnos as $alumno) @@ -56,6 +64,94 @@
@livewire('modal-prospecto') + @endrole + + @hasrole('Control escolar') + + + + + + + + + + + + + + + @forelse ($alumnos as $alumno) + + + + + + + + + + + + + + @empty + + + + @endforelse + + +
IdAlumnoCampusStatusOpciones
{{ $alumno->id }} + @foreach($alumno->alumnos as $user) + + {{ $user->name }} + + @endforeach + + @foreach($alumno->alumnos as $user) + + @forelse($user->plantelUsuarios as $plantel) + + {{ $plantel->name }} + + @empty + Sin plantel + @endforelse + + @endforeach + + @if ($alumno->status==2) @endif + @if ($alumno->status==3) @endif + @if ($alumno->status==4) @endif + @if ($alumno->status==5) @endif + @if ($alumno->status==6) @endif + + {{ $alumno->statusAlumno->name }} + + + + @can('alumno.edit') + + @endcan + + @can('alumno.destroy') +
+
+ @csrf + @method('DELETE') + +
+
+ @endcan + +
Sin alumnos.
+ + @endrole
diff --git a/resources/views/carrera/edit.blade.php b/resources/views/carrera/edit.blade.php index c2ed138e..a5e9a111 100644 --- a/resources/views/carrera/edit.blade.php +++ b/resources/views/carrera/edit.blade.php @@ -57,7 +57,7 @@
-
Materiales
+
Materias
@can('material.create') @endcan diff --git a/resources/views/grupo/create.blade.php b/resources/views/grupo/create.blade.php new file mode 100644 index 00000000..ed5c3584 --- /dev/null +++ b/resources/views/grupo/create.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.landing') + +@section('title',"Crear") + +@section('content') + +
+
+
+
+
Crear grupo
+ Regresar +
+
+ +
+
+ @csrf +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+
+
+ +@endsection diff --git a/resources/views/grupo/edit.blade.php b/resources/views/grupo/edit.blade.php new file mode 100644 index 00000000..d3355977 --- /dev/null +++ b/resources/views/grupo/edit.blade.php @@ -0,0 +1,171 @@ +@extends('layouts.landing') + +@section('title',"Editar") + +@section('content') + +
+
+
+
+
Editar grupo
+ Regresar +
+
+ +
+
+ @method('PUT') + @csrf +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+
+ + + {{-- contenedor de materias --}} +
+
+
+
Alumnos
+ @can('grupo.create') + + @endcan +
+
+ +
+ @if (session('infogrupo')) +
+ {{session('infogrupo')}} +
+ @endif + +
+ + + + + + + + + + + @forelse ($grupo->alumnos as $alumno) + + + + + + @empty +

Sin alumnos.

+ @endforelse + + +
IdNombreOpciones
{{$alumno->id}}{{$alumno->usuario->first()?->name}} {{$alumno->usuario->first()?->apellidoPaterno}} {{$alumno->usuario->first()?->apellidoMaterno}} + @can('grupo.destroy') +
+
+ @csrf + @method('DELETE') + + + + +
+
+ @endcan + +
+ + +
+ + +
+
+
+ +@endsection + +@section('scripts') + @include('layouts._partials.tablaScript') + @include('layouts._partials.delete') + + +@endsection diff --git a/resources/views/grupo/index.blade.php b/resources/views/grupo/index.blade.php new file mode 100644 index 00000000..7b514cb2 --- /dev/null +++ b/resources/views/grupo/index.blade.php @@ -0,0 +1,75 @@ +@extends('layouts.landing') + +@section('head') + @include('layouts._partials.tablaStyle') +@endsection +@section('title',"Inicio") + +@section('content') + +
+
+
+
+
grupos
+ @can('grupo.create') + Crear Grupo + @endcan +
+
+ +
+
+ + + + + + + + + + + @forelse ($grupos as $grupo) + + + + + + @empty +

Sin grupos.

+ @endforelse + + +
IdNombreOpciones
{{$grupo->id}}{{ $grupo->plan->carreraRel->name }} + ({{ $grupo->plan->name }}-{{ $grupo->plan->rvoe }}) + @can('grupo.edit') + + @endcan + + @can('grupo.destroy') +
+
+ @csrf + @method('DELETE') + +
+
+ @endcan + +
+ + + +
+
+
+
+ +@endsection + + +@section('scripts') + @include('layouts._partials.tablaScript') + @include('layouts._partials.delete') +@endsection diff --git a/resources/views/grupo/show.blade.php b/resources/views/grupo/show.blade.php new file mode 100644 index 00000000..ac20307c --- /dev/null +++ b/resources/views/grupo/show.blade.php @@ -0,0 +1,23 @@ +@extends('layouts.landing') + +@section('title',"show") + +@section('content') + +
+
+
+
+
Datos carrera
+ Regresar +
+
+ +
+

{{$carrera->name}}

+ +
+
+
+ +@endsection diff --git a/resources/views/layouts/_partials/delete.blade.php b/resources/views/layouts/_partials/delete.blade.php index da1920a9..2947a13f 100644 --- a/resources/views/layouts/_partials/delete.blade.php +++ b/resources/views/layouts/_partials/delete.blade.php @@ -1,25 +1,28 @@ + if (e.target.dataset.confirmed) return; + + e.preventDefault(); + + Swal.fire({ + title: "Eliminar registro", + text: "¿Estás seguro?", + icon: "warning", + showCancelButton: true, + confirmButtonText: "Eliminar", + cancelButtonText: "Regresar", + }).then((result) => { + if (result.isConfirmed) { + e.target.dataset.confirmed = true; + e.target.submit(); + } + }); + +}); + @if(session('swal'))