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

Merge branch 'listas' into 'main'

Listas

See merge request !24
parents 6aac179f 04824d8f
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
use App\Models\cargos;
use App\Models\Contacto;
use App\Models\CorreoContactos;
use App\Models\Grupos;
use App\Models\Profesion;
use App\Models\Subgrupo;
use App\Models\Telefono;
@@ -40,7 +41,8 @@ public function create()
        $cargos = cargos::get();
        $caracteristicas = Caracteristicas::get();
        $subgrupos = Subgrupo::get();
        return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos'));
        $grupos = Grupos::get();
        return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos', 'grupos'));
    }

    /**
@@ -51,6 +53,7 @@ public function store(Request $request)
        $request->validate([
            'foto_perfil' => 'image|mimes:jpeg,png,jpg,gif|max:2048',
            'nombre' => 'required|max:255|string',
            'ap_paterno' => 'required|max:255|string',
        ]);

        $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']);
@@ -84,7 +87,6 @@ public function store(Request $request)
                'profesion_id',
                'cargo_id',
                'caracteristica_id',
                'subgrupo_id',
                'mes_cump',
                'dia_cump',
                //institucion_id
@@ -95,7 +97,6 @@ public function store(Request $request)
                    unset($requestData[$field]);
                }
            }

            $request->replace($requestData);

            $data = $request->all();
@@ -132,6 +133,15 @@ public function store(Request $request)
                throw new \Exception('Error al guardar los correos electrónicos');
            }

            // Sincronizar subgrupos y grupos
            if ($request->has('subgrupo_id')) {
                $contacto->subgrupos()->sync($request->input('subgrupo_id'));
            }

            if ($request->has('grupo_id')) {
                $contacto->grupos()->sync($request->input('grupo_id'));
            }

            DB::commit();
            return redirect()->route('contacto.get')->with('success', 'Contacto guardado correctamente');
        }catch (\Exception $e){
+119 −0
Original line number Diff line number Diff line
<?php

namespace App\Http\Controllers;

use App\Models\Contacto;
use App\Models\Grupos;
use App\Models\Lista;
use App\Models\Subgrupo;
use Illuminate\Http\Request;

class ListaController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $listas = Lista::get();
        return view('adminGen.listas.index', compact('listas'));
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $contactos = Contacto::get();
        $grupos = Grupos::get();
        $subgrupos = Subgrupo::get();
        return view('adminGen.listas.create', compact('contactos', 'grupos', 'subgrupos'));
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $request->validate([
            'nombre' => 'required|string|max:255',
        ]);

        $lista = Lista::create($request->only('nombre'));

        $grupoIds = array_filter($request->input('grupo_id', []), fn($value) => $value !== 'null');
        $subgrupoIds = array_filter($request->input('subgrupo_id', []), fn($value) => $value !== 'null');
        $contactoIds = array_filter($request->input('contacto_id', []), fn($value) => $value !== 'null');

        // Sincronizar relaciones
        $lista->grupos()->sync($grupoIds);
        $lista->subgrupos()->sync($subgrupoIds);
        $lista->contactos()->sync($contactoIds);
    
        return redirect()->route('listas.get')->with('success', 'Lista creada correctamente.');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        $lista = Lista::with('contactos', 'grupos', 'subgrupos')->findOrFail($id);
        return view('adminGen.listas.show', compact('lista'));
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        $contactos = Contacto::get();
        $grupos = Grupos::get();
        $subgrupos = Subgrupo::get();
        $lista = Lista::with('contactos', 'grupos', 'subgrupos')->findOrFail($id);
        return view('adminGen.listas.edit', compact('lista', 'contactos', 'grupos', 'subgrupos'));
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        // Validar solo los campos necesarios
        $request->validate([
            'nombre' => 'required|string|max:255',
        ]);

        // Recuperar la lista existente
        $lista = Lista::findOrFail($id);

        // Actualizar el nombre
        $lista->update($request->only('nombre'));

        // Filtrar valores null y cadenas "null" antes de sincronizar
        $grupoIds = array_filter($request->input('grupo_id', []), fn($value) => $value !== 'null');
        $subgrupoIds = array_filter($request->input('subgrupo_id', []), fn($value) => $value !== 'null');
        $contactoIds = array_filter($request->input('contacto_id', []), fn($value) => $value !== 'null');

        // Sincronizar relaciones
        $lista->grupos()->sync($grupoIds);
        $lista->subgrupos()->sync($subgrupoIds);
        $lista->contactos()->sync($contactoIds);

        return redirect()->route('listas.get')->with('success', 'Lista actualizada correctamente.');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        try{
            $lista = Lista::findOrFail($id);
            $lista->delete();
            return redirect()->route('listas.get')->with('success', 'Lista eliminada correctamente.');
        }catch(\Exception $e){
            return redirect()->route('contacto.get')->withErrors('Error al eliminar la lista.');
        }
    }
}
+20 −4
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Contacto extends Model
{
@@ -38,7 +40,6 @@ class Contacto extends Model
        'cargo_id',
        'caracteristica_id',
        //'institucion_id',
        'subgrupo_id',
    ];

    public function profesion(): BelongsTo
@@ -56,18 +57,33 @@ public function cargo(): BelongsTo
        return $this->belongsTo(cargos::class);
    }

    public function telefonos()
    public function telefonos(): HasMany
    {
        return $this->hasMany(Telefono::class);
    }

    public function redes()
    public function redes(): HasMany
    {
        return $this->hasMany(RedesSociales::class);
    }

    public function correos()
    public function correos(): HasMany
    {
        return $this->hasMany(CorreoContactos::class);
    }

    public function listas(): BelongsToMany
    {
        return $this->belongsToMany(Lista::class, 'listas_contactos', 'contacto_id', 'lista_id');
    }

    public function subgrupos(): BelongsToMany
    {
        return $this->belongsToMany(Subgrupo::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id');
    }

    public function grupos(): BelongsToMany
    {
        return $this->belongsToMany(Grupos::class, 'contactos_grupos', 'contacto_id', 'grupo_id');
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Grupos extends Model
{
@@ -20,5 +22,15 @@ public function users(): HasMany {
        
    }

    public function listas(): BelongsToMany
    {
        return $this->belongsToMany(Lista::class, 'listas_grupos', 'grupo_id', 'lista_id');
    }

    public function contactos(): BelongsToMany
    {
        return $this->belongsToMany(Contacto::class, 'contactos_grupos', 'contacto_id', 'grupo_id');
    }
    
    public $timestamps = false;
}

app/Models/Lista.php

0 → 100644
+30 −0
Original line number Diff line number Diff line
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class Lista extends Model
{
    use HasFactory;
    protected $fillable = [
        'nombre',
    ];

    public function contactos(): BelongsToMany
    {
        return $this->belongsToMany(Contacto::class, 'listas_contactos', 'lista_id', 'contacto_id');
    }

    public function grupos(): BelongsToMany
    {
        return $this->belongsToMany(Grupos::class, 'listas_grupos', 'lista_id', 'grupo_id');
    }

    public function subgrupos(): BelongsToMany
    {
        return $this->belongsToMany(Subgrupo::class, 'listas_subgrupos', 'lista_id', 'subgrupo_id');
    }
}
Loading