Loading app/Exports/ContactosExport.php +22 −22 Original line number Diff line number Diff line Loading @@ -71,19 +71,18 @@ 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']); }); } */ }else{ if (!empty($this->filters['subgrupos'])) { $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(); $subgruposIds = Grupos::find($grupoId)->subgrupos->pluck('id')->toArray(); $query->where(function ($query) use ($grupoId, $subgruposIds) { // Contactos directamente en el grupo Loading @@ -99,6 +98,7 @@ private function applyFilters($query) } }); } } if ($this->filters['mesInicio'] != "NaN" && $this->filters['diaInicio'] != "NaN") { $mesInicio = $this->filters['mesInicio']; Loading app/Exports/ListasExport.php 0 → 100644 +145 −0 Original line number Diff line number Diff line <?php namespace App\Exports; use App\Models\Lista; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class ListasExport implements FromCollection, WithHeadings { protected $extraFields; protected $lista_id; public function __construct($lista_id, $extraFields = []) { $this->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; } } app/Http/Controllers/ContactoController.php +4 −3 Original line number Diff line number Diff line Loading @@ -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')); } Loading Loading @@ -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 Loading @@ -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 [ Loading app/Http/Controllers/ReporteController.php +85 −28 Original line number Diff line number Diff line Loading @@ -10,10 +10,13 @@ use Illuminate\Http\Request; 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; use ZipArchive; use Illuminate\Support\Str; class ReporteController extends Controller { Loading @@ -26,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')); } /** Loading Loading @@ -88,11 +92,15 @@ 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' => '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' => 'No seleccionaste campos a exportar.'], 400); } $filters = [ 'listas' => $request->input('listas', []), 'subgrupos' => $request->input('subgrupos', []), Loading @@ -102,11 +110,12 @@ public function export(Request $request) 'mesFin' => $request->input('mesFin'), 'diaFin' => $request->input('diaFin'), ]; 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');; $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'); Loading @@ -128,8 +137,12 @@ public function export(Request $request) // Descargar archivo ZIP return response()->download($zipPath)->deleteFileAfterSend(true); }else{ return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); 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) Loading @@ -137,4 +150,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(['message' => 'No seleccionaste un archivo de exportación valido.'], 400); } $extraFields = $request->input('exportar', []); if(!$extraFields){ return response()->json(['message' => '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' => 'no seleccionaste un archivo de exportación valido.'], 400); } }catch(\Exception $e){ return response()->json(['message' => $e->getMessage()], 500); } } } app/Models/Subgrupo.php +1 −1 Original line number Diff line number Diff line Loading @@ -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'); } } Loading
app/Exports/ContactosExport.php +22 −22 Original line number Diff line number Diff line Loading @@ -71,19 +71,18 @@ 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']); }); } */ }else{ if (!empty($this->filters['subgrupos'])) { $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(); $subgruposIds = Grupos::find($grupoId)->subgrupos->pluck('id')->toArray(); $query->where(function ($query) use ($grupoId, $subgruposIds) { // Contactos directamente en el grupo Loading @@ -99,6 +98,7 @@ private function applyFilters($query) } }); } } if ($this->filters['mesInicio'] != "NaN" && $this->filters['diaInicio'] != "NaN") { $mesInicio = $this->filters['mesInicio']; Loading
app/Exports/ListasExport.php 0 → 100644 +145 −0 Original line number Diff line number Diff line <?php namespace App\Exports; use App\Models\Lista; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class ListasExport implements FromCollection, WithHeadings { protected $extraFields; protected $lista_id; public function __construct($lista_id, $extraFields = []) { $this->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; } }
app/Http/Controllers/ContactoController.php +4 −3 Original line number Diff line number Diff line Loading @@ -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')); } Loading Loading @@ -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 Loading @@ -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 [ Loading
app/Http/Controllers/ReporteController.php +85 −28 Original line number Diff line number Diff line Loading @@ -10,10 +10,13 @@ use Illuminate\Http\Request; 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; use ZipArchive; use Illuminate\Support\Str; class ReporteController extends Controller { Loading @@ -26,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')); } /** Loading Loading @@ -88,11 +92,15 @@ 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' => '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' => 'No seleccionaste campos a exportar.'], 400); } $filters = [ 'listas' => $request->input('listas', []), 'subgrupos' => $request->input('subgrupos', []), Loading @@ -102,11 +110,12 @@ public function export(Request $request) 'mesFin' => $request->input('mesFin'), 'diaFin' => $request->input('diaFin'), ]; 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');; $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'); Loading @@ -128,8 +137,12 @@ public function export(Request $request) // Descargar archivo ZIP return response()->download($zipPath)->deleteFileAfterSend(true); }else{ return response()->json(['Error, No seleccionaste un archivo de exportación valido.'], 400); 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) Loading @@ -137,4 +150,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(['message' => 'No seleccionaste un archivo de exportación valido.'], 400); } $extraFields = $request->input('exportar', []); if(!$extraFields){ return response()->json(['message' => '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' => 'no seleccionaste un archivo de exportación valido.'], 400); } }catch(\Exception $e){ return response()->json(['message' => $e->getMessage()], 500); } } }
app/Models/Subgrupo.php +1 −1 Original line number Diff line number Diff line Loading @@ -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'); } }