HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
    }
}