ソースを参照

Subo controlller y funcion de enviar respuestas completada Modulo Administrador de formularios

FREDY 3 ヶ月 前
コミット
be40245aaf

+ 50 - 0
Back/backendP-Educativa/app/Http/Controllers/RespuestasController.php

@@ -0,0 +1,50 @@
+<?php
+
+// app/Http/Controllers/FormController.php
+
+namespace App\Http\Controllers;
+
+use App\Models\Form;
+use App\Models\FormResponse;
+use Illuminate\Http\Request;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Validation\ValidationException;
+use Illuminate\Support\Facades\DB;
+class RespuestasController extends Controller
+{
+
+public function recibirRespuesta(Request $request)
+{
+    try {
+        $validated = $request->validate([
+            'form_id' => 'required|integer|exists:forms,id',
+            'contenido_json' => 'required|json',
+        ]);
+
+        $usuarioLogueado = auth()->user()->idUsuario;
+
+        $formId = DB::table('respuestas_formulario')->insertGetId([
+            'form_id' => $validated['form_id'],
+            'id_usuario' => $usuarioLogueado,
+            'contenido_json' => $validated['contenido_json'],
+            'created_at' => now()
+        ]);
+
+        return response()->json([
+            'success' => true,
+            'message' => 'Respuesta guardada correctamente',
+            'id' => $formId
+        ]);
+    } catch (\Exception $e) {
+        return response()->json([
+            'success' => false,
+            'message' => 'Error interno del servidor',
+            'error' => $e->getMessage()
+        ], 500);
+    }
+}
+
+
+
+
+}

+ 4 - 0
Back/backendP-Educativa/routes/api.php

@@ -27,6 +27,8 @@ use App\Http\Controllers\Api\profesorRegistroBitacora;
 use App\Http\Controllers\Api\RegistroCalicaciones;
 use App\Http\Controllers\NivelExportController;
 use App\Http\Controllers\FormController;
+use App\Http\Controllers\RespuestasController;
+
 /*
 |--------------------------------------------------------------------------
 | API Routes
@@ -256,6 +258,8 @@ Route::put('formularios/{id}/unpublish', [FormController::class, 'unpublish']);
 Route::get('/formularios/publicado', [FormController::class, 'getPublicado']);
 
 
+//Respuestas de Formularios creados
+    Route::post('/recibirRespuesta', [RespuestasController::class, 'recibirRespuesta']);
 
 
 });

+ 52 - 8
Front/src/app/modules/Padres/pages/formularios/formularios.component.ts

@@ -1,6 +1,8 @@
+import { Usuario } from './../../../Administrador/interfaces/Usuario.interface';
 import { Component, OnInit } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { FormService } from './../../../Administrador/services/FormService.service';
+import { recibirRespuestas } from '../../services/recibirRespuestas.service';
 
 @Component({
   selector: 'app-formularios',
@@ -8,25 +10,39 @@ import { FormService } from './../../../Administrador/services/FormService.servi
   styleUrls: ['./formularios.component.css']
 })
 export class FormulariosComponent implements OnInit {
+
+ Padre = JSON.parse(
+  localStorage.getItem('userDataS')
+    ? localStorage.getItem('userDataS') || ''
+    : localStorage.getItem('userData') || ''
+);
+
+usuarioLogueadoId = this.Padre ? this.Padre[0]: null;
+
   form!: FormGroup;
   configuration: any;
   selectedTabIndex = 0;
+  formId: any;
 
   constructor(
     private formService: FormService,
-    private fb: FormBuilder
+    private fb: FormBuilder,
+    private _recibirRespuestas: recibirRespuestas,
+
   ) {}
 
   ngOnInit(): void {
     this.obtenerFormularioPublicado();
+
+console.log('Padre:', this.usuarioLogueadoId);
+
   }
 
   obtenerFormularioPublicado(): void {
     this.formService.getPublishedForm().subscribe({
       next: (response: any) => {
         if (response.success && response.form) {
-          console.log('Respuesta form:', response.form);
-          console.log('Configuration raw:', response.form.configuration);
+ this.formId = response.form.id;
 
           this.configuration = response.form.configuration;
 
@@ -34,7 +50,6 @@ export class FormulariosComponent implements OnInit {
           if (typeof this.configuration === 'string') {
             try {
               this.configuration = JSON.parse(this.configuration);
-              console.log('Configuration parseada:', this.configuration);
             } catch (error) {
               console.error('Error parseando configuración JSON:', error);
               return;
@@ -69,16 +84,45 @@ export class FormulariosComponent implements OnInit {
     });
 
     this.form = this.fb.group(group);
-    console.log('Formulario reconstruido:', this.form);
   }
 
   onSubmit(): void {
     if (this.form.valid) {
       console.log('Formulario enviado con datos:', this.form.value);
-      // Aquí puedes enviar los datos al backend si lo necesitas
+
+     const dataToSend = {
+  form_id: this.formId,
+  usuarioRegistro: this.usuarioLogueadoId, // acá va el id del usuario
+  contenido_json: JSON.stringify(this.form.value)
+};
+
+
+   this._recibirRespuestas.recibirRespuesta(dataToSend).subscribe({
+  next: (response: any) => {  // <-- usa any para que TS no te marque error
+    if (response.success) {
+      console.log('Respuesta guardada con éxito');
     } else {
-      console.log('Formulario inválido');
-      this.form.markAllAsTouched();
+      console.error('Error guardando respuesta:');
+    }
+  },
+  error: (err) => {
+    console.error('Error en el envío:', err);
+  }
+});
     }
   }
 }
+
+// onSubmit(): void {
+//   if (this.form.valid) {
+//     console.log('Formulario enviado con datos:', this.form.value);
+
+//     // Armar el payload que enviarás al backend
+//     const dataToSend = {
+//       form_id: this.formId,        // el id del formulario
+//       usuarioRegistro: this.usuarioRegistro, // por ejemplo, el id del usuario logueado, si lo tienes
+//       contenido_json: JSON.stringify(this.form.value) // enviar el contenido como JSON string
+//     };
+
+//     // Aquí llamas al servicio para enviar los datos al backend
+

+ 24 - 0
Front/src/app/modules/Padres/services/recibirRespuestas.service.ts

@@ -0,0 +1,24 @@
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { environments } from '../../../../environments/environments';
+import { catchError, map, throwError } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class recibirRespuestas {
+  private URL: string = environments.baseUrl;
+  private getHeaders(): HttpHeaders {
+    const token = localStorage.getItem('token') || '';
+    return new HttpHeaders({
+      'Content-Type': 'application/json',
+      'Authorization': `Bearer ${token}`
+    });
+  }
+  constructor(private http: HttpClient) { }
+
+
+    recibirRespuesta(data: any) {
+      return this.http.post(`${this.URL}/recibirRespuesta`, data,  { headers: this.getHeaders() });
+    }
+}