EVOLUTION-MANAGER
Edit File: crudservicios.php
<?php namespace App\Http\Controllers; use App\Servi_dato; use App\Servi_imagen; use Illuminate\Http\Request; use App\Servicio; use Illuminate\Support\Facades\DB; use Illuminate\Validation\ValidationException; use Illuminate\Support\Facades\Storage; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\Log; use function GuzzleHttp\Promise\all; class crudservicios extends Controller { public function index() { $servicios = Servicio::select('id_servicios', 'nombre_servicio') ->orderBy('nombre_servicio', 'asc') ->get(); $cantidad = Servicio::selectraw('count(id_servicios) as cantidad') ->first(); return view('web-administrador-servicios/crud-servicios', compact('servicios', 'cantidad')); } public function show_crear() { return view("web-administrador-servicios/crear_servicio"); } public function crear_servicios(Request $request) { DB::beginTransaction(); try { $validatedData = $request->validate([ 'nombre' => [ 'required', 'min:10', 'max:500', Rule::unique('servicios', 'nombre_servicio'), ], 'descripcion' => 'required|min:16|max:65000', 'imagenes' => 'required|array', 'imagenes.*' => 'required|file|mimes:jpg,png,jpeg', 'orden' => 'required|array', 'orden.*' => 'required|max:3', 'pregunta' => 'required|array', 'pregunta.*' => 'required|min:1|max:500', 'respuesta' => 'required|array', 'respuesta.*' => 'required|min:1|max:65000', 'orden_p' => 'required|array', 'orden_p.*' => 'required|max:3', ]); $nombre_img = []; $imagenes = $request->file('imagenes'); foreach ($imagenes as $img) { $filename = time() . "-" . $img->getClientOriginalName(); // Almacenar el archivo en el disco de Google Storage::disk('imagenes')->put($filename, file_get_contents($img->getRealPath())); array_push($nombre_img, $filename); } $array_orde = []; $Orden = $request->input('orden'); foreach ($Orden as $option) { array_push($array_orde, $option); } $servicio = new Servicio(); $servicio->nombre_servicio = $request->nombre; $servicio->contenido = $request->descripcion; $servicio->save(); $id_servicios = $servicio->id_servicios; for ($i = 0; $i < count($nombre_img); $i++) { $imagenes = new Servi_imagen(); $imagenes->nombre_archivo = $nombre_img[$i]; $imagenes->orden = $array_orde[$i]; $imagenes->id_servicios = $id_servicios; $imagenes->save(); } $array_preguntas = []; $preguntasdato = $request->input('pregunta'); foreach ($preguntasdato as $option) { array_push($array_preguntas, $option); } $array_respuestas = []; $respuestasdato = $request->input('respuesta'); foreach ($respuestasdato as $option) { array_push($array_respuestas, $option); } $array_orden = []; $ordendato = $request->input('orden_p'); foreach ($ordendato as $option) { array_push($array_orden, $option); } for ($i = 0; $i < count($array_preguntas); $i++) { $datos = new Servi_dato(); $datos->pregunta = $array_preguntas[$i]; $datos->respuesta = $array_respuestas[$i]; $datos->orden = $array_orden[$i]; $datos->id_servicios = $id_servicios; $datos->save(); } DB::commit(); return response()->json(['success' => true, 'message' => 'Creación exitosa!']); } catch (ValidationException $e) { DB::rollback(); return response()->json(['error_validacion' => $e->errors()]); } catch (\Exception $e) { DB::rollback(); Log::error('Algo salió mal: ' . $e->getMessage()); return response()->json(['error' => 'Ha ocurrido un error, intentelo despues']); } } public function destroy($id) { DB::beginTransaction(); // Iniciar transacción try { // Obtener los nombres de los archivos relacionados con el servicio $nombresArchivos = Servi_imagen::where('id_servicios', $id) ->pluck('nombre_archivo'); // Eliminar archivos del sistema de almacenamiento if ($nombresArchivos->isNotEmpty()) { foreach ($nombresArchivos->chunk(100) as $loteArchivos) { Storage::disk('imagenes')->delete($loteArchivos->toArray()); } } // Eliminar el registro del servicio DB::table('servicios')->where('id_servicios', '=', $id)->delete(); DB::commit(); // Confirmar la transacción return response()->json(['success' => true, 'message' => 'Eliminación exitosa!']); } catch (\Exception $e) { DB::rollBack(); // Revertir la transacción en caso de error Log::error('Error al eliminar el servicio: ' . $e->getMessage()); return response()->json(['error' => 'Ha ocurrido un error: ' . $e->getMessage()]); } } public function editar_servicios($id) { $servicios = Servicio::select('id_servicios', 'nombre_servicio', 'contenido') ->where('id_servicios', $id) ->get(); $imagenes = Servi_imagen::select('id_servi_imagenes', 'nombre_archivo', 'orden') ->orderBy('orden', 'asc') ->where('id_servicios', $id) ->get(); $preguntas = Servi_dato::select('id_servi_datos', 'pregunta', 'respuesta', 'orden') ->orderBy('orden', 'asc') ->where('id_servicios', $id) ->get(); return view('web-administrador-servicios/editar-servicios', compact('servicios', 'imagenes', 'preguntas')); } public function crear_editar_servicios(Request $request, $id) { DB::beginTransaction(); try { $validatedData = $request->validate([ 'nombre' => 'required|max:500|unique:servicios,nombre_servicio,' . $id . ',id_servicios', 'descripcion' => 'required|max:65000', 'imagenes.*' => 'required|file|mimes:jpg,png,jpeg', 'orden.*' => 'max:3', 'pregunta.*' => 'required|max:500', 'respuesta.*' => 'required|max:65000', 'orden_p.*' => 'required|max:3', 'eliminar_img.*', 'imagen_nuevoorden.*', 'orden_total.*', ]); $servicio = Servicio::find($id); $servicio->nombre_servicio = $request->nombre; $servicio->contenido = $request->descripcion; $servicio->save(); if ($request->filled('eliminar_img')) { $del_img = $request->input('eliminar_img'); foreach ($del_img as $option) { $delete_img = Servi_imagen::find($option); if ($delete_img) { Storage::disk('imagenes')->delete($delete_img->nombre_archivo); $delete_img->delete(); } } } $delete_pre = Servi_dato::where('id_servicios', $id); if ($delete_pre->exists()) $delete_pre->delete(); $id_servicios = $id; if ($request->hasFile('imagenes')) { $array_orde = []; $Orden = $request->input('orden'); foreach ($Orden as $option) { array_push($array_orde, $option); } $nombre_img = []; $imagenes = $request->file('imagenes'); foreach ($imagenes as $img) { $filename = time() . "-" . $img->getClientOriginalName(); Storage::disk('imagenes')->put($filename, file_get_contents($img->getRealPath())); array_push($nombre_img, $filename); } for ($i = 0; $i < count($nombre_img); $i++) { $imagenes = new Servi_imagen(); $imagenes->nombre_archivo = $nombre_img[$i]; $imagenes->orden = $array_orde[$i]; $imagenes->id_servicios = $id_servicios; $imagenes->save(); } } $ids_imagenes = $request->input('imagen_nuevoorden'); $ordenes_imagenes = $request->input('orden_total'); if (count($ids_imagenes) === count($ordenes_imagenes)) { foreach ($ids_imagenes as $index => $id_imagen) { $imagen = Servi_imagen::find($id_imagen); if ($imagen) { $imagen->orden = $ordenes_imagenes[$index]; $imagen->save(); } } } $array_preguntas = []; $preguntasdato = $request->input('pregunta'); foreach ($preguntasdato as $option) { array_push($array_preguntas, $option); } $array_respuestas = []; $respuestasdato = $request->input('respuesta'); foreach ($respuestasdato as $option) { array_push($array_respuestas, $option); } $array_orden = []; $ordendato = $request->input('orden_p'); foreach ($ordendato as $option) { array_push($array_orden, $option); } for ($i = 0; $i < count($array_preguntas); $i++) { $datos = new Servi_dato(); $datos->pregunta = $array_preguntas[$i]; $datos->respuesta = $array_respuestas[$i]; $datos->orden = $array_orden[$i]; $datos->id_servicios = $id_servicios; $datos->save(); } DB::commit(); return response()->json(['success' => true, 'message' => 'Actualización exitosa!']); } catch (ValidationException $e) { DB::rollback(); return response()->json(['error_validacion' => $e->errors()]); } catch (\Exception $e) { DB::rollback(); return response()->json(['error' => 'Ha ocurrido un error: ' . $e->getMessage()]); } catch (QueryException $e) { DB::rollback(); return response()->json(['error' => 'Error en la base de datos: ' . $e->getMessage()]); } } }