Loading app/Exports/ContactosExport.php +96 −60 Original line number Diff line number Diff line Loading @@ -4,15 +4,10 @@ use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use App\Models\Contacto; class ContactosExport implements FromCollection, WithHeadings { /** * @return \Illuminate\Support\Collection */ protected $contactIds; protected $extraFields; protected $filters; Loading @@ -27,13 +22,38 @@ public function __construct($contactIds, $extraFields = [], $filters = []) public function collection() { $query = Contacto::query(); // Si se envían IDs específicos if (!empty($this->contactIds)) { $query->whereIn('contactos.id', $this->contactIds); } // Filtros adicionales // Aplicar filtros adicionales usando relaciones $this->applyFilters($query); // Cargar relaciones necesarias $contactos = $query->with([ 'profesion', 'cargo', 'caracteristicas', 'telefonos', 'pareja', 'correos' ])->get(); // Mapear los datos a un formato exportable return $contactos->map(function ($contacto) { return $this->formatContactoData($contacto); }); } public function headings(): array { $defaultHeadings = ['Profesión', 'Nombre', 'Apellido Paterno', 'Apellido Materno', 'Cargo']; $extraHeadings = $this->getExtraHeadings(); return array_merge($defaultHeadings, $extraHeadings); } private function applyFilters($query) { if (!empty($this->filters['listas'])) { $query->orWhereHas('listas', function ($q) { $q->whereIn('listas.id', $this->filters['listas']); Loading @@ -57,10 +77,10 @@ public function collection() $q->whereIn('cargos.id', $this->filters['cargos']); }); } } $contactos = $query->with(['profesion', 'cargo', 'caracteristicas', 'telefonos', 'pareja'])->get(); return $contactos->map(function ($contacto) { private function formatContactoData($contacto) { $defaultData = [ 'Profesión' => $contacto->profesion->abreviatura ?? 'N/A', 'Nombre' => $contacto->nombre, Loading @@ -71,55 +91,71 @@ public function collection() $extraData = []; foreach ($this->extraFields as $field) { if ($field === 'domicilio') { // Agregar detalles del domicilio $extraData['Domicilio Oficial'] = $contacto->domicilio_oficial ?? 'N/A'; $extraData['Código Postal'] = $contacto->codigo_postal ?? 'N/A'; $extraData['Localidad Oficial'] = $contacto->localidad_oficial ?? 'N/A'; $extraData['Municipio Oficial'] = $contacto->municipio_oficial ?? 'N/A'; $extraData['Estado'] = $contacto->estado ?? 'N/A'; $extraData['País'] = $contacto->pais ?? 'N/A'; } elseif ($field === 'cumpleanos') { 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'; }else if($field === 'telefonos'){ $extraData['Número de teléfono'] = $contacto->telefonos->pluck('numero')->join(', ') ?? 'N/A'; $extraData['Tipo'] = $contacto->telefonos->pluck('tipo')->join(', ') ?? 'N/A'; $extraData['Estatus'] = $contacto->telefonos->pluck('estatus')->join(', ') ?? 'N/A'; $extraData['Extensión'] = $contacto->telefonos->pluck('ext')->join(', ') ?? 'N/A'; $extraData['ID Radio'] = $contacto->telefonos->pluck('id_radio')->join(', ') ?? 'N/A'; $extraData['Observaciones'] = $contacto->telefonos->pluck('observaciones')->join(', ') ?? 'N/A'; }else if($field === 'conyuge'){ $extraData['Cónyuge'] = $contacto->pareja->nombre && $contacto->pareja->ap_paterno && $contacto->pareja->ap_materno ? $contacto->pareja->nombre . ' ' . $contacto->ap_paterno . ' ' . $contacto->pareja->ap_materno 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', 'ID Radio' => $contacto->telefonos->pluck('id_radio')->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); }); } public function headings(): array private function getExtraHeadings() { $defaultHeadings = ['Profesión', 'Nombre', 'Apellido Paterno', 'Apellido Materno', 'Cargo']; $extraHeadings = ''; $headings = []; foreach ($this->extraFields as $field) { if ($field === 'domicilio') { $extraHeadings = ['Domicilio', 'Código Postal', 'Localidad', 'Municipio', 'Estado', 'Pais']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'cumpleanos') { $extraHeadings = ['Cumpleaños']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'telefonos') { $extraHeadings = ['Teléfonos', 'Tipo', 'Estatus', 'Extensión', 'ID Radio', 'Observaciones']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'conyuge') { $extraHeadings[] = 'Cónyuge'; 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', 'ID Radio', 'Observaciones']); break; case 'conyuge': $headings[] = 'Cónyuge'; break; case 'email': $headings = array_merge($headings, ['Correo Electrónico', 'Tipo de Correo Electrónico']); break; } } return $defaultHeadings; return $headings; } } No newline at end of file Loading
app/Exports/ContactosExport.php +96 −60 Original line number Diff line number Diff line Loading @@ -4,15 +4,10 @@ use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use App\Models\Contacto; class ContactosExport implements FromCollection, WithHeadings { /** * @return \Illuminate\Support\Collection */ protected $contactIds; protected $extraFields; protected $filters; Loading @@ -27,13 +22,38 @@ public function __construct($contactIds, $extraFields = [], $filters = []) public function collection() { $query = Contacto::query(); // Si se envían IDs específicos if (!empty($this->contactIds)) { $query->whereIn('contactos.id', $this->contactIds); } // Filtros adicionales // Aplicar filtros adicionales usando relaciones $this->applyFilters($query); // Cargar relaciones necesarias $contactos = $query->with([ 'profesion', 'cargo', 'caracteristicas', 'telefonos', 'pareja', 'correos' ])->get(); // Mapear los datos a un formato exportable return $contactos->map(function ($contacto) { return $this->formatContactoData($contacto); }); } public function headings(): array { $defaultHeadings = ['Profesión', 'Nombre', 'Apellido Paterno', 'Apellido Materno', 'Cargo']; $extraHeadings = $this->getExtraHeadings(); return array_merge($defaultHeadings, $extraHeadings); } private function applyFilters($query) { if (!empty($this->filters['listas'])) { $query->orWhereHas('listas', function ($q) { $q->whereIn('listas.id', $this->filters['listas']); Loading @@ -57,10 +77,10 @@ public function collection() $q->whereIn('cargos.id', $this->filters['cargos']); }); } } $contactos = $query->with(['profesion', 'cargo', 'caracteristicas', 'telefonos', 'pareja'])->get(); return $contactos->map(function ($contacto) { private function formatContactoData($contacto) { $defaultData = [ 'Profesión' => $contacto->profesion->abreviatura ?? 'N/A', 'Nombre' => $contacto->nombre, Loading @@ -71,55 +91,71 @@ public function collection() $extraData = []; foreach ($this->extraFields as $field) { if ($field === 'domicilio') { // Agregar detalles del domicilio $extraData['Domicilio Oficial'] = $contacto->domicilio_oficial ?? 'N/A'; $extraData['Código Postal'] = $contacto->codigo_postal ?? 'N/A'; $extraData['Localidad Oficial'] = $contacto->localidad_oficial ?? 'N/A'; $extraData['Municipio Oficial'] = $contacto->municipio_oficial ?? 'N/A'; $extraData['Estado'] = $contacto->estado ?? 'N/A'; $extraData['País'] = $contacto->pais ?? 'N/A'; } elseif ($field === 'cumpleanos') { 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'; }else if($field === 'telefonos'){ $extraData['Número de teléfono'] = $contacto->telefonos->pluck('numero')->join(', ') ?? 'N/A'; $extraData['Tipo'] = $contacto->telefonos->pluck('tipo')->join(', ') ?? 'N/A'; $extraData['Estatus'] = $contacto->telefonos->pluck('estatus')->join(', ') ?? 'N/A'; $extraData['Extensión'] = $contacto->telefonos->pluck('ext')->join(', ') ?? 'N/A'; $extraData['ID Radio'] = $contacto->telefonos->pluck('id_radio')->join(', ') ?? 'N/A'; $extraData['Observaciones'] = $contacto->telefonos->pluck('observaciones')->join(', ') ?? 'N/A'; }else if($field === 'conyuge'){ $extraData['Cónyuge'] = $contacto->pareja->nombre && $contacto->pareja->ap_paterno && $contacto->pareja->ap_materno ? $contacto->pareja->nombre . ' ' . $contacto->ap_paterno . ' ' . $contacto->pareja->ap_materno 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', 'ID Radio' => $contacto->telefonos->pluck('id_radio')->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); }); } public function headings(): array private function getExtraHeadings() { $defaultHeadings = ['Profesión', 'Nombre', 'Apellido Paterno', 'Apellido Materno', 'Cargo']; $extraHeadings = ''; $headings = []; foreach ($this->extraFields as $field) { if ($field === 'domicilio') { $extraHeadings = ['Domicilio', 'Código Postal', 'Localidad', 'Municipio', 'Estado', 'Pais']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'cumpleanos') { $extraHeadings = ['Cumpleaños']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'telefonos') { $extraHeadings = ['Teléfonos', 'Tipo', 'Estatus', 'Extensión', 'ID Radio', 'Observaciones']; $defaultHeadings = array_merge($defaultHeadings, $extraHeadings); } elseif ($field === 'conyuge') { $extraHeadings[] = 'Cónyuge'; 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', 'ID Radio', 'Observaciones']); break; case 'conyuge': $headings[] = 'Cónyuge'; break; case 'email': $headings = array_merge($headings, ['Correo Electrónico', 'Tipo de Correo Electrónico']); break; } } return $defaultHeadings; return $headings; } } No newline at end of file