Modificacion de prospecto a alumno y asignacion de grupos, coordinacion académica

This commit is contained in:
2026-03-23 15:48:23 -06:00
parent 58e27fc5fc
commit 1bcebeb8a1
43 changed files with 1551 additions and 96 deletions
+33
View File
@@ -0,0 +1,33 @@
@extends('layouts.landing')
@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 alumno</h6>
<a href="{{route('alumno.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('alumno.update', $alumno->id) }}" method="POST">
@csrf
@method('PUT')
<input class="btn btn-primary" type="submit" value="Actualizar">
</form>
</div>
</div>
</div>
@endsection
+96
View File
@@ -11,7 +11,13 @@
<div class="card shadow mb-4">
<div class="card-header py-3">
<div class="d-sm-flex align-items-center justify-content-between">
@hasrole('Promotor')
<h6 class="m-0 font-weight-bold text-primary">Prospectos</h6>
@endrole
@hasrole('Control escolar')
<h6 class="m-0 font-weight-bold text-primary">Alumnos</h6>
@endrole
@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
@@ -19,6 +25,8 @@
</div>
<div class="card-body row">
@hasrole('Promotor')
<div class="col-sm-2 overflow-auto" style="height: 80vh">
<div class="list-group">
@forelse ($alumnos as $alumno)
@@ -56,6 +64,94 @@
</div>
@livewire('modal-prospecto')
@endrole
@hasrole('Control escolar')
<table id="tcont" class="table table-striped table-bordered nowrap table-hover" style="width:100%;">
<thead>
<tr>
<th>Id</th>
<th>Alumno</th>
<th>Campus</th>
<th>Status</th>
<th>Opciones</th>
</tr>
</thead>
<tbody>
@forelse ($alumnos as $alumno)
<tr style="width:100%">
<td>{{ $alumno->id }}</td>
<td>
@foreach($alumno->alumnos as $user)
<a href="{{ route('alumno.show', $alumno->id) }}">
{{ $user->name }}
</a>
@endforeach
</td>
<td class="text-center">
@foreach($alumno->alumnos as $user)
@forelse($user->plantelUsuarios as $plantel)
<span class="badge bg-primary text-white">
{{ $plantel->name }}
</span>
@empty
<span class="text-muted">Sin plantel</span>
@endforelse
@endforeach
</td>
<td class="text-center">
@if ($alumno->status==2) <span class="badge bg-warning text-white"> @endif
@if ($alumno->status==3) <span class="badge bg-success text-white"> @endif
@if ($alumno->status==4) <span class="badge bg-danger text-white"> @endif
@if ($alumno->status==5) <span class="badge bg-dark text-white"> @endif
@if ($alumno->status==6) <span class="badge text-white" style="background-color: #630ac9"> @endif
{{ $alumno->statusAlumno->name }}
</span>
</td>
<td class="row mx-auto">
@can('alumno.edit')
<div class="col-sm-6 col-md-6">
<a class="btn btn-primary" href="{{ route('alumno.edit',$alumno->id) }}">
Edit
</a>
</div>
@endcan
@can('alumno.destroy')
<div class="col-sm-6 col-md-6">
<form class="delete-form" action="{{ route('alumno.destroy',$alumno->id) }}" method="POST">
@csrf
@method('DELETE')
<input type="submit" value="DELETE" class="btn btn-danger">
</form>
</div>
@endcan
</td>
</tr>
@empty
<tr>
<td colspan="4">Sin alumnos.</td>
</tr>
@endforelse
</tbody>
</table>
@endrole
</div>
</div>
+1 -1
View File
@@ -57,7 +57,7 @@
<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>
<h6 class="m-0 font-weight-bold text-primary">Materias</h6>
@can('material.create')
<button onclick="Livewire.dispatch('create-material')" 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
+73
View File
@@ -0,0 +1,73 @@
@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 grupo</h6>
<a href="{{route('grupo.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('grupo.store')}}" method="POST">
@csrf
<div class="mb-3">
<label for="status">Seleccionar Carrera</label>
<select class="form-control" name="plan_id">
<option value="">Seleccionar plan</option>
@foreach ($plans as $nivel => $grupo)
<optgroup label="{{ $nivel }}">
@foreach ($grupo as $plan)
<option value="{{ $plan->id }}">
{{ $plan->carreraRel->name }}
({{ $plan->name }}-{{ $plan->rvoe }})
</option>
@endforeach
</optgroup>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="status">Seleccionar turno</label>
<select class="form-control" name="turno">
<option value="0">Seleccionar turno</option>
@foreach ($turnos as $turno)
<option value="{{ $turno->id }}">{{$turno->name}}</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="status">Seleccionar plantel</label>
<select class="form-control" name="plantel">
<option value="0">Seleccionar plantel</option>
@foreach ($planteles as $plantel)
<option value="{{ $plantel->id }}">{{$plantel->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
+171
View File
@@ -0,0 +1,171 @@
@extends('layouts.landing')
@section('title',"Editar")
@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 grupo</h6>
<a href="{{route('grupo.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('grupo.update',$grupo->id)}}" method="POST">
@method('PUT')
@csrf
<div class="mb-3">
<label for="status">Seleccionar Carrera</label>
<select class="form-control" name="plan_id">
<option value="">Seleccionar plan</option>
@foreach ($plans as $nivel => $grupos)
<optgroup label="{{ $nivel }}">
@foreach ($grupos as $plan)
<option value="{{ $plan->id }}" {{ $plan->id == $grupo->id ? 'selected' : '' }}>
{{ $plan->carreraRel->name }}
({{ $plan->name }}-{{ $plan->rvoe }})
</option>
@endforeach
</optgroup>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="status">Seleccionar ciclo</label>
<select class="form-control" name="ciclo">
<option value="0">Seleccionar ciclo</option>
@for ($i=1 ; $i <= $ciclos->duracion ; $i++)
<option value="{{ $i }}" @selected($i == $grupo->ciclo)>{{$i}}</option>
@endfor
</select>
</div>
<div class="mb-3">
<label for="status">Seleccionar turno</label>
<select class="form-control" name="turno">
<option value="0">Seleccionar turno</option>
@foreach ($turnos as $turno)
<option value="{{ $turno->id }}" {{ $turno->id == $grupo->turno ? 'selected' : '' }}>{{$turno->name}}</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="status">Seleccionar plantel</label>
<select class="form-control" name="plantel">
<option value="0">Seleccionar plantel</option>
@foreach ($planteles as $plantel)
<option value="{{ $plantel->id }}" {{ $plantel->id == $grupo->plantel ? 'selected' : '' }}>{{$plantel->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" {{ 1 == $grupo->status ? 'selected' : '' }}>Activo</option>
<option value="0" {{ 0 == $grupo->status ? 'selected' : '' }}>Inactivo</option>
</select>
</div>
<input class="btn btn-primary" type="submit" value="Guardar">
</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">Alumnos</h6>
@can('grupo.create')
<button onclick="Livewire.dispatch('create-grupo')" 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('infogrupo'))
<div class="alert alert-success">
<strong>{{session('infogrupo')}}</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 ($grupo->alumnos as $alumno)
<tr style="width:100%">
<td>{{$alumno->id}}</td>
<td>{{$alumno->usuario->first()?->name}} {{$alumno->usuario->first()?->apellidoPaterno}} {{$alumno->usuario->first()?->apellidoMaterno}}</td>
<td>
@can('grupo.destroy')
<div>
<form class="delete-form" action="{{route('grupo.destroy',$grupo->id)}}" method="POST">
@csrf
@method('DELETE')
<input class="d-none" name="alumno" value="{{$alumno->id}}">
<button type="submit" style="border:none; background:none;">
<i class="fa-duotone fa-regular fa-circle-user-circle-xmark fa-2xl" style="--fa-primary-color: rgb(172, 5, 18); --fa-secondary-color: rgb(245, 112, 123);"></i>
</button>
</form>
</div>
@endcan
</td>
</tr>
@empty
<p>Sin alumnos.</p>
@endforelse
</tbody>
</table>
</div>
<livewire:grupo-alumno :grupo="$grupo"/>
</div>
</div>
</div>
@endsection
@section('scripts')
@include('layouts._partials.tablaScript')
@include('layouts._partials.delete')
<script>
document.addEventListener('livewire:init', () => {
Livewire.on('open-grupo-modal', () => {
$('#exampleModal').modal('show');
});
});
document.addEventListener('livewire:init', () => {
Livewire.on('close-modal', () => {
$('#exampleModal').modal('hide');
});
});
</script>
@endsection
+75
View File
@@ -0,0 +1,75 @@
@extends('layouts.landing')
@section('head')
@include('layouts._partials.tablaStyle')
@endsection
@section('title',"Inicio")
@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">grupos</h6>
@can('grupo.create')
<a href="{{route('grupo.create')}}" class="d-sm-inline-block btn btn-sm btn-primary shadow-sm"><i class="fas fa-download fa-sm text-white-50"></i> Crear Grupo</a>
@endcan
</div>
</div>
<div class="card-body">
<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 ($grupos as $grupo)
<tr style="width:100%">
<td>{{$grupo->id}}</td>
<td><a href="{{route('grupo.show',$grupo->id)}}">{{ $grupo->plan->carreraRel->name }}
({{ $grupo->plan->name }}-{{ $grupo->plan->rvoe }})</a></td>
<td class="row mx-auto">
@can('grupo.edit')
<div class="col-sm-6 col-md-6"><a class="btn btn-primary" href="{{route('grupo.edit',$grupo->id)}}">Edit</a></div>
@endcan
@can('grupo.destroy')
<div class="col-sm-6 col-md-6">
<form class="delete-form" action="{{route('grupo.destroy',$grupo->id)}}" method="POST">
@csrf
@method('DELETE')
<input type="submit" value="DELETE" class="btn btn-danger">
</form>
</div>
@endcan
</td>
</tr>
@empty
<p>Sin grupos.</p>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('scripts')
@include('layouts._partials.tablaScript')
@include('layouts._partials.delete')
@endsection
+23
View File
@@ -0,0 +1,23 @@
@extends('layouts.landing')
@section('title',"show")
@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">Datos 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">
<h1>{{$carrera->name}}</h1>
</div>
</div>
</div>
@endsection
@@ -1,25 +1,28 @@
<script>
forms= document.querySelectorAll('.delete-form');
document.addEventListener('submit', function (e) {
forms.forEach(form => {
form.addEventListener('submit',(e)=>{
e.preventDefault();
if (!e.target.classList.contains('delete-form')) return;
Swal.fire({
title: "Eliminar registro",
text: "estas seguro?",
icon: "warning",
showCancelButton: true,
confirmButtonText: "Eliminar",
cancelButtonText: "regresar",
}).then((result) => {
if (result.isConfirmed) {
form.submit();
}
});
});
});
</script>
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();
}
});
});
</script>
@if(session('swal'))
<script>
@@ -128,12 +128,63 @@
</li>
@endrole
@hasrole(['Alumno'])
@hasrole('Control escolar')
<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-fw fa-bullhorn" 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>
@can('alumno.index')
<a class="collapse-item" href="{{ route('alumno.index') }}" style="color:#85888e">Alumnos</a>
@endcan
@can('grupo.index')
<a class="collapse-item" href="{{ route('grupo.index') }}" style="color:#85888e">Grupos</a>
@endcan
</div>
</div>
</li>
@endrole
@hasrole('Coordinación académica')
<li class="nav-item">
<a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#CoordinacionAcademica"
aria-expanded="true" aria-controls="CoordinacionAcademica">
<i class="fas fa-fw fa-bullhorn" style="color: #e8e8e8;"></i>
<span>Coordinación académica</span>
</a>
<div id="CoordinacionAcademica" class="collapse" aria-labelledby="CoordinacionAcademica" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Herramientas</h6>
{{-- @can('docente.index')
<a class="collapse-item" href="{{ route('docente.index') }}" style="color:#85888e">Docentes</a>
@endcan --}}
@can('grupo.index')
<a class="collapse-item" href="{{ route('grupo.index') }}" style="color:#85888e">Grupos</a>
@endcan
</div>
</div>
</li>
@endrole
@hasrole(['Alumno'])
@can('pago.index')
<li class="nav-item">
<a class="nav-link" href="{{ route('pago.index') }}">
<i class="fas fa-money-bill-alt" style="color: #e8e8e8;"></i>
<span>Mis pagos</span></a>
</li>
@endcan
@endrole
@@ -0,0 +1,58 @@
<div wire:ignore.self class="modal fade" id="exampleModal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Agregar alumnos a grupo</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<table id="tcont" class="table table-striped table-bordered nowrap table-hover" style="width:100%;">
<thead>
<tr>
<th>Seleccionar</th>
<th>Id</th>
<th>Nombre</th>
<th>Nivel</th>
<th>Carrera</th>
</tr>
</thead>
<tbody>
@forelse ($alumnos as $alumno)
<tr style="width:100%">
<td class="text-center">
<div class="form-check">
<input type="checkbox" class="form-check-input cb"
wire:model="selectedAlumnos" value="{{ $alumno->id }}">
</div>
</td>
<td>{{$alumno->id}}</td>
<td>{{$alumno->usuario->first()?->name}} {{$alumno->usuario->first()?->apellidoPaterno}} {{$alumno->usuario->first()?->apellidoMaterno}}</td>
<td>{{$alumno->nivelRel?->name}}</td>
<td>
{{$alumno->plan?->carreraRel?->name}}
</td>
</tr>
@empty
<p>Sin alumnos.</p>
@endforelse
</tbody>
</table>
</div>
<button wire:click="guardar" class="btn btn-primary">
Agregar
</button>
</div>
</div>
</div>
</div>