| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- <?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;
- use Barryvdh\DomPDF\Facade\Pdf;
- use Illuminate\Support\Facades\Log; // <-- Importa Log
- class RespuestasController extends Controller
- {
- public function recibirRespuesta(Request $request)
- {
- try {
- $validated = $request->validate([
- 'form_id' => 'required|integer|exists:forms,id',
- 'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario',
- 'contenido_json' => 'required|json',
- ]);
- $usuarioLogueado = $validated['usuarioRegistro'];
- $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);
- }
- }
- public function tieneRespuesta(Request $request)
- {
- $request->validate([
- 'form_id' => 'required|integer|exists:forms,id',
- 'usuario_id' => 'required|string',
- ]);
- $formId = $request->input('form_id');
- $usuarioId = $request->input('usuario_id');
- $existe = DB::table('respuestas_formulario')
- ->where('form_id', $formId)
- ->where('id_usuario', $usuarioId)
- ->exists();
- return response()->json([
- 'success' => true,
- 'hasRespuesta' => $existe
- ]);
- }
- public function generarPDF($id_usuario, $form_id)
- {
- try {
- $respuesta = DB::table('respuestas_formulario')
- ->where('id_usuario', $id_usuario)
- ->where('form_id', $form_id)
- ->first();
- if (!$respuesta) {
- return response()->json(['error' => 'No hay respuesta registrada para ese usuario y formulario'], 404);
- }
- $contenido = json_decode($respuesta->contenido_json, true);
- $tabs = $contenido['tabs'];
- // Formatear las claves
- $tabsFormateados = [];
- foreach ($tabs as $tituloTab => $campos) {
- $camposFormateados = [];
- foreach ($campos as $clave => $valor) {
- $claveFormateada = ucwords(str_replace('_', ' ', $clave));
- $camposFormateados[$claveFormateada] = $valor;
- }
- $tabsFormateados[$tituloTab] = $camposFormateados;
- }
- $pdf = PDF::loadView('respuesta', [
- 'respuesta' => $tabsFormateados,
- 'usuario' => $respuesta->id_usuario,
- 'fecha' => $respuesta->created_at
- ]);
- return $pdf->download("respuesta_{$id_usuario}_form_{$form_id}.pdf");
- } catch (\Exception $e) {
- Log::error('Error generando PDF para usuario ' . $id_usuario . ' y formulario ' . $form_id . ': ' . $e->getMessage(), [
- 'exception' => $e,
- ]);
- return response()->json([
- 'error' => 'Error al generar el PDF',
- 'message' => $e->getMessage()
- ], 500);
- }
- }
- public function obtenerRespuesta(Request $request)
- {
- $request->validate([
- 'form_id' => 'required|integer',
- 'usuario_id' => 'required|string'
- ]);
- $respuesta = DB::table('respuestas_formulario')
- ->where('form_id', $request->form_id)
- ->where('id_usuario', $request->usuario_id)
- ->first();
- if ($respuesta) {
- return response()->json([
- 'success' => true,
- 'respuesta' => json_decode($respuesta->contenido_json, true)
- ]);
- } else {
- return response()->json([
- 'success' => false,
- 'message' => 'No se encontró respuesta'
- ], 404);
- }
- }
- public function actualizarRespuesta(Request $request)
- {
- try {
- $validated = $request->validate([
- 'form_id' => 'required|integer|exists:forms,id',
- 'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario',
- 'contenido_json' => 'required|json',
- ]);
- $formId = $validated['form_id'];
- $usuario = $validated['usuarioRegistro'];
- $contenido = $validated['contenido_json'];
- // Buscar la respuesta existente
- $respuestaExistente = DB::table('respuestas_formulario')
- ->where('form_id', $formId)
- ->where('id_usuario', $usuario)
- ->first();
- if (!$respuestaExistente) {
- return response()->json([
- 'success' => false,
- 'message' => 'No existe una respuesta previa para actualizar.'
- ], 404);
- }
- // Actualizar la respuesta
- DB::table('respuestas_formulario')
- ->where('form_id', $formId)
- ->where('id_usuario', $usuario)
- ->update([
- 'contenido_json' => $contenido,
- 'updated_at' => now()
- ]);
- return response()->json([
- 'success' => true,
- 'message' => 'Respuesta actualizada correctamente'
- ]);
- } catch (\Exception $e) {
- return response()->json([
- 'success' => false,
- 'message' => 'Error interno del servidor',
- 'error' => $e->getMessage()
- ], 500);
- }
- }
- }
|