RespuestasController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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',
  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, $form_id)
  60. {
  61. try {
  62. $respuesta = DB::table('respuestas_formulario')
  63. ->where('id_usuario', $id_usuario)
  64. ->where('form_id', $form_id)
  65. ->first();
  66. if (!$respuesta) {
  67. return response()->json(['error' => 'No hay respuesta registrada para ese usuario y formulario'], 404);
  68. }
  69. $contenido = json_decode($respuesta->contenido_json, true);
  70. $tabs = $contenido['tabs'];
  71. // Formatear las claves
  72. $tabsFormateados = [];
  73. foreach ($tabs as $tituloTab => $campos) {
  74. $camposFormateados = [];
  75. foreach ($campos as $clave => $valor) {
  76. $claveFormateada = ucwords(str_replace('_', ' ', $clave));
  77. $camposFormateados[$claveFormateada] = $valor;
  78. }
  79. $tabsFormateados[$tituloTab] = $camposFormateados;
  80. }
  81. $pdf = PDF::loadView('respuesta', [
  82. 'respuesta' => $tabsFormateados,
  83. 'usuario' => $respuesta->id_usuario,
  84. 'fecha' => $respuesta->created_at
  85. ]);
  86. return $pdf->download("respuesta_{$id_usuario}_form_{$form_id}.pdf");
  87. } catch (\Exception $e) {
  88. Log::error('Error generando PDF para usuario ' . $id_usuario . ' y formulario ' . $form_id . ': ' . $e->getMessage(), [
  89. 'exception' => $e,
  90. ]);
  91. return response()->json([
  92. 'error' => 'Error al generar el PDF',
  93. 'message' => $e->getMessage()
  94. ], 500);
  95. }
  96. }
  97. public function obtenerRespuesta(Request $request)
  98. {
  99. $request->validate([
  100. 'form_id' => 'required|integer',
  101. 'usuario_id' => 'required|string'
  102. ]);
  103. $respuesta = DB::table('respuestas_formulario')
  104. ->where('form_id', $request->form_id)
  105. ->where('id_usuario', $request->usuario_id)
  106. ->first();
  107. if ($respuesta) {
  108. return response()->json([
  109. 'success' => true,
  110. 'respuesta' => json_decode($respuesta->contenido_json, true)
  111. ]);
  112. } else {
  113. return response()->json([
  114. 'success' => false,
  115. 'message' => 'No se encontró respuesta'
  116. ], 404);
  117. }
  118. }
  119. public function actualizarRespuesta(Request $request)
  120. {
  121. try {
  122. $validated = $request->validate([
  123. 'form_id' => 'required|integer|exists:forms,id',
  124. 'usuarioRegistro' => 'required|string|exists:usuarios,idUsuario',
  125. 'contenido_json' => 'required|json',
  126. ]);
  127. $formId = $validated['form_id'];
  128. $usuario = $validated['usuarioRegistro'];
  129. $contenido = $validated['contenido_json'];
  130. // Buscar la respuesta existente
  131. $respuestaExistente = DB::table('respuestas_formulario')
  132. ->where('form_id', $formId)
  133. ->where('id_usuario', $usuario)
  134. ->first();
  135. if (!$respuestaExistente) {
  136. return response()->json([
  137. 'success' => false,
  138. 'message' => 'No existe una respuesta previa para actualizar.'
  139. ], 404);
  140. }
  141. // Actualizar la respuesta
  142. DB::table('respuestas_formulario')
  143. ->where('form_id', $formId)
  144. ->where('id_usuario', $usuario)
  145. ->update([
  146. 'contenido_json' => $contenido,
  147. 'updated_at' => now()
  148. ]);
  149. return response()->json([
  150. 'success' => true,
  151. 'message' => 'Respuesta actualizada correctamente'
  152. ]);
  153. } catch (\Exception $e) {
  154. return response()->json([
  155. 'success' => false,
  156. 'message' => 'Error interno del servidor',
  157. 'error' => $e->getMessage()
  158. ], 500);
  159. }
  160. }
  161. }