Commit c6a5f856 authored by Alfonso Rafael Solis Rangel's avatar Alfonso Rafael Solis Rangel
Browse files

Metodos de store para redes sociales y numeros de telefonos con validaciones para valores nulos

parent 983b8a8e
Loading
Loading
Loading
Loading
+145 −8
Original line number Diff line number Diff line
@@ -7,6 +7,10 @@
use App\Models\Contacto;
use App\Models\Profesion;
use App\Models\Subgrupo;
use App\Models\Telefono;
use App\Models\RedesSociales;   

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

@@ -45,6 +49,23 @@ public function store(Request $request)
            'nombre' => 'required|max:255|string',
        ]);

        $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', 'tipo_red_social']);
        $redesSocialesData = array_map(function ($item) {
            return array_map(function ($value) {
                return ($value === "null") ? null : $value;
            }, $item);
        }, $redesSocialesData);

        DB::beginTransaction();

        try{
            $path_file = $this->storeProfilePicture($request);
            $data = $request->all();

@@ -53,8 +74,30 @@ public function store(Request $request)
            }

            $contacto = Contacto::create($data);
            // Manejar los datos de teléfonos
            $telefonosGuardados = $this->storeTelefonos($contacto->id, $telefonosData);

             // Manejar los datos de redes sociales
             $redesSocialesGuardadas = $this->storeRedesSociales($contacto->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();
            
            dd($data);
        }catch (\Exception $e){
            DB::rollBack();
            return redirect()->back()->withErrors(['error' => 'Hubo un problema al crear el contacto: ' . $e->getMessage()]);
        }
    }

    /**
@@ -117,4 +160,98 @@ private function storeProfilePicture(Request $request)
        // Retornar null si no hay archivo
        return null;
    }

    private function storeTelefonos($contactoId, $telefonosData)
    {
        $telefonos = [];

        foreach ($telefonosData['numero'] as $index => $numero) {
            // Verificar si todos los campos del teléfono están vacíos (null o "null")
            $isEmpty = true;
            foreach ($telefonosData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    $isEmpty = false;
                    break;
                }
            }

            if (!$isEmpty) {
                $telefonos[] = [
                    'contacto_id' => $contactoId,
                    'prefijo' => $telefonosData['prefijo'][$index],
                    'lada' => $telefonosData['lada'][$index],
                    'numero' => $numero,
                    'tipo' => $telefonosData['tipo'][$index],
                    'estatus' => $telefonosData['estatus'][$index],
                    'ext' => $telefonosData['ext'][$index],
                    'id_radio' => $telefonosData['id_radio'][$index],
                    'observaciones' => $telefonosData['observaciones'][$index],
                ];
            }
        }

        if (!empty($telefonos)) {
            Telefono::insert($telefonos);
            return true;
        }

        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($contactoId, $redesSocialesData)
    {
        $redesSociales = [];

        foreach ($redesSocialesData['red_social'] 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[] = [
                    'contacto_id' => $contactoId,
                    'red_social' => $redSocial,
                    'tipo_red_social' => $redesSocialesData['tipo_red_social'][$index],
                ];
            }
        }

        if (!empty($redesSociales)) {
            RedesSociales::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;
    }
}