File: /var/www/informe-admision/app/Exports/AdmissionsReportExport.php
<?php
namespace App\Exports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStyles;
use Maatwebsite\Excel\Concerns\WithTitle;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class AdmissionsReportExport implements FromArray, WithHeadings, WithStyles, WithTitle, ShouldAutoSize
{
private $list;
public function __construct(Collection $list)
{
$this->list = $list;
}
public function title(): string
{
return 'Postulaciones';
}
#SÁBANA COMPLETA DE COLUMNAS
public function headings(): array
{
return [
#IDENTIFICACIÓN
'ID',
'Año Postulación',
'Familia',
'Estado',
#POSTULANTE
'Postulante: Apellido Paterno',
'Postulante: Apellido Materno',
'Postulante: Nombres',
'Postulante: RUT',
'Postulante: Fecha Nacimiento',
'Postulante: Familia Antigua',
'Postulante: Familia Nueva',
'Postulante: Ex Familia Bradford',
'Postulante: Ex Alumno',
'Postulante: Año a Postular',
'Postulante: Nivel a Postular',
'Postulante: Estado Actual',
#CONTACTO PADRES
'Correo Madre',
'Correo Padre',
#APODERADO
'Apoderado: Apellido Paterno',
'Apoderado: Apellido Materno',
'Apoderado: Nombres',
'Apoderado: RUT',
'Apoderado: Correo',
#ENTREVISTA APODERADO
'Entrevista Apoderado: Observación',
'Entrevista Apoderado: Entrevistadores',
'Entrevista Apoderado: Comentario del Entrevistado',
#MATRÍZ RESULTADO OBSERVACIÓN
'Matríz: Grupo',
'Matríz: Edad',
'Matríz: Actividad Grupal (máx 18)',
'Matríz: Lenguaje (máx 14)',
'Matríz: Conceptos Matemáticos (máx 6)',
'Matríz: Motricidad Fina y Figura Humana (máx 8)',
'Matríz: Atención y Autonomía (máx 18)',
'Matríz: Obs. Generales (máx 10)',
'Matríz: Puntos Obtenidos (máx 74)',
'Matríz: Porcentaje',
'Matríz: Evaluadora',
'Matríz: Nota',
'Matríz: Jardín',
'Matríz: Fecha Evaluación',
'Matríz: Comentarios de Evaluación',
#COMENTARIO EVALUACIÓN DE PADRES
'Comentario Evaluación de Padres',
#AUDITORÍA
'Fecha Creación',
'Última Actualización',
];
}
public function array(): array
{
$rows = [];
foreach ($this->list as $a) {
$d = $a->dataUploadsDetails;
$family_display = !empty($a->family) ? implode(' ', array_map('ucfirst', explode('-', $a->family->name))) : '-';
$status_display = $this->statusLabel($a->status);
$rows[] = [
$a->id,
!empty($a->year) ? $a->year : '-',
$family_display,
$status_display,
!empty($d) && !empty($d->applicant_father_lastname) ? $d->applicant_father_lastname : '-',
!empty($d) && !empty($d->applicant_mother_lastname) ? $d->applicant_mother_lastname : '-',
!empty($d) && !empty($d->applicant_names) ? $d->applicant_names : '-',
!empty($d) && !empty($d->applicant_rut) ? $d->applicant_rut : '-',
!empty($d) && !empty($d->applicant_birth_date) ? $d->applicant_birth_date : '-',
!empty($d) && !empty($d->old_family) ? $d->old_family : '-',
!empty($d) && !empty($d->new_family) ? $d->new_family : '-',
!empty($d) && !empty($d->ex_bradford_family) ? $d->ex_bradford_family : '-',
!empty($d) && !empty($d->ex_student) ? $d->ex_student : '-',
!empty($d) && !empty($d->application_year) ? $d->application_year : '-',
!empty($a->level) ? $a->level->level : '-',
!empty($d) && !empty($d->current_status) ? $d->current_status : '-',
!empty($d) && !empty($d->mother_email) ? $d->mother_email : '-',
!empty($d) && !empty($d->father_email) ? $d->father_email : '-',
!empty($d) && !empty($d->guardian_father_lastname) ? $d->guardian_father_lastname : '-',
!empty($d) && !empty($d->guardian_mother_lastname) ? $d->guardian_mother_lastname : '-',
!empty($d) && !empty($d->guardian_names) ? $d->guardian_names : '-',
!empty($d) && !empty($d->guardian_rut) ? $d->guardian_rut : '-',
!empty($d) && !empty($d->guardian_email) ? $d->guardian_email : '-',
!empty($d) && !empty($d->interview_observation) ? $d->interview_observation : '-',
!empty($d) && !empty($d->interviewers) ? $d->interviewers : '-',
!empty($d) && !empty($d->interviewee_comment) ? $d->interviewee_comment : '-',
!empty($a->group_name) ? $a->group_name : '-',
!empty($a->age) ? $a->age : '-',
$a->activity_group_score !== null ? $a->activity_group_score : '-',
$a->language_score !== null ? $a->language_score : '-',
$a->math_concepts_score !== null ? $a->math_concepts_score : '-',
$a->fine_motor_score !== null ? $a->fine_motor_score : '-',
$a->attention_autonomy_score !== null ? $a->attention_autonomy_score : '-',
$a->general_observations_score !== null ? $a->general_observations_score : '-',
$a->total_points !== null ? $a->total_points : '-',
$a->percentage !== null ? $a->percentage . '%' : '-',
!empty($a->evaluator) ? $a->evaluator : '-',
$a->grade !== null ? $a->grade : '-',
!empty($a->garden) ? $a->garden : '-',
!empty($a->evaluation_date) ? $a->evaluation_date : '-',
!empty($a->comments) ? $a->comments : '-',
!empty($a->evaluation_comments) ? $a->evaluation_comments : '-',
!empty($a->created_at) ? (string) $a->created_at : '-',
!empty($a->updated_at) ? (string) $a->updated_at : '-',
];
}
return $rows;
}
public function styles(Worksheet $sheet)
{
$last_column = $sheet->getHighestColumn();
$last_row = $sheet->getHighestRow();
#ESTILO HEADER
$sheet->getStyle('A1:' . $last_column . '1')->applyFromArray([
'font' => [
'bold' => true,
'color' => ['rgb' => 'FFFFFF'],
'size' => 11,
],
'fill' => [
'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
'startColor' => ['rgb' => '0D6EFD'],
],
'alignment' => [
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'wrapText' => true,
],
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['rgb' => '000000'],
],
],
]);
#ALTURA DE LA FILA DE HEADER
$sheet->getRowDimension(1)->setRowHeight(38);
$sheet->freezePane('A2');
if ($last_row > 1) {
#ESTILO GENERAL DE LOS DATOS
$sheet->getStyle('A2:' . $last_column . $last_row)->applyFromArray([
'font' => [
'size' => 10,
],
'alignment' => [
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'wrapText' => false,
],
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['rgb' => 'DEE2E6'],
],
],
]);
#FILAS ALTERNADAS (ZEBRA)
for ($r = 2; $r <= $last_row; $r++) {
if ($r % 2 == 0) {
$sheet->getStyle('A' . $r . ':' . $last_column . $r)->applyFromArray([
'fill' => [
'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
'startColor' => ['rgb' => 'F5F7FB'],
],
]);
}
}
}
return [];
}
private function statusLabel($status)
{
if ($status == 'pending') {
return 'Lista de Espera';
}
if ($status == 'approved') {
return 'Aprobada';
}
if ($status == 'rejected') {
return 'Rechazada';
}
return $status;
}
}