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

Auditoria

parent 8ee62ec2
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
<?php

namespace App\Http\Controllers;

use App\Models\Auditoria;
use Illuminate\Http\Request;

class AuditoriaController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(Auditoria $auditoria)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Auditoria $auditoria)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Auditoria $auditoria)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Auditoria $auditoria)
    {
        //
    }
}
+121 −45
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace App\Http\Controllers;

use App\Models\Auditoria;
use App\Models\Caracteristicas;
use App\Models\cargos;
use App\Models\Contacto;
@@ -165,6 +166,7 @@ public function edit(string $id)

    /**
     * Update the specified resource in storage.
     * TODO: Falta terminar de hacer pruebas a la funcionalidad de auditoria
     */
    public function update(Request $request, string $id)
    {
@@ -173,7 +175,9 @@ public function update(Request $request, string $id)
            'nombre' => 'required|string|max:255',
            'foto_perfil' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);
    
        $contacto = Contacto::findOrFail($id);
        $user = auth()->user();
    
        $fieldsToCheck = [
            'conyuge_id',
@@ -194,6 +198,108 @@ public function update(Request $request, string $id)
    
        $request->replace($requestData);
    
        // Guardar auditoría de campos simples
        $changes = [];
        foreach ($requestData as $key => $value) {
            if (!is_array($value) && $key !== '_token' && $contacto->$key != $value) {
                $changes[] = [
                    'campo_editado' => $key,
                    'valor_anterior' => $contacto->$key,
                    'nuevo_valor' => $value,
                    'contacto_id' => $contacto->id,
                    'user_id' => $user->id,
                    'created_at' => now(),
                    'updated_at' => now(),
                ];
            }
        }
    
        // Guardar auditoría de teléfonos
        $telefonosAnteriores = $contacto->telefonos->toArray();
        $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) {
            return [
                'prefijo' => $prefijo,
                'lada' => $request->input('lada')[$index],
                'numero' => $request->input('numero')[$index],
                'tipo' => $request->input('tipo')[$index],
                'estatus' => $request->input('estatus')[$index],
                'ext' => $request->input('ext')[$index],
                'id_radio' => $request->input('id_radio')[$index],
                'observaciones' => $request->input('observaciones')[$index],
            ];
        })->toArray();
    
        foreach ($telefonosAnteriores as $index => $telefonoAnterior) {
            foreach ($telefonoAnterior as $key => $value) {
                if (isset($telefonos[$index][$key]) && $value != $telefonos[$index][$key]) {
                    $changes[] = [
                        'campo_editado' => "telefono_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $telefonos[$index][$key],
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
                        'updated_at' => now(),
                    ];
                }
            }
        }
    
        // Guardar auditoría de redes sociales
        $redesAnteriores = $contacto->redes->toArray();
        $redes = collect($request->input('red_social'))->map(function($url, $index) use ($request) {
            return [
                'red_social' => $url,
                'tipo_red_social' => $request->input('tipo_red_social')[$index],
            ];
        })->toArray();
    
        foreach ($redesAnteriores as $index => $redAnterior) {
            foreach ($redAnterior as $key => $value) {
                if (isset($redes[$index][$key]) && $value != $redes[$index][$key]) {
                    $changes[] = [
                        'campo_editado' => "red_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $redes[$index][$key],
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
                        'updated_at' => now(),
                    ];
                }
            }
        }
    
        // Guardar auditoría de correos
        $correosAnteriores = $contacto->correos->toArray();
        $correos = collect($request->input('correo_electronico'))->map(function($email, $index) use ($request) {
            return [
                'correo_electronico' => $email,
                'tipo_correo_electronico' => $request->input('tipo_correo_electronico')[$index],
            ];
        })->toArray();
    
        foreach ($correosAnteriores as $index => $correoAnterior) {
            foreach ($correoAnterior as $key => $value) {
                if (isset($correos[$index][$key]) && $value != $correos[$index][$key]) {
                    $changes[] = [
                        'campo_editado' => "correo_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $correos[$index][$key],
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
                        'updated_at' => now(),
                    ];
                }
            }
        }
    
        if (!empty($changes)) {
            Auditoria::insert($changes);
        }
    
        // Actualizar los datos del contacto
        $contacto->conyuge_id = $request->input('conyuge_id') !== 'null' ? $request->input('conyuge_id') : null;
        $contacto->profesion_id = $request->input('profesion_id') !== 'null' ? $request->input('profesion_id') : null;
        $contacto->cargo_id = $request->input('cargo_id') !== 'null' ? $request->input('cargo_id') : null;
@@ -217,50 +323,20 @@ public function update(Request $request, string $id)
            }
        }
    
        

        // Actualizar los datos del usuario
        $contacto->update($data);
    

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

        $contacto->telefonos()->delete();
        $contacto->telefonos()->createMany($telefonos->toArray());
        $contacto->telefonos()->createMany($telefonos);
    
        // Guardar redes sociales
        $redes = collect($request->input('red_social'))->map(function($url, $index) use ($request) {
            return [
                'red_social' => $url,
                'tipo_red_social' => $request->input('tipo_red_social')[$index],
            ];
        });

        $contacto->redes()->delete();
        $contacto->redes()->createMany($redes->toArray());
        $contacto->redes()->createMany($redes);
    
        // Guardar correos electrónicos
        $correos = collect($request->input('correo_electronico'))->map(function($email, $index) use ($request) {
            return [
                'correo_electronico' => $email,
                'tipo_correo_electronico' => $request->input('tipo_correo_electronico')[$index],
            ];
        });

        $contacto->correos()->delete();
        $contacto->correos()->createMany($correos->toArray());
        $contacto->correos()->createMany($correos);
    
        return redirect()->route('contacto.get')->with('success', 'Contacto actualizado correctamente');
    }
+29 −0
Original line number Diff line number Diff line
<?php

namespace App\Models;

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

class Auditoria extends Model
{
    use HasFactory;

    protected $fillable = [
        'campo_editado',
        'valor_anterior',
        'nuevo_valor',
        'contacto_id',
        'user_id',
    ];

    public function contacto()
    {
        return $this->belongsTo(Contacto::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
+35 −0
Original line number Diff line number Diff line
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('auditorias', function (Blueprint $table) {
            $table->id();
            $table->string('campo_editado');
            $table->text('valor_anterior')->nullable();
            $table->text('nuevo_valor')->nullable();
            $table->unsignedBigInteger('contacto_id');
            $table->unsignedBigInteger('user_id');
            $table->timestamps();

            $table->foreign('contacto_id')->references('id')->on('contactos')->onDelete('cascade');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('auditorias');
    }
};
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@
Route::middleware('auth:sanctum',
    config('jetstream.auth_session'),
    'verified',
    CheckBanned::class, CheckRoles::class . ':adminGen')->name('usuarios.')->group(function () {
    CheckBanned::class, CheckRoles::class . ':admingen')->name('usuarios.')->group(function () {
    Route::get('/administracion/usuarios', [UserController::class, 'index'])->name('get');
    Route::get('/administracion/usuarios/crear', [UserController::class, 'create'])->name('create');
    Route::post('/administracion/usuarios/crear', [UserController::class, 'store'])->name('store');