Loading app/Http/Controllers/AuditoriaController.php 0 → 100644 +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) { // } } app/Http/Controllers/ContactoController.php +121 −45 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace App\Http\Controllers; use App\Models\Auditoria; use App\Models\Caracteristicas; use App\Models\cargos; use App\Models\Contacto; Loading Loading @@ -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) { Loading @@ -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', Loading @@ -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; Loading @@ -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'); } Loading app/Models/Auditoria.php 0 → 100644 +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); } } database/migrations/2024_07_03_145858_create_auditorias_table.php 0 → 100644 +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'); } }; routes/web.php +1 −1 Original line number Diff line number Diff line Loading @@ -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'); Loading Loading
app/Http/Controllers/AuditoriaController.php 0 → 100644 +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) { // } }
app/Http/Controllers/ContactoController.php +121 −45 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace App\Http\Controllers; use App\Models\Auditoria; use App\Models\Caracteristicas; use App\Models\cargos; use App\Models\Contacto; Loading Loading @@ -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) { Loading @@ -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', Loading @@ -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; Loading @@ -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'); } Loading
app/Models/Auditoria.php 0 → 100644 +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); } }
database/migrations/2024_07_03_145858_create_auditorias_table.php 0 → 100644 +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'); } };
routes/web.php +1 −1 Original line number Diff line number Diff line Loading @@ -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'); Loading