diff --git a/app/Http/Controllers/ContactoController.php b/app/Http/Controllers/ContactoController.php index 9f895bccb07e78e869f2a69a18a6ca6f5f512287..56cf2a9127b5d6fceacb6fe4920745b62ae48f3f 100644 --- a/app/Http/Controllers/ContactoController.php +++ b/app/Http/Controllers/ContactoController.php @@ -18,6 +18,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; +use Carbon\Carbon; class ContactoController extends Controller { @@ -569,6 +570,8 @@ public function upload(Request $request) 'csv_file' => 'required|mimes:csv,txt', ]); + $profesiones = Profesion::select('id', 'nombre')->get(); + $path = $request->file('csv_file')->getRealPath(); $content = file_get_contents($path); $content = str_replace("\xEF\xBB\xBF", '', $content); @@ -582,7 +585,11 @@ public function upload(Request $request) } $row = array_combine($header, $row); - $contacto = Contacto::create([ + //TODO: Implementar lo mismo para los demas catalogos + + $existProfesion = $profesiones->firstWhere('nombre', $row['profesion']); + + $datosContacto = [ 'nombre' => $row['nombre'], 'ap_paterno' => $row['ap_paterno'], 'ap_materno' => $row['ap_materno'], @@ -603,7 +610,13 @@ public function upload(Request $request) 'pais_par' => $row['pais_par'], 'finado' => $row['finado'], 'foto_perfil' => 'assets/images/profile-icon.webp' - ]); + ]; + + if(isset($existProfesion)){ + $datosContacto['profesion_id'] = $existProfesion->id; + } + + $contacto = Contacto::create($datosContacto); // Procesar teléfonos $prefijos = explode(';', $row['prefijo']); @@ -662,4 +675,49 @@ public function upload(Request $request) return redirect()->route('contacto.get')->with('success', 'Importación de contactos almacenada correctamente'); } + + public function obtenerEventos(Request $request){ + $start = Carbon::parse($request->query('start')); + $end = Carbon::parse($request->query('end')); + + // Obtener cumpleaños en el rango de fechas visible + $cumpleanios = Contacto::where(function ($query) use ($start, $end) { + for ($date = $start->copy(); $date->lte($end); $date->addDay()) { + $query->orWhere(function ($subQuery) use ($date) { + $subQuery->where('mes_cump', $date->format('m')) + ->where('dia_cump', $date->format('d')); + }); + } + }) + ->select('id', 'nombre', 'ap_paterno', 'ap_materno', 'mes_cump', 'dia_cump') + ->get(); + + // Obtener aniversarios de instituciones en el rango de fechas visible + $aniversarios = Instituciones::whereBetween('aniversario', [$start, $end]) + ->select('id', 'nombre', 'aniversario') + ->get(); + + // Combinar los datos en un solo array para el calendario + $eventos = $cumpleanios->map(function ($contacto) { + return [ + 'id' => $contacto->id, + 'title' => $contacto->nombre . ' ' . $contacto->ap_paterno. ' ' . $contacto->ap_materno, + 'start' => now()->year . '-' . str_pad($contacto->mes_cump, 2, '0', STR_PAD_LEFT) . '-' . str_pad($contacto->dia_cump, 2, '0', STR_PAD_LEFT), + 'className' => 'success', + 'description' => 'Cumpleaños de ' . $contacto->nombre, + ]; + })->merge($aniversarios->map(function ($institucion) { + return [ + 'id' => $institucion->id, + 'title' => 'Aniversario de ' . $institucion->nombre, + 'start' => $institucion->aniversario, + 'className' => 'danger', + 'description' => 'Aniversario de ' . $institucion->nombre, + ]; + })); + + return response()->json($eventos); + } } + + \ No newline at end of file diff --git a/public/assets/formato/data.csv b/public/assets/formato/data.csv index bb9b28bba500167689f4d47d0239bd86b84afaac..febabb179c80e2ac057be9df641cab5af5e7a67a 100644 --- a/public/assets/formato/data.csv +++ b/public/assets/formato/data.csv @@ -1,4 +1,4 @@ -nombre,ap_paterno,ap_materno,cargo_desc,mes_cump,dia_cump,domicilio_oficial,codigo_postal,localidad_oficial,municipio_oficial,estado,pais,domicilio_par,codigo_postal_par,localidad_par,municipio_par,estado_par,pais_par,finado,prefijo,lada,numero,tipo,estatus,ext,id_radio,observaciones,red_social,tipo_red_social,correo_electronico,tipo_correo_electronico -John,Doe,,Amigo del hijo del C. Gobernador,2,12,Conocido,98000,Zacatecas,Zacatecas,Zacatecas,México,Conocido,98000,Zacatecas,Zacatecas,Zacatecas,México,0,123;124,456;457,7890123456;1234567890,Celular;Fax,Público;Privado,123;124,123;124,Nota 1;Nota 2,http://facebook.com/johndoe;http://twitter.com/johndoe,Facebook;Twitter,johndoe@example.com;johndoe123@example.com,Oficial;Personal -Jane,Smith,,Amigo del hijo del C. Gobernador,10,10,Conocido,98612,Guadalupe,Guadalupe,Zacatecas,México,Conocido,98612,Guadalupe,Guadalupe,Zacatecas,México,1,321;322,654;655,9876543210;1122334455,Particular;Directo,Privado;Público,456;457,456;457,Otra nota 1;Otra nota 2,http://twitter.com/janesmith;http://linkedin.com/janesmith,Twitter;LinkedIn,janesmith@example.com;janesmith123@example.com,Personal;Oficial -Bob ,Johnson,,Amigo del hijo del C. Gobernador,12,2,Conocido,98640,Trancoso,Trancoso,Zacatecas,México,Conocido,98640,Trancoso,Trancoso,Zacatecas,México,0,555;556;557,123;124;125,1112223333;4445556666;7778889999,Radio;Celular;Fax,Público;Privado;Público,101;102;103,555;556;557,Observación 1;Observación 2;Observación 3,http://facebook.com/bobjohnson;http://instagram.com/bobjohnson,Facebook;Instagram,bobjohnson@example.com;bobjohnson123@example.com,Oficial;Personal +nombre,ap_paterno,ap_materno,cargo_desc,mes_cump,dia_cump,domicilio_oficial,codigo_postal,localidad_oficial,municipio_oficial,estado,pais,domicilio_par,codigo_postal_par,localidad_par,municipio_par,estado_par,pais_par,finado,prefijo,lada,numero,tipo,estatus,ext,id_radio,observaciones,red_social,tipo_red_social,correo_electronico,tipo_correo_electronico,profesion +John,Doe,,Amigo del hijo del C. Gobernador,2,12,Conocido,98000,Zacatecas,Zacatecas,Zacatecas,México,Conocido,98000,Zacatecas,Zacatecas,Zacatecas,México,0,123;124,456;457,7890123456;1234567890,Celular;Fax,Público;Privado,123;124,123;124,Nota 1;Nota 2,http://facebook.com/johndoe;http://twitter.com/johndoe,Facebook;Twitter,johndoe@example.com;johndoe123@example.com,Oficial;Personal,Agente de Ministerio Público +Jane,Smith,,Amigo del hijo del C. Gobernador,10,10,Conocido,98612,Guadalupe,Guadalupe,Zacatecas,México,Conocido,98612,Guadalupe,Guadalupe,Zacatecas,México,1,321;322,654;655,9876543210;1122334455,Particular;Directo,Privado;Público,456;457,456;457,Otra nota 1;Otra nota 2,http://twitter.com/janesmith;http://linkedin.com/janesmith,Twitter;LinkedIn,janesmith@example.com;janesmith123@example.com,Personal;Oficial,Almirante de Cuerpo General +Bob ,Johnson,,Amigo del hijo del C. Gobernador,12,2,Conocido,98640,Trancoso,Trancoso,Zacatecas,México,Conocido,98640,Trancoso,Trancoso,Zacatecas,México,0,555;556;557,123;124;125,1112223333;4445556666;7778889999,Radio;Celular;Fax,Público;Privado;Público,101;102;103,555;556;557,Observación 1;Observación 2;Observación 3,http://facebook.com/bobjohnson;http://instagram.com/bobjohnson,Facebook;Instagram,bobjohnson@example.com;bobjohnson123@example.com,Oficial;Personal,Arqueólogo diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 3c9197433a75761732d23b7bd98349f6db9d0fde..0be8d579d446225ca6d3c1c697cbacce23b39bd7 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,449 +1,206 @@ - -
- -
- + + +
+
+
+
+
+
Calendario de aniversarios
+
+
+
+
Contactos
+
+
+
+
Instituciones y empresas
+
+
+
+ +
+
+
+ diff --git a/routes/web.php b/routes/web.php index 1cab2b30491eddd008d396691a4813b747cc198e..5e2121c2c9a65aa0d7a297ed5a5b93c5b2dd892e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -124,6 +124,7 @@ Route::get('/contactos/{id}/editar', [ContactoController::class, 'edit'])->name('edit')->middleware(CheckRoles::class . ':admingen,admin,capturista' ); Route::put('/contactos/{id}/editar', [ContactoController::class, 'update'])->name('update')->middleware(CheckRoles::class . ':admingen,admin,capturista' ); Route::delete('/contactos/{id}', [ContactoController::class, 'destroy'])->name('destroy')->middleware(CheckRoles::class . ':admingen,admin'); + Route::get('/administracion/datos', [ContactoController::class, 'obtenerEventos'])->name('datos')->middleware(CheckRoles::class . ':admingen,admin,capturista,lector');; }); Route::middleware('auth:sanctum',