From 192cafd0f650b06b231dd4d9542e0165a8b41099 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Mon, 10 Mar 2025 10:48:02 -0600 Subject: [PATCH 01/11] Obtener reportes de las listas terminado --- app/Exports/ListasExport.php | 145 +++++++++++++ app/Http/Controllers/ReporteController.php | 103 ++++++--- app/Models/Subgrupo.php | 2 +- .../views/adminGen/listas/show.blade.php | 202 +++++++++++++++++- 4 files changed, 424 insertions(+), 28 deletions(-) create mode 100644 app/Exports/ListasExport.php diff --git a/app/Exports/ListasExport.php b/app/Exports/ListasExport.php new file mode 100644 index 0000000..5175fb4 --- /dev/null +++ b/app/Exports/ListasExport.php @@ -0,0 +1,145 @@ +lista_id = $lista_id; + $this->extraFields = $extraFields; + } + + public function collection() + { + $lista = Lista::with(['grupos', 'subgrupos', 'contactos'])->find($this->lista_id); + $contactos = new Collection(); + $contactos = $contactos->merge($lista->contactos); + + foreach ($lista->grupos as $grupo) { + $contactos = $contactos->merge($grupo->contactos); + + foreach ($grupo->subgrupos as $subgrupo) { + $contactos = $contactos->merge($subgrupo->contactos); + } + } + foreach($lista->subgrupos as $subgrupo){ + $contactos = $contactos->merge($subgrupo->contactos); + } + + $contactos = $contactos->unique('id'); + + return $contactos->map(function($contacto){ + return $this->formatContactoData($contacto); + }); + } + + public function headings(): array + { + $defaultHeadings = ['Profesión', 'Nombre', 'Apellido Paterno', 'Apellido Materno', 'Cargo', 'Descripción del cargo', 'Grupo', 'Subgrupo']; + $extraHeadings = $this->getExtraHeadings(); + return array_merge($defaultHeadings, $extraHeadings); + } + + private function formatContactoData($contacto) + { + $defaultData = [ + 'Profesión' => $contacto->profesion->abreviatura ?? 'N/A', + 'Nombre' => $contacto->nombre, + 'Apellido Paterno' => $contacto->ap_paterno, + 'Apellido Materno' => $contacto->ap_materno ?? '', + 'Cargo' => $contacto->cargo->nombre ?? 'N/A', + 'Descripción del cargo' => $contacto->cargo_desc ?? 'N/A', + 'Grupo' => $contacto->grupos->pluck('nombre')[0] ?? 'N/A', + 'Subgrupo' => $contacto->subgrupos->pluck('nombre')[0] ?? 'N/A', + ]; + + $extraData = []; + $fields = $this->extraFields; + + if (in_array('todos', $fields)) { + $fields = ['domicilio', 'cumpleanos', 'telefonos', 'conyuge', 'email']; + } + + foreach ($fields as $field) { + switch ($field) { + case 'domicilio': + $extraData = array_merge($extraData, [ + 'Domicilio Oficial' => $contacto->domicilio_oficial ?? 'N/A', + 'Código Postal' => $contacto->codigo_postal ?? 'N/A', + 'Localidad Oficial' => $contacto->localidad_oficial ?? 'N/A', + 'Municipio Oficial' => $contacto->municipio_oficial ?? 'N/A', + 'Estado' => $contacto->estado ?? 'N/A', + 'País' => $contacto->pais ?? 'N/A', + ]); + break; + case 'cumpleanos': + $extraData['Cumpleaños'] = $contacto->mes_cump && $contacto->dia_cump + ? $contacto->mes_cump . '/' . $contacto->dia_cump + : 'N/A'; + break; + case 'telefonos': + $extraData = array_merge($extraData, [ + 'Número de teléfono' => $contacto->telefonos->pluck('numero')->join(', ') ?? 'N/A', + 'Tipo' => $contacto->telefonos->pluck('tipo')->join(', ') ?? 'N/A', + 'Estatus' => $contacto->telefonos->pluck('estatus')->join(', ') ?? 'N/A', + 'Extensión' => $contacto->telefonos->pluck('ext')->join(', ') ?? 'N/A', + 'Observaciones' => $contacto->telefonos->pluck('observaciones')->join(', ') ?? 'N/A', + ]); + break; + case 'conyuge': + $extraData['Cónyuge'] = $contacto->pareja + ? $contacto->pareja->nombre . ' ' . $contacto->pareja->ap_paterno . ' ' . $contacto->pareja->ap_materno + : 'N/A'; + break; + case 'email': + $extraData = array_merge($extraData, [ + 'Correo Electrónico' => $contacto->correos->pluck('correo_electronico')->join(', ') ?? 'N/A', + 'Tipo de Correo Electrónico' => $contacto->correos->pluck('tipo_correo_electronico')->join(', ') ?? 'N/A', + ]); + break; + } + } + + return array_merge($defaultData, $extraData); + } + + private function getExtraHeadings() + { + $headings = []; + $fields = $this->extraFields; + + if (in_array('todos', $fields)) { + $fields = ['domicilio', 'cumpleanos', 'telefonos', 'conyuge', 'email']; + } + + foreach ($fields as $field) { + switch ($field) { + case 'domicilio': + $headings = array_merge($headings, ['Domicilio Oficial', 'Código Postal', 'Localidad Oficial', 'Municipio Oficial', 'Estado', 'País']); + break; + case 'cumpleanos': + $headings[] = 'Cumpleaños'; + break; + case 'telefonos': + $headings = array_merge($headings, ['Número de teléfono', 'Tipo', 'Estatus', 'Extensión', 'Observaciones']); + break; + case 'conyuge': + $headings[] = 'Cónyuge'; + break; + case 'email': + $headings = array_merge($headings, ['Correo Electrónico', 'Tipo de Correo Electrónico']); + break; + } + } + return $headings; + } +} diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index 35417ce..61bd0ff 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -10,10 +10,12 @@ use Illuminate\Http\Request; use App\Exports\ContactosExport; +use App\Exports\ListasExport; use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Support\Facades\Storage; use Maatwebsite\Excel\Facades\Excel; use ZipArchive; +use Illuminate\Support\Str; class ReporteController extends Controller { @@ -102,34 +104,39 @@ public function export(Request $request) 'mesFin' => $request->input('mesFin'), 'diaFin' => $request->input('diaFin'), ]; - $export = new ContactosExport($contactIds, $extraFields, $filters); - if($request->archivo == 'excel'){ - return Excel::download($export, 'contactos.xlsx'); - }else if($request->archivo == 'pdf'){ - $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape');; - return $pdf->download('contactos.pdf'); - }else if($request->archivo == 'ambos'){ - $excelPath = storage_path('app/public/contactos.xlsx'); - $pdfPath = storage_path('app/public/contactos.pdf'); - - Excel::store($export, 'public/contactos.xlsx'); - $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape'); - Storage::put('public/contactos.pdf', $pdf->output()); - - // Crear archivo ZIP - $zipPath = storage_path('app/public/contactos.zip'); - $zip = new ZipArchive; - if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { - $zip->addFile($excelPath, 'contactos.xlsx'); - $zip->addFile($pdfPath, 'contactos.pdf'); - $zip->close(); + try{ + $export = new ContactosExport($contactIds, $extraFields, $filters); + if($request->archivo == 'excel'){ + return Excel::download($export, 'contactos.xlsx'); + }else if($request->archivo == 'pdf'){ + $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape'); + return $pdf->download('contactos.pdf'); + }else if($request->archivo == 'ambos'){ + $excelPath = storage_path('app/public/contactos.xlsx'); + $pdfPath = storage_path('app/public/contactos.pdf'); + + Excel::store($export, 'public/contactos.xlsx'); + $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape'); + Storage::put('public/contactos.pdf', $pdf->output()); + + // Crear archivo ZIP + $zipPath = storage_path('app/public/contactos.zip'); + $zip = new ZipArchive; + if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { + $zip->addFile($excelPath, 'contactos.xlsx'); + $zip->addFile($pdfPath, 'contactos.pdf'); + $zip->close(); + } + + // Descargar archivo ZIP + return response()->download($zipPath)->deleteFileAfterSend(true); + }else{ + return response()->json(['Error, no seleccionaste un archivo de exportación valido.'], 400); } - - // Descargar archivo ZIP - return response()->download($zipPath)->deleteFileAfterSend(true); - }else{ - return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); + }catch(\Exception $e){ + return response()->json(['message'=> $e->getMessage()], 500); } + } public function getSubgrupos(Int $id) @@ -137,4 +144,48 @@ public function getSubgrupos(Int $id) $grupo = Grupos::find($id); return response()->json($grupo->subgrupos); } + + public function exportListas(Request $request) + { + try{ + if(is_null($request->archivo)){ + return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); + } + + $extraFields = $request->input('exportar', []); + if(!$extraFields){ + return response()->json(['Error, No seleccionaste campos a exportar.'], 400); + } + $lista_id = $request->input('id'); + + $export = new ListasExport($lista_id, $extraFields); + $uuid = Str::uuid()->toString(); + if($request->archivo == 'excel'){ + return Excel::download($export, $uuid . '.xlsx'); + }else if($request->archivo == 'pdf'){ + $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape'); + return $pdf->download($uuid.'.pdf'); + }else if($request->archivo == 'ambos'){ + $excelPath = storage_path('app/public/contactos.xlsx'); + $pdfPath = storage_path('app/public/contactos.pdf'); + + Excel::store($export, 'public/contactos.xlsx'); + $pdf = Pdf::loadView('adminGen.contactos.contactos_pdf', ['contactos' => $export->collection()])->setPaper('A1', 'landscape'); + Storage::put('public/contactos.pdf', $pdf->output()); + $zipPath = storage_path('app/public/'.$uuid.'.zip'); + $zip = new ZipArchive; + if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { + $zip->addFile($excelPath, $uuid.'.xlsx'); + $zip->addFile($pdfPath, $uuid.'.pdf'); + $zip->close(); + } + + return response()->download($zipPath)->deleteFileAfterSend(true); + }else{ + return response()->json(['message' => 'Error, no seleccionaste un archivo de exportación valido.'], 400); + } + }catch(\Exception $e){ + return response()->json(['message' => $e->getMessage()], 500); + } + } } diff --git a/app/Models/Subgrupo.php b/app/Models/Subgrupo.php index 0545c6e..03b1ef2 100644 --- a/app/Models/Subgrupo.php +++ b/app/Models/Subgrupo.php @@ -34,6 +34,6 @@ public function listas(): BelongsToMany public function contactos(): BelongsToMany { - return $this->belongsToMany(Contacto::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id'); + return $this->belongsToMany(Contacto::class, 'contactos_subgrupos', 'subgrupo_id', 'contacto_id'); } } diff --git a/resources/views/adminGen/listas/show.blade.php b/resources/views/adminGen/listas/show.blade.php index bc79f7a..bf78bc4 100644 --- a/resources/views/adminGen/listas/show.blade.php +++ b/resources/views/adminGen/listas/show.blade.php @@ -14,6 +14,58 @@
+
+
+
Exportar datos
+
+
+
+
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+
+
+
+ + +
+ +
+
+
+
+
Grupos
@@ -93,5 +145,153 @@ class="btn btn-primary">
+
- + + + + + + + + + \ No newline at end of file -- GitLab From c5a46806277537dcfe48f2542714533ba00da712 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Mon, 10 Mar 2025 15:04:01 -0600 Subject: [PATCH 02/11] Filtro de descripcion del cargo, grupos y subgrupos --- app/Http/Controllers/ContactoController.php | 2 +- resources/views/adminGen/contactos/index.blade.php | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ContactoController.php b/app/Http/Controllers/ContactoController.php index b2b0055..6641503 100644 --- a/app/Http/Controllers/ContactoController.php +++ b/app/Http/Controllers/ContactoController.php @@ -26,7 +26,7 @@ class ContactoController extends Controller */ public function index() { - $contactos = Contacto::with('profesion', 'cargo')->get(); + $contactos = Contacto::with('profesion', 'cargo', 'grupos', 'subgrupos')->get(); return view('adminGen.contactos.index', compact('contactos')); } diff --git a/resources/views/adminGen/contactos/index.blade.php b/resources/views/adminGen/contactos/index.blade.php index 13e9910..55eb066 100644 --- a/resources/views/adminGen/contactos/index.blade.php +++ b/resources/views/adminGen/contactos/index.blade.php @@ -47,7 +47,10 @@ } else { nombreCompleto = contacto.nombre; } - return [nombreCompleto, renderParameter(contacto.ap_paterno), renderParameter(contacto.ap_materno), renderParameter(contacto.cargo?.nombre), renderActions(contacto.id)]; + + return [nombreCompleto, renderParameter(contacto.ap_paterno), renderParameter(contacto.ap_materno), renderParameter(contacto.cargo?.nombre), + renderParameter(contacto.cargo_desc), renderParameter(contacto.grupos.map(grupo => grupo.nombre).join(', ')), + renderParameter(contacto.subgrupos.map(subgrupo => subgrupo.nombre).join(', ')), renderActions(contacto.id)]; }); function renderActions(id) { @@ -64,7 +67,7 @@ function renderActions(id) { } function renderParameter(parametro) { - if(parametro === null || parametro === undefined){ + if(parametro === null || parametro === undefined || parametro === ""){ return `Sin información`; }else{ return parametro; @@ -74,7 +77,7 @@ function renderParameter(parametro) { document.addEventListener('DOMContentLoaded', () => { const datatable = new simpleDatatables.DataTable('#myTable', { data: { - headings: ['Nombre', 'Apellido paterno', 'Apellido materno', 'Cargo', 'Acciones'], + headings: ['Nombre', 'Apellido paterno', 'Apellido materno', 'Cargo', 'Descripción del cargo', 'Grupos', 'Subgrupos', 'Acciones'], data: data }, perPage: 10, -- GitLab From 7943f53ab6eeac91b935e497e0d4a0379d4283bb Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 12:22:08 -0600 Subject: [PATCH 03/11] Cargo y descripcion del cargo en la vista principal --- app/Http/Controllers/ContactoController.php | 5 +++-- resources/views/dashboard.blade.php | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/ContactoController.php b/app/Http/Controllers/ContactoController.php index 6641503..753868e 100644 --- a/app/Http/Controllers/ContactoController.php +++ b/app/Http/Controllers/ContactoController.php @@ -646,7 +646,7 @@ public function obtenerEventos(Request $request){ }); } }) - ->select('id', 'nombre', 'ap_paterno', 'ap_materno', 'mes_cump', 'dia_cump') + ->select('id', 'nombre', 'ap_paterno', 'ap_materno', 'mes_cump', 'dia_cump', 'cargo_desc') ->get(); // Obtener aniversarios de instituciones en el rango de fechas visible @@ -661,7 +661,8 @@ public function obtenerEventos(Request $request){ '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, + 'cargo' => $contacto->cargo->nombre ?? 'Sin información', + 'description' => $contacto->cargo_desc ?? 'Sin información', ]; })->merge($aniversarios->map(function ($institucion) { return [ diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 0be8d57..b7096fb 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -56,7 +56,14 @@ class="form-input" placeholder="Event Start Date" x-model="params.start"
- + + +
+
+
+
@@ -83,6 +90,7 @@ class="form-input" placeholder="Event Start Date" x-model="params.start" start: '', end: '', description: '', + cargo: '', type: 'primary' }), params: { @@ -91,6 +99,7 @@ class="form-input" placeholder="Event Start Date" x-model="params.start" start: '', end: '', description: '', + cargo: '', type: 'primary' }, isAddEventModal: false, @@ -157,6 +166,7 @@ class="form-input" placeholder="Event Start Date" x-model="params.start" end: obj.start, type: obj.classNames ? obj.classNames[0] : 'primary', description: obj.extendedProps ? obj.extendedProps.description : '', + cargo: obj.extendedProps ? obj.extendedProps.cargo : '', }; this.minStartDate = new Date(); this.minEndDate = new Date(); -- GitLab From c256f922b904cd30b92380463c9253c344651567 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 12:49:53 -0600 Subject: [PATCH 04/11] Mensajes de error mas especificos --- app/Http/Controllers/ReporteController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index 61bd0ff..ada1e36 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -90,7 +90,10 @@ public function find(Request $request) public function export(Request $request) { if(is_null($request->archivo)){ - return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); + return response()->json(['message' => 'Error, No seleccionaste un archivo de exportación valido.'], 400); + } + if(is_null($request->campos)){ + return response()->json(['message' => 'Error, no seleccionaste los campos a exportar.'], 400); } $contactIds = array_column($request->input('contactos', []), 'id'); -- GitLab From f078b52232b2e508a73d1bcf7109ac6cb247ce12 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 12:57:06 -0600 Subject: [PATCH 05/11] Mensajes de error --- app/Http/Controllers/ReporteController.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index ada1e36..fdb2352 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -11,6 +11,7 @@ use App\Exports\ContactosExport; use App\Exports\ListasExport; +use App\Models\Subgrupo; use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Support\Facades\Storage; use Maatwebsite\Excel\Facades\Excel; @@ -92,12 +93,13 @@ public function export(Request $request) if(is_null($request->archivo)){ return response()->json(['message' => 'Error, No seleccionaste un archivo de exportación valido.'], 400); } - if(is_null($request->campos)){ - return response()->json(['message' => 'Error, no seleccionaste los campos a exportar.'], 400); - } $contactIds = array_column($request->input('contactos', []), 'id'); $extraFields = $request->input('exportar', []); + if(!$extraFields){ + return response()->json(['message' => 'Error, No seleccionaste campos a exportar.'], 400); + } + $filters = [ 'listas' => $request->input('listas', []), 'subgrupos' => $request->input('subgrupos', []), @@ -152,12 +154,12 @@ public function exportListas(Request $request) { try{ if(is_null($request->archivo)){ - return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); + return response()->json(['message' => 'Error, No seleccionaste un archivo de exportación valido.'], 400); } $extraFields = $request->input('exportar', []); if(!$extraFields){ - return response()->json(['Error, No seleccionaste campos a exportar.'], 400); + return response()->json(['message' => 'Error, No seleccionaste campos a exportar.'], 400); } $lista_id = $request->input('id'); -- GitLab From 12ccefbc689349936b1fe747219cf280829e7b9d Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 12:59:47 -0600 Subject: [PATCH 06/11] Codigo sin funcionalidad --- .../views/adminGen/contactos/export.blade.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/resources/views/adminGen/contactos/export.blade.php b/resources/views/adminGen/contactos/export.blade.php index 39c6d0c..93cecb5 100644 --- a/resources/views/adminGen/contactos/export.blade.php +++ b/resources/views/adminGen/contactos/export.blade.php @@ -62,21 +62,6 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-md" - - -
-- GitLab From 856433e2dcd24af3663786372b72b4efb6d18d40 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 13:08:40 -0600 Subject: [PATCH 07/11] Cambio en la forma de obtener grupos y subgrupos --- app/Http/Controllers/ReporteController.php | 3 ++- .../views/adminGen/contactos/export.blade.php | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index fdb2352..58ff523 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -29,7 +29,8 @@ public function index() $caracteristicas = Caracteristicas::get(); $grupos = Grupos::get(); $listas = Lista::get(); - return view('adminGen.contactos.export', compact('cargos', 'caracteristicas', 'grupos', 'listas')); + $subgrupos = Subgrupo::get(); + return view('adminGen.contactos.export', compact('cargos', 'caracteristicas', 'grupos', 'listas', 'subgrupos')); } /** diff --git a/resources/views/adminGen/contactos/export.blade.php b/resources/views/adminGen/contactos/export.blade.php index 93cecb5..7a158dd 100644 --- a/resources/views/adminGen/contactos/export.blade.php +++ b/resources/views/adminGen/contactos/export.blade.php @@ -33,7 +33,7 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-md"
+ @foreach($subgrupos as $subgrupo) + + @endforeach
@@ -262,8 +265,14 @@ function logData() { } async function cargarSubgrupos(grupoId) { - const response = await fetch(`/reportes/subgrupos/${grupoId}`); - const subgrupos = await response.json(); + let subgrupos; + if(grupoId === ""){ + subgrupos = @json($subgrupos); + }else{ + const response = await fetch(`/reportes/subgrupos/${grupoId}`); + subgrupos = await response.json(); + } + const subgruposSelect = document.getElementById('subgrupos'); subgruposSelect.innerHTML = ''; // Limpiar los subgrupos previos -- GitLab From e411f711cb82a2dd0ca2af416463937d1958253b Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 14:22:18 -0600 Subject: [PATCH 08/11] Filtro que esta duplicado --- app/Exports/ContactosExport.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/Exports/ContactosExport.php b/app/Exports/ContactosExport.php index 390a244..c1f0661 100644 --- a/app/Exports/ContactosExport.php +++ b/app/Exports/ContactosExport.php @@ -71,11 +71,6 @@ public function headings(): array private function applyFilters($query) { - /* if(!empty($this->filters['subgrupos'])){ - $query->orWhereHas('subgrupos', function ($q) { - $q->whereIn('subgrupos.id', $this->filters['subgrupos']); - }); - } */ if (!empty($this->filters['subgrupos'])) { $query->orWhereHas('subgrupos', function ($q) { -- GitLab From 3afc4b97e971224c41eafc76c8c00dc7531314db Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Tue, 11 Mar 2025 14:33:11 -0600 Subject: [PATCH 09/11] Nueva logica para obtener subgrupos --- app/Exports/ContactosExport.php | 39 +++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/app/Exports/ContactosExport.php b/app/Exports/ContactosExport.php index c1f0661..1e77de1 100644 --- a/app/Exports/ContactosExport.php +++ b/app/Exports/ContactosExport.php @@ -71,28 +71,33 @@ public function headings(): array private function applyFilters($query) { - - if (!empty($this->filters['subgrupos'])) { + if(count($this->filters['subgrupos']) > 2){ $query->orWhereHas('subgrupos', function ($q) { $q->whereIn('subgrupos.id', $this->filters['subgrupos']); }); - } elseif (!empty($this->filters['grupos'])) { - $grupoId = $this->filters['grupos']; - $subgruposIds = Grupos::find(153)->subgrupos->pluck('id')->toArray(); - - $query->where(function ($query) use ($grupoId, $subgruposIds) { - // Contactos directamente en el grupo - $query->orWhereHas('grupos', function ($q) use ($grupoId) { - $q->where('grupos.id', $grupoId); + }else{ + if (!empty($this->filters['subgrupos'])) { + $query->orWhereHas('subgrupos', function ($q) { + $q->whereIn('subgrupos.id', $this->filters['subgrupos']); }); - - // Contactos en subgrupos del grupo (solo si hay subgrupos) - if (!empty($subgruposIds)) { - $query->orWhereHas('subgrupos', function ($q) use ($subgruposIds) { - $q->whereIn('subgrupos.id', $subgruposIds); + } elseif (!empty($this->filters['grupos'])) { + $grupoId = $this->filters['grupos']; + $subgruposIds = Grupos::find($grupoId)->subgrupos->pluck('id')->toArray(); + + $query->where(function ($query) use ($grupoId, $subgruposIds) { + // Contactos directamente en el grupo + $query->orWhereHas('grupos', function ($q) use ($grupoId) { + $q->where('grupos.id', $grupoId); }); - } - }); + + // Contactos en subgrupos del grupo (solo si hay subgrupos) + if (!empty($subgruposIds)) { + $query->orWhereHas('subgrupos', function ($q) use ($subgruposIds) { + $q->whereIn('subgrupos.id', $subgruposIds); + }); + } + }); + } } if ($this->filters['mesInicio'] != "NaN" && $this->filters['diaInicio'] != "NaN") { -- GitLab From ff35e30090390bb9b010add3c58b8615ddb63368 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Wed, 12 Mar 2025 09:23:43 -0600 Subject: [PATCH 10/11] Implementacion de niceselect --- .../views/adminGen/contactos/export.blade.php | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/resources/views/adminGen/contactos/export.blade.php b/resources/views/adminGen/contactos/export.blade.php index 7a158dd..2e41bce 100644 --- a/resources/views/adminGen/contactos/export.blade.php +++ b/resources/views/adminGen/contactos/export.blade.php @@ -1,6 +1,6 @@ - +
@@ -14,8 +14,8 @@

Nota: Este módulo aun se encuentra en desarrollo, por lo que podría haber errores.

-
-
+
+
@@ -31,7 +31,7 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-md"
-
+
+
+
@@ -68,7 +68,7 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-md"
-
+
@@ -113,11 +113,26 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-md" + -- GitLab From fbcbeaf93fc4dc39d08bb3d7398cc079ba40f735 Mon Sep 17 00:00:00 2001 From: Alfonso Rafael Solis Rangel Date: Wed, 12 Mar 2025 09:26:11 -0600 Subject: [PATCH 11/11] Cambio en los mensajes de exportacion --- app/Http/Controllers/ReporteController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/ReporteController.php b/app/Http/Controllers/ReporteController.php index 58ff523..c20c100 100644 --- a/app/Http/Controllers/ReporteController.php +++ b/app/Http/Controllers/ReporteController.php @@ -92,13 +92,13 @@ public function find(Request $request) public function export(Request $request) { if(is_null($request->archivo)){ - return response()->json(['message' => 'Error, No seleccionaste un archivo de exportación valido.'], 400); + return response()->json(['message' => 'No seleccionaste un archivo de exportación valido.'], 400); } $contactIds = array_column($request->input('contactos', []), 'id'); $extraFields = $request->input('exportar', []); if(!$extraFields){ - return response()->json(['message' => 'Error, No seleccionaste campos a exportar.'], 400); + return response()->json(['message' => 'No seleccionaste campos a exportar.'], 400); } $filters = [ @@ -155,12 +155,12 @@ public function exportListas(Request $request) { try{ if(is_null($request->archivo)){ - return response()->json(['message' => 'Error, No seleccionaste un archivo de exportación valido.'], 400); + return response()->json(['message' => 'No seleccionaste un archivo de exportación valido.'], 400); } $extraFields = $request->input('exportar', []); if(!$extraFields){ - return response()->json(['message' => 'Error, No seleccionaste campos a exportar.'], 400); + return response()->json(['message' => 'No seleccionaste campos a exportar.'], 400); } $lista_id = $request->input('id'); @@ -188,7 +188,7 @@ public function exportListas(Request $request) return response()->download($zipPath)->deleteFileAfterSend(true); }else{ - return response()->json(['message' => 'Error, no seleccionaste un archivo de exportación valido.'], 400); + return response()->json(['message' => 'no seleccionaste un archivo de exportación valido.'], 400); } }catch(\Exception $e){ return response()->json(['message' => $e->getMessage()], 500); -- GitLab