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 +301 −10 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 @@ -14,6 +15,8 @@ use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Log; class ContactoController extends Controller { Loading @@ -22,7 +25,7 @@ class ContactoController extends Controller */ public function index() { $contactos = Contacto::get(); $contactos = Contacto::with('profesion', 'cargo')->get(); return view('adminGen.contactos.index', compact('contactos')); } Loading Loading @@ -68,7 +71,7 @@ public function store(Request $request) $correosData = $request->only(['correo_electronico', 'tipo_correo_electronico']); $correosData = array_map(function ($item) { return array_map(function ($value) { return ($value === '0' || $value === "null") ? null : $value; return ($value === "null") ? null : $value; }, $item); }, $correosData); Loading Loading @@ -140,33 +143,216 @@ public function store(Request $request) /** * Display the specified resource. */ public function show(Contacto $contacto) public function show(string $id) { // $contacto = Contacto::with('profesion', 'cargo', 'pareja')->findOrFail($id); return view('adminGen.contactos.show', compact('contacto')); } /** * Show the form for editing the specified resource. */ public function edit(Contacto $contacto) public function edit(string $id) { // $conyuges = Contacto::where('id', '!=' ,$id)->get(); $profesiones = Profesion::get(); $cargos = cargos::get(); $caracteristicas = Caracteristicas::get(); $subgrupos = Subgrupo::get(); $contacto = Contacto::with(['telefonos', 'redes', 'correos'])->findOrFail($id); //dd($contacto); return view('adminGen.contactos.edit', compact('contacto', 'conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos')); } /** * Update the specified resource in storage. * TODO: Falta terminar de hacer pruebas a la funcionalidad de auditoria */ public function update(Request $request, Contacto $contacto) public function update(Request $request, string $id) { // // Validar los datos $validatedData = $request->validate([ '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', 'profesion_id', 'cargo_id', 'caracteristica_id', 'subgrupo_id', 'mes_cump', 'dia_cump', //institucion_id ]; $requestData = $request->all(); foreach ($fieldsToCheck as $field) { if (isset($requestData[$field]) && $requestData[$field] === "null") { unset($requestData[$field]); } } $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; $contacto->cargo_desc = $request->input('cargo_desc'); $data = $request->all(); if ($request->hasFile('foto_perfil')) { // Eliminar la foto de perfil anterior si existe if ($contacto->foto_perfil) { Storage::delete(STR::substr($contacto->foto_perfil, 8)); } // Guardar la nueva foto de perfil $path_file = $this->storeProfilePicture($request); if ($path_file) { $data['foto_perfil'] = 'storage/' . $path_file; } else { $data['foto_perfil'] = 'assets/images/profile-icon.webp'; } } // Actualizar los datos del usuario $contacto->update($data); // Guardar teléfonos $contacto->telefonos()->delete(); $contacto->telefonos()->createMany($telefonos); // Guardar redes sociales $contacto->redes()->delete(); $contacto->redes()->createMany($redes); // Guardar correos electrónicos $contacto->correos()->delete(); $contacto->correos()->createMany($correos); return redirect()->route('contacto.get')->with('success', 'Contacto actualizado correctamente'); } /** * Remove the specified resource from storage. */ public function destroy(Contacto $contacto) public function destroy(string $id) { // try{ $contacto = Contacto::findOrFail($id); $contacto->delete(); return redirect()->route('contacto.get')->with('success', 'Contacto eliminado correctamente.'); }catch(\Exception $e){ return redirect()->route('contacto.get')->withErrors('Error al eliminar el contacto.'); } } /** Loading Loading @@ -335,4 +521,109 @@ private function correoDataPresent($correosData) return false; } public function viewUpload() { return view('adminGen.contactos.upload'); } public function upload(Request $request) { $request->validate([ 'csv_file' => 'required|mimes:csv,txt', ]); $path = $request->file('csv_file')->getRealPath(); $content = file_get_contents($path); $content = str_replace("\xEF\xBB\xBF", '', $content); $data = array_map('str_getcsv', explode("\n", $content)); $header = array_shift($data); foreach ($data as $row) { if (count($header) !== count($row)) { continue; } $row = array_combine($header, $row); $contacto = Contacto::create([ 'nombre' => $row['nombre'], 'ap_paterno' => $row['ap_paterno'], 'ap_materno' => $row['ap_materno'], 'cargo_desc' => $row['cargo_desc'], 'mes_cump' => $row['mes_cump'], 'dia_cump' => $row['dia_cump'], 'domicilio_oficial' => $row['domicilio_oficial'], 'codigo_postal' => $row['codigo_postal'], 'localidad_oficial' => $row['localidad_oficial'], 'municipio_oficial' => $row['municipio_oficial'], 'estado' => $row['estado'], 'pais' => $row['pais'], 'domicilio_par' => $row['domicilio_par'], 'codigo_postal_par' => $row['codigo_postal_par'], 'localidad_par' => $row['localidad_par'], 'municipio_par' => $row['municipio_par'], 'estado_par' => $row['estado_par'], 'pais_par' => $row['pais_par'], 'finado' => $row['finado'], 'foto_perfil' => 'assets/images/profile-icon.webp' ]); // Procesar teléfonos $prefijos = explode(';', $row['prefijo']); $ladas = explode(';', $row['lada']); $numeros = explode(';', $row['numero']); $tipos = explode(';', $row['tipo']); $estatuses = explode(';', $row['estatus']); $exts = explode(';', $row['ext']); $id_radios = explode(';', $row['id_radio']); $observaciones = explode(';', $row['observaciones']); for ($i = 0; $i < count($prefijos); $i++) { if ($prefijos[$i] != 'null' || $ladas[$i] != 'null' || $numeros[$i] != 'null') { Telefono::create([ 'contacto_id' => $contacto->id, 'prefijo' => $prefijos[$i], 'lada' => $ladas[$i], 'numero' => $numeros[$i], 'tipo' => $tipos[$i], 'estatus' => $estatuses[$i], 'ext' => $exts[$i], 'id_radio' => $id_radios[$i], 'observaciones' => $observaciones[$i], ]); } } // Procesar redes sociales $redes_sociales = explode(';', $row['red_social']); $tipos_redes_sociales = explode(';', $row['tipo_red_social']); for ($i = 0; $i < count($redes_sociales); $i++) { if ($redes_sociales[$i] != 'null' || $tipos_redes_sociales[$i] != 'null') { RedesSociales::create([ 'contacto_id' => $contacto->id, 'red_social' => $redes_sociales[$i], 'tipo_red_social' => $tipos_redes_sociales[$i], ]); } } // Procesar correos electrónicos $correos = explode(';', $row['correo_electronico']); $tipos_correos = explode(';', $row['tipo_correo_electronico']); for ($i = 0; $i < count($correos); $i++) { if ($correos[$i] != 'null' || $tipos_correos[$i] != 'null') { CorreoContactos::create([ 'contacto_id' => $contacto->id, 'correo_electronico' => $correos[$i], 'tipo_correo_electronico' => $tipos_correos[$i], ]); } } } return redirect()->route('contacto.get')->with('success', 'Importación de contactos almacenada correctamente'); } } 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); } } app/Models/Contacto.php +31 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Contacto extends Model { Loading Loading @@ -39,4 +40,34 @@ class Contacto extends Model //'institucion_id', 'subgrupo_id', ]; public function profesion(): BelongsTo { return $this->belongsTo(Profesion::class); } public function pareja(): BelongsTo { return $this->belongsTo(Contacto::class, 'conyuge_id'); } public function cargo(): BelongsTo { return $this->belongsTo(cargos::class); } public function telefonos() { return $this->hasMany(Telefono::class); } public function redes() { return $this->hasMany(RedesSociales::class); } public function correos() { return $this->hasMany(CorreoContactos::class); } } composer.lock +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "ad53994e33fc40bc932315ca31084ff3", "content-hash": "7b28faeac6b57475b878b6147632b657", "packages": [ { "name": "bacon/bacon-qr-code", 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 +301 −10 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 @@ -14,6 +15,8 @@ use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Log; class ContactoController extends Controller { Loading @@ -22,7 +25,7 @@ class ContactoController extends Controller */ public function index() { $contactos = Contacto::get(); $contactos = Contacto::with('profesion', 'cargo')->get(); return view('adminGen.contactos.index', compact('contactos')); } Loading Loading @@ -68,7 +71,7 @@ public function store(Request $request) $correosData = $request->only(['correo_electronico', 'tipo_correo_electronico']); $correosData = array_map(function ($item) { return array_map(function ($value) { return ($value === '0' || $value === "null") ? null : $value; return ($value === "null") ? null : $value; }, $item); }, $correosData); Loading Loading @@ -140,33 +143,216 @@ public function store(Request $request) /** * Display the specified resource. */ public function show(Contacto $contacto) public function show(string $id) { // $contacto = Contacto::with('profesion', 'cargo', 'pareja')->findOrFail($id); return view('adminGen.contactos.show', compact('contacto')); } /** * Show the form for editing the specified resource. */ public function edit(Contacto $contacto) public function edit(string $id) { // $conyuges = Contacto::where('id', '!=' ,$id)->get(); $profesiones = Profesion::get(); $cargos = cargos::get(); $caracteristicas = Caracteristicas::get(); $subgrupos = Subgrupo::get(); $contacto = Contacto::with(['telefonos', 'redes', 'correos'])->findOrFail($id); //dd($contacto); return view('adminGen.contactos.edit', compact('contacto', 'conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos')); } /** * Update the specified resource in storage. * TODO: Falta terminar de hacer pruebas a la funcionalidad de auditoria */ public function update(Request $request, Contacto $contacto) public function update(Request $request, string $id) { // // Validar los datos $validatedData = $request->validate([ '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', 'profesion_id', 'cargo_id', 'caracteristica_id', 'subgrupo_id', 'mes_cump', 'dia_cump', //institucion_id ]; $requestData = $request->all(); foreach ($fieldsToCheck as $field) { if (isset($requestData[$field]) && $requestData[$field] === "null") { unset($requestData[$field]); } } $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; $contacto->cargo_desc = $request->input('cargo_desc'); $data = $request->all(); if ($request->hasFile('foto_perfil')) { // Eliminar la foto de perfil anterior si existe if ($contacto->foto_perfil) { Storage::delete(STR::substr($contacto->foto_perfil, 8)); } // Guardar la nueva foto de perfil $path_file = $this->storeProfilePicture($request); if ($path_file) { $data['foto_perfil'] = 'storage/' . $path_file; } else { $data['foto_perfil'] = 'assets/images/profile-icon.webp'; } } // Actualizar los datos del usuario $contacto->update($data); // Guardar teléfonos $contacto->telefonos()->delete(); $contacto->telefonos()->createMany($telefonos); // Guardar redes sociales $contacto->redes()->delete(); $contacto->redes()->createMany($redes); // Guardar correos electrónicos $contacto->correos()->delete(); $contacto->correos()->createMany($correos); return redirect()->route('contacto.get')->with('success', 'Contacto actualizado correctamente'); } /** * Remove the specified resource from storage. */ public function destroy(Contacto $contacto) public function destroy(string $id) { // try{ $contacto = Contacto::findOrFail($id); $contacto->delete(); return redirect()->route('contacto.get')->with('success', 'Contacto eliminado correctamente.'); }catch(\Exception $e){ return redirect()->route('contacto.get')->withErrors('Error al eliminar el contacto.'); } } /** Loading Loading @@ -335,4 +521,109 @@ private function correoDataPresent($correosData) return false; } public function viewUpload() { return view('adminGen.contactos.upload'); } public function upload(Request $request) { $request->validate([ 'csv_file' => 'required|mimes:csv,txt', ]); $path = $request->file('csv_file')->getRealPath(); $content = file_get_contents($path); $content = str_replace("\xEF\xBB\xBF", '', $content); $data = array_map('str_getcsv', explode("\n", $content)); $header = array_shift($data); foreach ($data as $row) { if (count($header) !== count($row)) { continue; } $row = array_combine($header, $row); $contacto = Contacto::create([ 'nombre' => $row['nombre'], 'ap_paterno' => $row['ap_paterno'], 'ap_materno' => $row['ap_materno'], 'cargo_desc' => $row['cargo_desc'], 'mes_cump' => $row['mes_cump'], 'dia_cump' => $row['dia_cump'], 'domicilio_oficial' => $row['domicilio_oficial'], 'codigo_postal' => $row['codigo_postal'], 'localidad_oficial' => $row['localidad_oficial'], 'municipio_oficial' => $row['municipio_oficial'], 'estado' => $row['estado'], 'pais' => $row['pais'], 'domicilio_par' => $row['domicilio_par'], 'codigo_postal_par' => $row['codigo_postal_par'], 'localidad_par' => $row['localidad_par'], 'municipio_par' => $row['municipio_par'], 'estado_par' => $row['estado_par'], 'pais_par' => $row['pais_par'], 'finado' => $row['finado'], 'foto_perfil' => 'assets/images/profile-icon.webp' ]); // Procesar teléfonos $prefijos = explode(';', $row['prefijo']); $ladas = explode(';', $row['lada']); $numeros = explode(';', $row['numero']); $tipos = explode(';', $row['tipo']); $estatuses = explode(';', $row['estatus']); $exts = explode(';', $row['ext']); $id_radios = explode(';', $row['id_radio']); $observaciones = explode(';', $row['observaciones']); for ($i = 0; $i < count($prefijos); $i++) { if ($prefijos[$i] != 'null' || $ladas[$i] != 'null' || $numeros[$i] != 'null') { Telefono::create([ 'contacto_id' => $contacto->id, 'prefijo' => $prefijos[$i], 'lada' => $ladas[$i], 'numero' => $numeros[$i], 'tipo' => $tipos[$i], 'estatus' => $estatuses[$i], 'ext' => $exts[$i], 'id_radio' => $id_radios[$i], 'observaciones' => $observaciones[$i], ]); } } // Procesar redes sociales $redes_sociales = explode(';', $row['red_social']); $tipos_redes_sociales = explode(';', $row['tipo_red_social']); for ($i = 0; $i < count($redes_sociales); $i++) { if ($redes_sociales[$i] != 'null' || $tipos_redes_sociales[$i] != 'null') { RedesSociales::create([ 'contacto_id' => $contacto->id, 'red_social' => $redes_sociales[$i], 'tipo_red_social' => $tipos_redes_sociales[$i], ]); } } // Procesar correos electrónicos $correos = explode(';', $row['correo_electronico']); $tipos_correos = explode(';', $row['tipo_correo_electronico']); for ($i = 0; $i < count($correos); $i++) { if ($correos[$i] != 'null' || $tipos_correos[$i] != 'null') { CorreoContactos::create([ 'contacto_id' => $contacto->id, 'correo_electronico' => $correos[$i], 'tipo_correo_electronico' => $tipos_correos[$i], ]); } } } return redirect()->route('contacto.get')->with('success', 'Importación de contactos almacenada correctamente'); } }
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); } }
app/Models/Contacto.php +31 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Contacto extends Model { Loading Loading @@ -39,4 +40,34 @@ class Contacto extends Model //'institucion_id', 'subgrupo_id', ]; public function profesion(): BelongsTo { return $this->belongsTo(Profesion::class); } public function pareja(): BelongsTo { return $this->belongsTo(Contacto::class, 'conyuge_id'); } public function cargo(): BelongsTo { return $this->belongsTo(cargos::class); } public function telefonos() { return $this->hasMany(Telefono::class); } public function redes() { return $this->hasMany(RedesSociales::class); } public function correos() { return $this->hasMany(CorreoContactos::class); } }
composer.lock +1 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "ad53994e33fc40bc932315ca31084ff3", "content-hash": "7b28faeac6b57475b878b6147632b657", "packages": [ { "name": "bacon/bacon-qr-code", Loading