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

Funcion de auditoria mejorada, almacenando los datos que fueron cambiados

parent 31c0a144
Loading
Loading
Loading
Loading
+48 −33
Original line number Diff line number Diff line
@@ -227,8 +227,8 @@ public function update(Request $request, string $id)
        }
    
        // Guardar auditoría de teléfonos
        $telefonosAnteriores = $contacto->telefonos->toArray();
        $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) {
        $telefonosAnteriores = collect($contacto->telefonos);
        $telefonosNuevos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) {
            return [
                'prefijo' => $prefijo,
                'lada' => $request->input('lada')[$index],
@@ -239,15 +239,22 @@ public function update(Request $request, string $id)
                '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]) {
        // Unificar comparación entre teléfonos anteriores y nuevos
        $telefonosNuevos->each(function ($telefonoNuevo, $index) use ($telefonosAnteriores, &$changes, $contacto, $user) {
            // Asegurarse de que $telefonosAnteriores sea accesible y no usar get(), ya que es un array simple
            $telefonoAnterior = $telefonosAnteriores[$index] ?? []; // Si no hay un teléfono anterior en ese índice, usa un array vacío
        
            foreach ($telefonoNuevo as $key => $nuevoValor) {
                $valorAnterior = $telefonoAnterior[$key] ?? null; // Usa null si no existe el valor anterior
        
                // Solo registrar cambios si hay una diferencia
                if (strval($valorAnterior) !== $nuevoValor) {
                    $changes[] = [
                        'campo_editado' => "telefono_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $telefonos[$index][$key],
                        'valor_anterior' => $valorAnterior,
                        'nuevo_valor' => $nuevoValor,
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
@@ -255,24 +262,28 @@ public function update(Request $request, string $id)
                    ];
                }
            }
        }
        });
    
        // Guardar auditoría de redes sociales
        $redesAnteriores = $contacto->redes->toArray();
        $redes = collect($request->input('red_social'))->map(function($url, $index) use ($request) {
        $redesAnteriores = collect($contacto->redes);
        $redesNuevos = 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();
        });

        $redesNuevos->each(function ($redNuevo, $index) use ($redesAnteriores, &$changes, $contacto, $user){
            $redAnterior = $redesAnteriores->get($index, []);

            foreach ($redNuevo as $key => $nuevoValor){
                $valorAnterior = $redAnterior[$key] ?? null;

        foreach ($redesAnteriores as $index => $redAnterior) {
            foreach ($redAnterior as $key => $value) {
                if (isset($redes[$index][$key]) && $value != $redes[$index][$key]) {
                if(strval($valorAnterior) !== $nuevoValor){
                    $changes[] = [
                        'campo_editado' => "red_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $redes[$index][$key],
                        'valor_anterior' => $valorAnterior,
                        'nuevo_valor' => $nuevoValor,
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
@@ -280,24 +291,28 @@ public function update(Request $request, string $id)
                    ];
                }
            }
        }
        });
    
        // Guardar auditoría de correos
        $correosAnteriores = $contacto->correos->toArray();
        $correos = collect($request->input('correo_electronico'))->map(function($email, $index) use ($request) {
        $correosAnteriores = collect($contacto->correos);
        $correosNuevos = 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();
        });

        $correosNuevos->each(function ($correoNuevo, $index) use ($correosAnteriores, &$changes, $contacto, $user){
            $redAnterior = $correosAnteriores->get($index, []);

        foreach ($correosAnteriores as $index => $correoAnterior) {
            foreach ($correoAnterior as $key => $value) {
                if (isset($correos[$index][$key]) && $value != $correos[$index][$key]) {
            foreach ($correoNuevo as $key => $nuevoValor){
                $valorAnterior = $redAnterior[$key] ?? null;

                if(strval($valorAnterior) !== $nuevoValor){
                    $changes[] = [
                        'campo_editado' => "correo_{$index}_{$key}",
                        'valor_anterior' => $value,
                        'nuevo_valor' => $correos[$index][$key],
                        'valor_anterior' => $valorAnterior,
                        'nuevo_valor' => $nuevoValor,
                        'contacto_id' => $contacto->id,
                        'user_id' => $user->id,
                        'created_at' => now(),
@@ -305,7 +320,7 @@ public function update(Request $request, string $id)
                    ];
                }
            }
        }
        });
    
        if (!empty($changes)) {
            Auditoria::insert($changes);
@@ -349,15 +364,15 @@ public function update(Request $request, string $id)
    
        // Guardar teléfonos
        $contacto->telefonos()->delete();
        $contacto->telefonos()->createMany($telefonos);
        $contacto->telefonos()->createMany($telefonosNuevos->toArray());
    
        // Guardar redes sociales
        $contacto->redes()->delete();
        $contacto->redes()->createMany($redes);
        $contacto->redes()->createMany($redesNuevos->toArray());
    
        // Guardar correos electrónicos
        $contacto->correos()->delete();
        $contacto->correos()->createMany($correos);
        $contacto->correos()->createMany($correosNuevos->toArray());
    
        return redirect()->route('contacto.get')->with('success', 'Contacto actualizado correctamente');
    }