RespuestasController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. // app/Http/Controllers/FormController.php
  3. namespace App\Http\Controllers;
  4. use App\Models\Form;
  5. use App\Models\FormResponse;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Http\JsonResponse;
  8. use Illuminate\Validation\ValidationException;
  9. use Illuminate\Support\Facades\DB;
  10. use Barryvdh\DomPDF\Facade\Pdf;
  11. use Illuminate\Support\Facades\Log; // <-- Importa Log
  12. class RespuestasController extends Controller
  13. {
  14. public function recibirRespuesta(Request $request)
  15. {
  16. try {
  17. $validated = $request->validate([
  18. 'form_id' => 'required|integer|exists:forms,id',
  19. 'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario', // 👈 validación correcta para varchar
  20. 'contenido_json' => 'required|json',
  21. ]);
  22. $usuarioLogueado = $validated['usuarioRegistro'];
  23. $formId = DB::table('respuestas_formulario')->insertGetId([
  24. 'form_id' => $validated['form_id'],
  25. 'id_usuario' => $usuarioLogueado,
  26. 'contenido_json' => $validated['contenido_json'],
  27. 'created_at' => now()
  28. ]);
  29. return response()->json([
  30. 'success' => true,
  31. 'message' => 'Respuesta guardada correctamente',
  32. 'id' => $formId
  33. ]);
  34. } catch (\Exception $e) {
  35. return response()->json([
  36. 'success' => false,
  37. 'message' => 'Error interno del servidor',
  38. 'error' => $e->getMessage()
  39. ], 500);
  40. }
  41. }
  42. public function tieneRespuesta(Request $request)
  43. {
  44. $request->validate([
  45. 'form_id' => 'required|integer|exists:forms,id',
  46. 'usuario_id' => 'required|string',
  47. ]);
  48. $formId = $request->input('form_id');
  49. $usuarioId = $request->input('usuario_id');
  50. $existe = DB::table('respuestas_formulario')
  51. ->where('form_id', $formId)
  52. ->where('id_usuario', $usuarioId)
  53. ->exists();
  54. return response()->json([
  55. 'success' => true,
  56. 'hasRespuesta' => $existe
  57. ]);
  58. }
  59. public function generarPDF($id_usuario)
  60. {
  61. try {
  62. $respuesta = DB::table('respuestas_formulario')
  63. ->where('id_usuario', $id_usuario)
  64. ->first();
  65. if (!$respuesta) {
  66. return response()->json(['error' => 'No hay respuesta registrada'], 404);
  67. }
  68. $contenido = json_decode($respuesta->contenido_json, true);
  69. $tabs = $contenido['tabs'];
  70. // Formatear las claves
  71. $tabsFormateados = [];
  72. foreach ($tabs as $tituloTab => $campos) {
  73. $camposFormateados = [];
  74. foreach ($campos as $clave => $valor) {
  75. $claveFormateada = ucwords(str_replace('_', ' ', $clave));
  76. $camposFormateados[$claveFormateada] = $valor;
  77. }
  78. $tabsFormateados[$tituloTab] = $camposFormateados;
  79. }
  80. $pdf = PDF::loadView('respuesta', [
  81. 'respuesta' => $tabsFormateados,
  82. 'usuario' => $respuesta->id_usuario,
  83. 'fecha' => $respuesta->created_at
  84. ]);
  85. return $pdf->download("respuesta_{$id_usuario}.pdf");
  86. } catch (\Exception $e) {
  87. Log::error('Error generando PDF para usuario ' . $id_usuario . ': ' . $e->getMessage(), [
  88. 'exception' => $e,
  89. ]);
  90. return response()->json([
  91. 'error' => 'Error al generar el PDF',
  92. 'message' => $e->getMessage()
  93. ], 500);
  94. }
  95. }
  96. }