2af36ea272
- Modelos completos: Evaluacion, EvaluacionTipo, Pregunta, PreguntaTipo,
PreguntaOpcion, EvaluacionSubmission, Respuesta (con $table explícito
para nombres en español que Laravel pluraliza incorrectamente)
- Relaciones evaluaciones() añadidas a Plantel y Nivel
- EvaluacionBuilder (Livewire): constructor interactivo con preguntas
de tipo texto libre, opción múltiple, escala 1-5/1-10 y sí/no;
reorden con flechas, vista previa por tipo, selección de planteles
y niveles, configuración de estado, fechas y flag de anónima
- EvaluacionController: CRUD completo + toggleStatus
- Vistas: index, create/edit (con Livewire builder), show con detalle
de preguntas y cambio de estado
- Rutas resource /evaluacion + PATCH /evaluacion/{id}/status
- Migraciones: evaluaciones, preguntas, pregunta_opciones,
evaluacion_submissions, respuestas, evaluacion_plantel, evaluacion_nivel
- Menú: enlace Evaluaciones en panel de Administrador
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
120 lines
6.1 KiB
PHP
120 lines
6.1 KiB
PHP
@extends('layouts.landing')
|
|
|
|
@section('title', 'Evaluaciones')
|
|
|
|
@section('content')
|
|
<div class="container-fluid">
|
|
|
|
@if(session('info'))
|
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
|
{{ session('info') }}
|
|
<button type="button" class="close" data-dismiss="alert"><span>×</span></button>
|
|
</div>
|
|
@endif
|
|
|
|
<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">
|
|
<i class="fas fa-clipboard-list mr-1"></i> Evaluaciones
|
|
</h6>
|
|
<a href="{{ route('evaluacion.create') }}" class="btn btn-sm btn-primary shadow-sm">
|
|
<i class="fas fa-plus fa-sm text-white-50"></i> Nueva evaluación
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-hover">
|
|
<thead class="thead-light">
|
|
<tr>
|
|
<th>Título</th>
|
|
<th>Dirigida a</th>
|
|
<th>Estado</th>
|
|
<th class="text-center">Preguntas</th>
|
|
<th class="text-center">Respuestas</th>
|
|
<th>Vigencia</th>
|
|
<th class="text-center">Acciones</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($evaluaciones as $evaluacion)
|
|
<tr>
|
|
<td>
|
|
<strong>{{ $evaluacion->titulo }}</strong>
|
|
@if($evaluacion->anonima)
|
|
<span class="badge badge-secondary ml-1" title="Anónima">
|
|
<i class="fas fa-user-secret"></i>
|
|
</span>
|
|
@endif
|
|
</td>
|
|
<td>
|
|
@php $slug = $evaluacion->tipo?->slug; @endphp
|
|
@if($slug === 'docente')
|
|
<span class="badge badge-info"><i class="fas fa-chalkboard-teacher mr-1"></i>Docentes</span>
|
|
@elseif($slug === 'alumno')
|
|
<span class="badge badge-success"><i class="fas fa-user-graduate mr-1"></i>Alumnos</span>
|
|
@elseif($slug === 'administrativo')
|
|
<span class="badge badge-warning text-dark"><i class="fas fa-briefcase mr-1"></i>Administrativos</span>
|
|
@else
|
|
<span class="badge badge-light">—</span>
|
|
@endif
|
|
</td>
|
|
<td>
|
|
@if($evaluacion->status === 'activa')
|
|
<span class="badge badge-success">Activa</span>
|
|
@elseif($evaluacion->status === 'borrador')
|
|
<span class="badge badge-secondary">Borrador</span>
|
|
@else
|
|
<span class="badge badge-dark">Cerrada</span>
|
|
@endif
|
|
</td>
|
|
<td class="text-center">{{ $evaluacion->preguntas_count }}</td>
|
|
<td class="text-center">{{ $evaluacion->submissions_count }}</td>
|
|
<td>
|
|
@if($evaluacion->fecha_inicio || $evaluacion->fecha_fin)
|
|
<small>
|
|
{{ $evaluacion->fecha_inicio?->format('d/m/Y') ?? '—' }}
|
|
→
|
|
{{ $evaluacion->fecha_fin?->format('d/m/Y') ?? '—' }}
|
|
</small>
|
|
@else
|
|
<small class="text-muted">Sin fecha límite</small>
|
|
@endif
|
|
</td>
|
|
<td class="text-center text-nowrap">
|
|
<a href="{{ route('evaluacion.show', $evaluacion) }}"
|
|
class="btn btn-sm btn-info" title="Ver detalle">
|
|
<i class="fas fa-eye"></i>
|
|
</a>
|
|
<a href="{{ route('evaluacion.edit', $evaluacion) }}"
|
|
class="btn btn-sm btn-primary" title="Editar">
|
|
<i class="fas fa-edit"></i>
|
|
</a>
|
|
<form action="{{ route('evaluacion.destroy', $evaluacion) }}"
|
|
method="POST" class="d-inline"
|
|
onsubmit="return confirm('¿Eliminar esta evaluación y todas sus preguntas?')">
|
|
@csrf @method('DELETE')
|
|
<button class="btn btn-sm btn-danger" title="Eliminar">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="7" class="text-center text-muted py-4">
|
|
<i class="fas fa-clipboard fa-2x mb-2 d-block"></i>
|
|
No hay evaluaciones registradas.
|
|
</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|