Commit 02f8df62 authored by alekeyrivas's avatar alekeyrivas
Browse files

Ya funciona el creat y el index, faltan detalles al editar

parent 873daf18
Loading
Loading
Loading
Loading
+204 −48
Original line number Diff line number Diff line
@@ -6,7 +6,11 @@
use App\Models\TelefonoInst;
use App\Models\RedesSocialesInst;
use App\Models\Subgrupo;

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

class InstitucionesController extends Controller
{
@@ -18,86 +22,238 @@ public function index()

    public function create()
    {
        $subgrupos = Subgrupo::all();
        $subgrupos = Subgrupo::get();
        return view('adminGen.instituciones.create', compact('subgrupos'));
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'imagen' => 'nullable|string',
            'nombre' => 'required|string',
            'RFC' => 'nullable|string',
        // Validación de los datos del formulario
        $request->validate([
            'nombre' => 'required|string|max:255',
            'RFC' => 'nullable|string|max:13',
            'aniversario' => 'nullable|date',
            'observaciones_inst' => 'nullable|string',
            'domicilio' => 'nullable|string',
            'codigo_postal' => 'nullable|integer',
            'localidad' => 'nullable|string',
            'aniversario' => 'nullable|date',
            'observaciones' => 'nullable|string',
            'subgrupo_id' => 'nullable|integer',
            'telefonos' => 'array',
            'redesSociales' => 'array'
            'imagen' => 'nullable|file|image|max:2048',
        ]);
    
        $institucion = Institucion::create($data);
        // Depuración: inspeccionar los datos recibidos
        //\Log::info('Datos recibidos:', $data);
    
        // Procesamiento y almacenamiento de la institución
        DB::beginTransaction();
        try {
            //$path_file = $this->storeProfilePicture($request);
            $fieldsToCheck = [
                'subgrupo_id',
            ];
            $requestData = $request->all();
            foreach ($fieldsToCheck as $field) {
                if (isset($requestData[$field]) && $requestData[$field] === "null") {
                    unset($requestData[$field]);
                }
            }
            $request->replace($requestData);
            $data = $request->all();
            // Crear la institución con los datos recibidos
            $institucion = Instituciones::create($data);
    
        foreach ($data['telefonos'] as $telefono) {
            $institucion->telefonos()->create($telefono);
            // Manejar los datos de teléfonos
            if (!empty($data['telefonos'])) {
                $this->storeTelefonos($institucion->id, $data['telefonos']);
            }
    
        foreach ($data['redesSociales'] as $redSocial) {
            $institucion->redesSociales()->create($redSocial);
            // Manejar los datos de redes sociales
            if (!empty($data['redes_sociales'])) {
                $this->storeRedesSociales($institucion->id, $data['redes_sociales']);
            }
    
        return redirect()->route('instituciones.index');
            DB::commit();
            return redirect()->route('instituciones.get')->with('success', 'Institución guardada correctamente');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->route('instituciones.create')->withErrors('Hubo un problema al crear la institución: ' . $e->getMessage());
        }
    }

    public function show(Institucion $institucion)
    public function show(Instituciones $instituciones)
    {
        return view('instituciones.show', compact('institucion'));
        //
    }

    public function edit(Institucion $institucion)
    public function edit(string $id)
    {
        return view('instituciones.edit', compact('institucion'));
        $subgrupos = Subgrupo::all();
        $instituciones = Instituciones::findOrFail($id);
        $instituciones->load('redesSocialesInst'); // Cargar relaciones si son necesarias
    
        // Puedes acceder a las redes sociales cargadas así:
        $redes = $instituciones->redesSocialesInst; // Esto te dará una colección de redes sociales
    
        return view('adminGen.instituciones.edit', compact('instituciones', 'subgrupos', 'redes'));
    }

    public function update(Request $request, Institucion $institucion)
    public function update(Request $request, string $id)
    {
        $data = $request->validate([
            'imagen' => 'nullable|string',
            'nombre' => 'required|string',
            'RFC' => 'nullable|string',
            'domicilio' => 'nullable|string',
            'codigo_postal' => 'nullable|integer',
            'localidad' => 'nullable|string',
            'aniversario' => 'nullable|date',
            'observaciones' => 'nullable|string',
            'subgrupo_id' => 'nullable|integer',
            'telefonos' => 'array',
            'redesSociales' => 'array'
        // Validar los datos
        $validatedData = $request->validate([
            'nombre' => 'required|string|max:255',
            'imagen' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);
    
        $institucion->update($data);
        $instituciones = Instituciones::findOrFail($id);
        $instituciones->update($validatedData);

        if ($request->hasFile('imagen')) {
            // Eliminar la foto de perfil anterior si existe
            if ($instituciones->imagen) {
                Storage::delete('public/' . $instituciones->imagen);
            }
    
            // Guardar la nueva foto de perfil
            $path_file = $this->storeProfilePicture($request);
            $instituciones->imagen = $path_file;
        }

        // Actualizar los datos del usuario
        $instituciones->update($validatedData);

        // Manejar los teléfonos
        if ($request->has('prefijo')) {
            $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) {
                return [
                    'prefijo' => $prefijo,
                    'lada' => $request->input('lada')[$index] ?? null,
                    'numero' => $request->input('numero')[$index] ?? null,
                    'tipo' => $request->input('tipo')[$index] ?? null,
                    'estatus' => $request->input('estatus')[$index] ?? null,
                    'ext' => $request->input('ext')[$index] ?? null,
                    'id_radio' => $request->input('id_radio')[$index] ?? null,
                    'observaciones' => $request->input('observaciones')[$index] ?? null,
                ];
            })->toArray();

            $instituciones->telefonos()->delete();
            $instituciones->telefonos()->createMany($telefonos);
        }

        // Guardar redes sociales
        $redes = collect($request->input('link_inst'))->map(function($url, $index) use ($request) {
            return [
                'red_social_inst' => $request->input('red_social_inst')[$index], // Debe ser el username
                'link_inst' => $url, // Debe ser la URL de la red social
                'tipo_RS_inst' => $request->input('tipo_red_social')[$index], // Tipo de red social
            ];
        });

        $instituciones->redesSocialesInst()->delete();
        $instituciones->redesSocialesInst()->createMany($redes->toArray());

        return redirect()->route('instituciones.get')->with('success', 'Institución actualizada correctamente');
    }

    public function destroy(string $id)
    {
        try {
            $instituciones = Instituciones::findOrFail($id);
            $instituciones->redesSocialesInst()->delete(); // Cambio aquí
            $instituciones->delete();
            return redirect()->route('instituciones.get')->with('success', 'Institución eliminada correctamente.');
        } catch(\Exception $e) {
            return redirect()->route('instituciones.get')->withErrors('Error al eliminar la institución.');
        }
    }

    private function storeInstPicture(Request $request)
    {
        if ($request->hasFile('imagen')) {
            // Obtener el archivo de la solicitud
            $file = $request->file('imagen');

            // Generar un UUID de versión 4
            $uuid = Str::uuid()->toString();

        $institucion->telefonos()->delete();
        foreach ($data['telefonos'] as $telefono) {
            $institucion->telefonos()->create($telefono);
            // Obtener la extensión del archivo
            $extension = $file->getClientOriginalExtension();

            // Crear el nuevo nombre de archivo
            $filename = $uuid . '.' . $extension;

            // Almacenar el archivo en el directorio storage/app/public/fotos_perfil
            $path = $file->storeAs('public/imagen', $filename);

            // Retornar la ruta del archivo sin el prefijo 'public/'
            return str_replace('public/', '', $path);
        }

        $institucion->redesSociales()->delete();
        foreach ($data['redesSociales'] as $redSocial) {
            $institucion->redesSociales()->create($redSocial);
        // Retornar null si no hay archivo
        return null;
    }

        return redirect()->route('instituciones.index');
    private function storeTelefonos($institucionId, $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;
                }
            }

    public function destroy(Institucion $institucion)
            if (!$isEmpty) {
                $telefonos[] = [
                    'instituciones_id' => $institucionId,
                    '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)) {
            TelefonoInst::insert($telefonos);
            return true;
        }

        return false;
    }


    private function storeProfilePicture(Request $request)
    {
        $institucion->telefonos()->delete();
        $institucion->redesSociales()->delete();
        $institucion->delete();
        if ($request->hasFile('imagen')) {
            // Obtener el archivo de la solicitud
            $file = $request->file('imagen');

            // Generar un UUID de versión 4
            $uuid = Str::uuid()->toString();

            // Obtener la extensión del archivo
            $extension = $file->getClientOriginalExtension();

            // Crear el nuevo nombre de archivo
            $filename = $uuid . '.' . $extension;

            // Almacenar el archivo en el directorio storage/app/public/imagen
            $path = $file->storeAs('public/imagen', $filename);

            // Retornar la ruta del archivo sin el prefijo 'public/'
            return str_replace('public/', '', $path);
        }

        return redirect()->route('instituciones.index');
        // Retornar null si no hay archivo
        return null;
    }
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ class Instituciones extends Model
        'codigo_postal', 
        'localidad', 
        'aniversario', 
        'observaciones', 
        'observaciones_inst', 
        'subgrupo_id'
    ];

@@ -26,7 +26,7 @@ public function subgrupo()
        return $this->belongsTo(Subgrupo::class);
    }

    public function redesSociales()
    public function redesSocialesInst()
    {
        return $this->hasMany(RedesSocialesInst::class, 'instituciones_id');
    }
+5 −5
Original line number Diff line number Diff line
@@ -10,14 +10,14 @@ class RedesSocialesInst extends Model
    use HasFactory;

    protected $fillable = [
        'nombre',
        'link',
        'tipo',
        'instituciones_id'
        'instituciones_id',
        'red_social_inst',
        'link_inst', 
        'tipo_RS_inst'
    ];

    public function institucion()
    {
        return $this->belongsTo(Institucion::class, 'instituciones_id');
        return $this->belongsTo(Instituciones::class, 'instituciones_id');
    }
}
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -23,6 +23,6 @@ class TelefonoInst extends Model

    public function institucion()
    {
        return $this->belongsTo(Institucion::class);
        return $this->belongsTo(Instituciones::class, 'instituciones_id');
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ public function up(): void
            $table->integer('codigo_postal')->nullable();
            $table->string('localidad')->nullable();
            $table->date('aniversario')->nullable();
            $table->string('observaciones')->nullable();
            $table->string('observaciones_inst')->nullable();
            $table->timestamps();

            $table->unsignedBigInteger('subgrupo_id')->nullable();
Loading