Forráskód Böngészése

Add logging for user ID in getByUser method and improve HTML structure in ModalCirculares component

AldrickChavarria 3 hónapja
szülő
commit
bcc9218596

+ 1 - 0
Back/backendP-Educativa/app/Http/Controllers/Api/CircularesController.php

@@ -22,6 +22,7 @@ class CircularesController extends Controller
     public function getByUser($id)
     {
         $id = base64_decode($id);
+        error_log('Fetching circulars for user ID: ' . $id); // Log the user ID for debugging
         $circular = DB::table('vista_circulares_cu')->where('idUsuario', $id)->get();
         return response()->json($circular, 200);
     }

+ 48 - 48
Back/backendP-Educativa/routes/api.php

@@ -56,7 +56,7 @@ Route::get('ipLocal', [ActividadController::class, 'localIP']);
 Route::put('changePassword', [LoginController::class, 'updatePassword']);
 Route::get('personalizarInfo', [PersonalizarController::class, 'show']);
 Route::post('/send-test-email', [MailController::class, 'sendTestEmail']);
-    Route::get('/exportar-excel', [NivelExportController::class, 'exportarExcel']);
+Route::get('/exportar-excel', [NivelExportController::class, 'exportarExcel']);
 
 //protección de rutas
 Route::middleware(['auth:sanctum'])->group(function () {
@@ -83,11 +83,11 @@ Route::middleware(['auth:sanctum'])->group(function () {
     Route::put('circularDelete/{id}', [CircularesController::class, 'eliminar']);
     Route::put('circularEnable/{id}', [CircularesController::class, 'habilitar']);
     Route::get('download/{id}', [CircularesController::class, 'download']);
-    Route::post('idUserCircular',[CircularesController::class,'getUsuariosCircular']); //Obtener usuarios para enviar circulares
-    Route::post('crearDestino',[CircularesController::class,'crearDestinoCircular']); //crear destino de usuarios para enviar circulares
-    Route::get('getByUser/{id}',[CircularesController::class,'getByUser']); //Obtener circulares por usuario
-    Route::get('estadisticas/{id}',[CircularesController::class,'estadisticas']); //Obtener estadisticas de circulares
-    Route::post('actualizarVisto',[CircularesController::class,'actualizarVisto']); //Actualizar visto de circulares
+    Route::post('idUserCircular', [CircularesController::class, 'getUsuariosCircular']); //Obtener usuarios para enviar circulares
+    Route::post('crearDestino', [CircularesController::class, 'crearDestinoCircular']); //crear destino de usuarios para enviar circulares
+    Route::get('getByUser/{id}', [CircularesController::class, 'getByUser']); //Obtener circulares por usuario
+    Route::get('estadisticas/{id}', [CircularesController::class, 'estadisticas']); //Obtener estadisticas de circulares
+    Route::post('actualizarVisto', [CircularesController::class, 'actualizarVisto']); //Actualizar visto de circulares
 
     //actividad - Sesión
     Route::get('actividades', [ActividadController::class, 'index']);
@@ -199,9 +199,9 @@ Route::middleware(['auth:sanctum'])->group(function () {
     Route::post('AlumnoPadre', [AlumnosController::class, 'RelacionAlumnosPadre']);
     Route::delete('eliminarGrupo', [AlumnosController::class, 'eliminarGrupo']);
     Route::delete('eliminarPadre', [AlumnosController::class, 'eliminarPadre']);
-Route::get('/alumnos/bitacora/{id}', [AlumnosBitacoraController::class, 'index']);
-    Route::get('getByUser/{id}',[AlumnosBitacoraController::class,'getByUser']); //Obtener circulares por usuario
-     Route::get('UserOne/{id}', [AlumnosBitacoraController::class, 'findOne']);
+    Route::get('/alumnos/bitacora/{id}', [AlumnosBitacoraController::class, 'index']);
+    Route::get('getByUser/{id}', [AlumnosBitacoraController::class, 'getByUser']); //Obtener circulares por usuario
+    Route::get('UserOne/{id}', [AlumnosBitacoraController::class, 'findOne']);
 
 
 
@@ -213,64 +213,64 @@ Route::get('/alumnos/bitacora/{id}', [AlumnosBitacoraController::class, 'index']
     Route::get('getGrupos/{id}', [ProfesoresController::class, 'getGrupos']);
 
     //Ruta para Registro Academico
-    Route::get('getOneRegistro/{id}',[RegistroAcademico::class,'getOneRegistro']);
+    Route::get('getOneRegistro/{id}', [RegistroAcademico::class, 'getOneRegistro']);
     Route::get('UserOne/{id}', [RegistroAcademico::class, 'findOne']);
-    Route::get('getAll',[RegistroAcademico::class,'getAll']);
-    Route::post('registroAca',[RegistroAcademico::class,'registroAca']);
-    Route::put('updateRegistro/{id}',[RegistroAcademico::class,'ActualizarRegistroAca']);
+    Route::get('getAll', [RegistroAcademico::class, 'getAll']);
+    Route::post('registroAca', [RegistroAcademico::class, 'registroAca']);
+    Route::put('updateRegistro/{id}', [RegistroAcademico::class, 'ActualizarRegistroAca']);
 
     //Ruta para Registro Administrativo
-    Route::get('getAllAd',[RegistroAcademico::class,'getAllAd']);
-    Route::post('registroAdministrativo',[RegistroAcademico::class,'registroAdministrativo']);
-    Route::get('getRegistroAdmin/{id}',[RegistroAcademico::class,'getOneRegistroAdmi']);
-    Route::post('editarRegistroAdmin/{id}',[RegistroAcademico::class,'editarRegistroAdmin']);
-    Route::get('getAllPlanPago',[RegistroAcademico::class,'getAllPlanPago']);
-    Route::get('getAllPorcentajeBeca',[RegistroAcademico::class,'getAllPorcentajeBeca']);
-    Route::get('getAllMetodoPago',[RegistroAcademico::class,'getAllMetoPago']);
+    Route::get('getAllAd', [RegistroAcademico::class, 'getAllAd']);
+    Route::post('registroAdministrativo', [RegistroAcademico::class, 'registroAdministrativo']);
+    Route::get('getRegistroAdmin/{id}', [RegistroAcademico::class, 'getOneRegistroAdmi']);
+    Route::post('editarRegistroAdmin/{id}', [RegistroAcademico::class, 'editarRegistroAdmin']);
+    Route::get('getAllPlanPago', [RegistroAcademico::class, 'getAllPlanPago']);
+    Route::get('getAllPorcentajeBeca', [RegistroAcademico::class, 'getAllPorcentajeBeca']);
+    Route::get('getAllMetodoPago', [RegistroAcademico::class, 'getAllMetoPago']);
     Route::get('/constancia-fiscal/descargar/{idAlumno}', [RegistroAcademico::class, 'descargarConstanciaFiscal']);
 
 
     //Ruta para Profesor Registro Bitacora
-    Route::get('getRegistrosP',[profesorRegistroBitacora::class, 'getRegistrosP']);
-    Route::get('getMateriasP',[profesorRegistroBitacora::class, 'getMateriasP']);
-    Route::get('getTiposP',[profesorRegistroBitacora::class, 'Tipos']);
-    Route::get('getAlumnosP',[profesorRegistroBitacora::class, 'getAlumnos']);
-    Route::post('crearBitacoraP',[profesorRegistroBitacora::class, 'crearBitacora']);
-    Route::put('editarBitacoraP/{id}',[profesorRegistroBitacora::class, 'editarBitacora']);
-    Route::put('eliminarBitacoraP/{id}',[profesorRegistroBitacora::class, 'eliminarBitacora']);
-    Route::put('habilitarBitacoraP/{id}',[profesorRegistroBitacora::class, 'habilitarBitacora']);
+    Route::get('getRegistrosP', [profesorRegistroBitacora::class, 'getRegistrosP']);
+    Route::get('getMateriasP', [profesorRegistroBitacora::class, 'getMateriasP']);
+    Route::get('getTiposP', [profesorRegistroBitacora::class, 'Tipos']);
+    Route::get('getAlumnosP', [profesorRegistroBitacora::class, 'getAlumnos']);
+    Route::post('crearBitacoraP', [profesorRegistroBitacora::class, 'crearBitacora']);
+    Route::put('editarBitacoraP/{id}', [profesorRegistroBitacora::class, 'editarBitacora']);
+    Route::put('eliminarBitacoraP/{id}', [profesorRegistroBitacora::class, 'eliminarBitacora']);
+    Route::put('habilitarBitacoraP/{id}', [profesorRegistroBitacora::class, 'habilitarBitacora']);
 
     //Ruta para registroCalificaciones
-    Route::get('getCalificaciones',[RegistroCalicaciones::class,'getCalificaciones']);
-    Route::get('getPeriodosCalificacion',[RegistroCalicaciones::class,'getPeriodos']);
-    Route::post('registrarCalificacion',[RegistroCalicaciones::class,'registrarCalificacion']);
-    Route::post('registrarCalificacionesMasivas',[RegistroCalicaciones::class,'registrarCalificacionesMasivas']);
-    Route::put('editarCalificacion',[RegistroCalicaciones::class,'editarCalificacion']);
-    Route::put('elminarEstadoCalificacion',[RegistroCalicaciones::class,'eliminarEstado']);
-    Route::put('habilitarEstadoCalificacion',[RegistroCalicaciones::class,'habilitarEstado']);
+    Route::get('getCalificaciones', [RegistroCalicaciones::class, 'getCalificaciones']);
+    Route::get('getPeriodosCalificacion', [RegistroCalicaciones::class, 'getPeriodos']);
+    Route::post('registrarCalificacion', [RegistroCalicaciones::class, 'registrarCalificacion']);
+    Route::post('registrarCalificacionesMasivas', [RegistroCalicaciones::class, 'registrarCalificacionesMasivas']);
+    Route::put('editarCalificacion', [RegistroCalicaciones::class, 'editarCalificacion']);
+    Route::put('elminarEstadoCalificacion', [RegistroCalicaciones::class, 'eliminarEstado']);
+    Route::put('habilitarEstadoCalificacion', [RegistroCalicaciones::class, 'habilitarEstado']);
 
-    Route::get('getAlumnosCalificacion',[RegistroCalicaciones::class,'getCalificacionesMateria']);
+    Route::get('getAlumnosCalificacion', [RegistroCalicaciones::class, 'getCalificacionesMateria']);
 
 
     //ADMINISTRADOR DE FORMULARIOS RUTAS
     Route::post('/createForm', [FormController::class, 'store']); // Crear un nuevo formulario
-        Route::get('/formularios',[FormController::class,'getAll']);
-        Route::get('/formulario/{id}', [FormController::class, 'getFormById']);
+    Route::get('/formularios', [FormController::class, 'getAll']);
+    Route::get('/formulario/{id}', [FormController::class, 'getFormById']);
     Route::put('/updateForm/{id}', [FormController::class, 'update']);
-Route::delete('/forms/{id}', [FormController::class, 'destroy']);
-Route::put('formularios/{id}/publish', [FormController::class, 'publish']);
-Route::put('formularios/{id}/unpublish', [FormController::class, 'unpublish']);
-Route::get('/formularios/publicado', [FormController::class, 'getPublicado']);
+    Route::delete('/forms/{id}', [FormController::class, 'destroy']);
+    Route::put('formularios/{id}/publish', [FormController::class, 'publish']);
+    Route::put('formularios/{id}/unpublish', [FormController::class, 'unpublish']);
+    Route::get('/formularios/publicado', [FormController::class, 'getPublicado']);
 
 
-//Respuestas de Formularios creados
+    //Respuestas de Formularios creados
     Route::post('/recibirRespuesta', [RespuestasController::class, 'recibirRespuesta']);
-Route::get('/generar-pdf/{id_usuario}/{form_id}', [RespuestasController::class, 'generarPDF']);
-Route::get('/respuestas/check', [RespuestasController::class, 'tieneRespuesta']);
-Route::get('/respuestas/formulario', [RespuestasController::class, 'obtenerRespuesta']);
-Route::put('/actualizarRespuesta', [RespuestasController::class, 'actualizarRespuesta']);
+    Route::get('/generar-pdf/{id_usuario}/{form_id}', [RespuestasController::class, 'generarPDF']);
+    Route::get('/respuestas/check', [RespuestasController::class, 'tieneRespuesta']);
+    Route::get('/respuestas/formulario', [RespuestasController::class, 'obtenerRespuesta']);
+    Route::put('/actualizarRespuesta', [RespuestasController::class, 'actualizarRespuesta']);
 
-Route::post('/eliminarArchivo', [RegistroAcademico::class, 'eliminarArchivo']);
+    Route::post('/eliminarArchivo', [RegistroAcademico::class, 'eliminarArchivo']);
 
 
 });

+ 34 - 15
Front/src/app/modules/Administrador/components/button-dialog/ModalCirculares.component.html

@@ -27,12 +27,13 @@
         </mat-select>
         <mat-hint *ngIf="isValidField('audiencia', 'required')" style="color: red;">El campo es obligatorio</mat-hint>
       </mat-form-field>
-      
+
       <mat-form-field class="item">
         <mat-label>Destinos</mat-label>
         <mat-select name="destinos" formControlName="destinos">
           <mat-optgroup *ngFor="let opcion of opciones" [label]="opcion.name">
-            <mat-option *ngFor="let grupo of opcion.grupo" [value]="grupo" (onSelectionChange)="Evaluar(grupo);">{{grupo.viewValue}}</mat-option>
+            <mat-option *ngFor="let grupo of opcion.grupo" [value]="grupo"
+              (onSelectionChange)="Evaluar(grupo);">{{grupo.viewValue}}</mat-option>
           </mat-optgroup>
         </mat-select>
         <mat-hint *ngIf="isValidField('destinos', 'required')" style="color: red;">El campo es obligatorio</mat-hint>
@@ -41,7 +42,7 @@
       <mat-form-field class="item">
         <mat-label>Importancia</mat-label>
         <mat-select name="importancia" formControlName="importancia">
-          <mat-option *ngFor="let option of importancia" [value]="option.value">{{option.importancia}}</mat-option>          
+          <mat-option *ngFor="let option of importancia" [value]="option.value">{{option.importancia}}</mat-option>
         </mat-select>
         <mat-hint *ngIf="isValidField('importancia', 'required')" style="color: red;">El campo es obligatorio</mat-hint>
       </mat-form-field>
@@ -60,8 +61,12 @@
                 <!-- <mat-hint>MM/DD/YYYY</mat-hint> -->
                 <mat-datepicker-toggle matIconSuffix [for]="pickerStart"></mat-datepicker-toggle>
                 <mat-datepicker #pickerStart></mat-datepicker>
-                <mat-hint *ngIf="isValidField('fechaInicio', 'required')" style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
-                <mat-hint *ngIf="isValidField('fechaInicio', 'fechaInvalida') && !isValidField('fechaInicio', 'required')" style="color: red; width: 380px; position: absolute;">La fecha de inicio debe ser mayor o igual a la fecha actual</mat-hint>
+                <mat-hint *ngIf="isValidField('fechaInicio', 'required')"
+                  style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
+                <mat-hint
+                  *ngIf="isValidField('fechaInicio', 'fechaInvalida') && !isValidField('fechaInicio', 'required')"
+                  style="color: red; width: 380px; position: absolute;">La fecha de inicio debe ser mayor o igual a la
+                  fecha actual</mat-hint>
               </mat-form-field>
 
               <mat-form-field class="ml-10 w-responsive">
@@ -70,7 +75,8 @@
                   <mat-option *ngFor="let hora of horasDelDia" [value]="hora.hora24">{{hora.hora12}}
                   </mat-option>
                 </mat-select>
-                <mat-hint *ngIf="isValidField('horaInicio', 'required')" style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
+                <mat-hint *ngIf="isValidField('horaInicio', 'required')"
+                  style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
               </mat-form-field>
             </div>
           </div>
@@ -84,8 +90,12 @@
                 <!-- <mat-hint>MM/DD/YYYY</mat-hint> -->
                 <mat-datepicker-toggle matIconSuffix [for]="pickerStart1"></mat-datepicker-toggle>
                 <mat-datepicker #pickerStart1></mat-datepicker>
-                <mat-hint *ngIf="isValidField('fechaCaducidad', 'required')" style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
-                <mat-hint *ngIf="isValidField('fechaCaducidad', 'fechaInvalida') && !isValidField('fechaCaducidad', 'required')" style="color: red; width: 380px; position: absolute;">La fecha de caducidad debe ser mayor o igual a la fecha de inicio</mat-hint>
+                <mat-hint *ngIf="isValidField('fechaCaducidad', 'required')"
+                  style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
+                <mat-hint
+                  *ngIf="isValidField('fechaCaducidad', 'fechaInvalida') && !isValidField('fechaCaducidad', 'required')"
+                  style="color: red; width: 380px; position: absolute;">La fecha de caducidad debe ser mayor o igual a
+                  la fecha de inicio</mat-hint>
               </mat-form-field>
 
               <mat-form-field class="ml-10 w-responsive">
@@ -94,7 +104,8 @@
                   <mat-option *ngFor="let hora of horasDelDia" [value]="hora.hora24">{{hora.hora12}}
                   </mat-option>
                 </mat-select>
-                <mat-hint *ngIf="isValidField('horaCaducidad', 'required')" style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
+                <mat-hint *ngIf="isValidField('horaCaducidad', 'required')"
+                  style="color: red; width: 200px; position: absolute;">El campo es obligatorio</mat-hint>
               </mat-form-field>
             </div>
 
@@ -104,6 +115,7 @@
       </div>
 
 
+      <!-- Sección de file uploader -->
 
       <div class="item flex-col">
 
@@ -118,16 +130,23 @@
             <mat-icon>attach_file</mat-icon>
           </button>
         </div>
-        <div *ngIf="archivosData.length > 0">
-          <ul>
-            <li *ngFor="let archivo of archivosData; let i = index">
-              {{ archivo.nombre }} ({{ archivo.tamanio }} kb)
-              <button type="button" (click)="deleteIndex(i)"
-                style="cursor: pointer;border: none; background-color: red; color:white; border-radius: 5px;">Borrar</button>
+        <div *ngIf="archivosData.length > 0"
+          style="border: 1px solid #ccc; padding: 20px 12px; margin-top: 10px; max-height: 150px; border-radius: 10px; overflow-y: auto;">
+          <ul style="margin: 0; padding: 0; list-style: none; ">
+            <span style="margin-bottom: 10px;">Listado de archivos:</span>
+            <li *ngFor="let archivo of archivosData; let i = index"
+              style="border: 1px solid #ccc; padding: 10px 15px; margin-bottom: 8px; display: flex; justify-content: space-between; align-items: center; border-radius: 8px;">
+              <span>
+                {{ archivo.nombre }} ({{ archivo.tamanio }} kb)
+              </span>
+              <button class="btnDelete" type="button" (click)="deleteIndex(i)">
+                <mat-icon>close</mat-icon>
+              </button>
             </li>
           </ul>
         </div>
 
+
         <div class="progress">
 
           <!-- <mat-progress-bar class="progress-bar" mode="determinate"

+ 22 - 0
Front/src/app/modules/Administrador/components/button-dialog/button-dialog.component.css

@@ -149,6 +149,28 @@
   border: none;
 }
 
+.btnDelete {
+  display: flex;              
+  align-items: center;        
+  justify-content: center;
+  cursor: pointer;
+  border: none;
+  background-color: transparent;
+  height: 30px;
+  width: 30px;
+  color: #ccc;
+  border-radius: 5px;
+  padding: 0;
+}
+
+
+.btnDelete:hover {
+  color: #dd131a;
+  background-color: #f7e3e4;
+}
+
+
+
 .responsive {
   display: flex;
   flex-direction: row;

+ 2 - 1
Front/src/app/modules/Administrador/pages/circulares/circulares.component.css

@@ -117,7 +117,7 @@
 }
 
 .table-responsive {
-    min-height: 300px;
+    
     overflow: auto;
 }
 
@@ -231,6 +231,7 @@
     }
 
     .table-responsive {
+        
         overflow-x: auto;
     }