Commit 63c40130 authored by alekeyrivas's avatar alekeyrivas
Browse files

Arreglo de errores en crear y editar instituciones

parent 72bfd847
Loading
Loading
Loading
Loading
+101 −12
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;

class InstitucionesController extends Controller
{
@@ -29,6 +30,7 @@ public function create()
    public function store(Request $request)
    {
        // Validación de los datos del formulario
        
        $request->validate([
            'nombre' => 'required|string|max:255',
            'RFC' => 'nullable|string|max:13',
@@ -40,13 +42,24 @@ public function store(Request $request)
            'imagen' => 'nullable|file|image|max:2048',
        ]);
    
        // Depuración: inspeccionar los datos recibidos
        //\Log::info('Datos recibidos:', $data);
        $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']);
        $telefonosData = array_map(function ($item) {
            return array_map(function ($value) {
                return ($value === "null") ? null : $value;
            }, $item);
        }, $telefonosData);

        $redesSocialesData = $request->only(['red_social_inst', 'link_inst', 'tipo_RS_inst']);
        $redesSocialesData = array_map(function ($item) {
            return array_map(function ($value) {
                return ($value === "null") ? null : $value;
            }, $item);
        }, $redesSocialesData);
    
        // Procesamiento y almacenamiento de la institución
        DB::beginTransaction();
        try {
            //$path_file = $this->storeProfilePicture($request);
            $path_file = $this->storeProfilePicture($request);
            $fieldsToCheck = [
                'subgrupo_id',
            ];
@@ -56,19 +69,36 @@ public function store(Request $request)
                    unset($requestData[$field]);
                }
            }

            $request->replace($requestData);

            $data = $request->all();

            // Crear la institución con los datos recibidos

            if ($path_file) {
                $data['imagen'] = 'storage/' . $path_file;
            }else{
                $data['imagen'] = 'assets/images/instituciones_icon.webp';
            }

            $institucion = Instituciones::create($data);
            // Manejar los datos de teléfonos

            // Manejar los datos de teléfonos
            if (!empty($data['telefonos'])) {
                $this->storeTelefonos($institucion->id, $data['telefonos']);
            }
            $telefonosGuardados = $this->storeTelefonos($institucion->id, $telefonosData);

            // Manejar los datos de redes sociales
            if (!empty($data['redes_sociales'])) {
                $this->storeRedesSociales($institucion->id, $data['redes_sociales']);
            $redesSocialesGuardadas = $this->storeRedesSociales($institucion->id, $redesSocialesData);

            // Si había datos de teléfonos y no se guardaron, lanzar excepción
            if ($telefonosGuardados === false && $this->telefonoDataPresent($telefonosData)) {
                throw new \Exception('Error al guardar los teléfonos');
            }

            // Si había datos de redes sociales y no se guardaron, lanzar excepción
            if ($redesSocialesGuardadas === false && $this->redSocialDataPresent($redesSocialesData)) {
                throw new \Exception('Error al guardar las redes sociales');
            }

            DB::commit();
@@ -81,6 +111,7 @@ public function store(Request $request)

    public function show(string $id)
    {
        $instituciones = Instituciones::findOrFail($id);
        return view('adminGen.instituciones.show', compact('instituciones'));
    }

@@ -179,7 +210,7 @@ public function destroy(string $id)
    {
        try {
            $instituciones = Instituciones::findOrFail($id);
            $instituciones->redesSocialesInst()->delete(); // Cambio aquí
            $instituciones->redesSocialesInst()->delete(); 
            $instituciones->delete();
            return redirect()->route('instituciones.get')->with('success', 'Institución eliminada correctamente.');
        } catch(\Exception $e) {
@@ -250,6 +281,64 @@ private function storeTelefonos($institucionId, $telefonosData)
        return false;
    }

    private function telefonoDataPresent($telefonosData)
    {
        foreach ($telefonosData['numero'] as $index => $numero) {
            foreach ($telefonosData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    return true;
                }
            }
        }

        return false;
    }

    private function storeRedesSociales($institucionesId, $redesSocialesData)
    {
        $redesSociales = [];

        foreach ($redesSocialesData['red_social_inst'] as $index => $redSocial) {
            // Verificar si todos los campos de la red social están vacíos (null o "null")
            $isEmpty = true;
            foreach ($redesSocialesData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    $isEmpty = false;
                    break;
                }
            }

            if (!$isEmpty) {
                $redesSociales[] = [
                    'instituciones_id' => $institucionesId,
                    'red_social_inst' =>$redesSocialesData['red_social_inst'][$index],
                    'link_inst' => $redesSocialesData['link_inst'][$index],
                    'tipo_RS_inst' => $redesSocialesData['tipo_RS_inst'][$index],
                ];
            }
        }

        if (!empty($redesSociales)) {
            RedesSocialesInst::insert($redesSociales);
            return true;
        }

        return false;
    }

    private function redSocialDataPresent($redesSocialesData)
    {
        foreach ($redesSocialesData['red_social'] as $index => $redSocial) {
            foreach ($redesSocialesData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    return true;
                }
            }
        }

        return false;
    }


    private function storeProfilePicture(Request $request)
    {
+3.56 KiB
Loading image diff...
+18 −211

File changed.

Preview size limit exceeded, changes collapsed.

+3 −7
Original line number Diff line number Diff line
<x-layout.auth>
    <div x-data="auth">
        <div class="absolute inset-0">
            <img src="/assets/images/auth/bg-gradient.png" alt="image" class="h-full w-full object-cover" />
        </div>
        <div class="relative flex min-h-screen items-center justify-center bg-[url(/assets/images/auth/map.png)] bg-cover bg-center bg-no-repeat px-6 py-10 dark:bg-[#060818] sm:px-16">
            <img src="/assets/images/auth/coming-soon-object1.png" alt="image" class="absolute left-0 top-1/2 h-full max-h-[893px] -translate-y-1/2" />
            <img src="/assets/images/auth/coming-soon-object2.png" alt="image" class="absolute left-24 top-0 h-40 md:left-[30%]" />
            <img src="/assets/images/auth/coming-soon-object3.png" alt="image" class="absolute right-0 top-0 h-[300px]" />
            <img src="/assets/images/auth/polygon-object.svg" alt="image" class="absolute bottom-0 end-[28%]" />

            <div class="relative w-full max-w-[870px] rounded-md bg-[linear-gradient(45deg,#fff9f9_0%,rgba(255,255,255,0)_25%,rgba(255,255,255,0)_75%,_#fff9f9_100%)] p-2 dark:bg-[linear-gradient(52.22deg,#0E1726_0%,rgba(14,23,38,0)_18.66%,rgba(14,23,38,0)_51.04%,rgba(14,23,38,0)_80.07%,#0E1726_100%)]">
                <div class="relative flex flex-col justify-center rounded-md bg-white/60 backdrop-blur-lg dark:bg-black/50 px-6 lg:min-h-[758px] py-20">
                    <div class="mx-auto w-full max-w-[440px]">
                        <div class="mb-10">
                            <h1 class="text-3xl font-extrabold uppercase !leading-snug text-primary md:text-4xl">Bienvenidos</h1>
                            <p class="text-base font-bold leading-normal text-white-dark">Ingresa tu usuario y contraseña para iniciar sesión.</p>
                            <h1 class="text-3xl font-extrabold uppercase !leading-snug md:text-4xl" style="color: #781005;">Bienvenidos</h1>
                            <p class="text-base font-bold leading-normal text-white-dark "style="color: black;">Ingresa tu usuario y contraseña para iniciar sesión.</p>
                        </div>
                        @if ($errors->any())
                            <div class="mb-4">