HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
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/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/Exports/AcademyUsersExport.php
<?php

namespace App\Http\Controllers\Exports;

use App\AcademyStateUser;
use App\AcademyUser;
use App\PaymentTransaction;
use App\User;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;

class AcademyUsersExport implements FromCollection, WithHeadings, WithEvents
{
    private $results;
    private $type_academy;

    public function __construct($results, $type_academy)
    {
        $this->results = $results;
        $this->type_academy = $type_academy;
    }

    // set the headings
    public function headings(): array
    {
        $heading = [
            __('messages.academy_users.tag2-1'),
            __('messages.academy_users.tag2-2'),
            __('messages.academy_users.tag43'),
            __('messages.academy_users.tag2-12'),
            __('messages.academy_users.tag2-3'),
            __('messages.academy_users.tag2-4'),
            'Código estudiante',
            __('messages.academy_users.tag2-5'),
            __('messages.academy_users.tag2-6'),
            __('messages.academy_users.tag2-7'),
            __('messages.academy_users.tag2-8'),
            __('messages.academy_users.tag2-9'),
            __('messages.academy_users.tag2-10'),
            __('messages.academy_users.student_address'),
            __('messages.academy_users.tag1-1'),
            __('messages.academy_users.tag1-2'),
            __('messages.academy_users.tag1-3'),
            __('messages.academy_users.tag1-4'),
            __('messages.academy_users.tag1-5'),
            __('messages.academy_users.tag15-1'),
            __('messages.academy_users.tag15-2'),
            __('messages.academy_users.tag15-3'),
            __('messages.academy_users.tag15-4'),
            __('messages.academy_users.tag15-5'),
            __('messages.academy_users.tag15-6'),
            __('messages.academy_users.observations'),

            // Campos persona jurídica
            __('messages.academy_users.type_person'),
            __('messages.academy_users.advisor_nit'),
            __('messages.academy_users.advisor_business_name'),
            __('messages.academy_users.advisor_property_name'),
            __('messages.academy_users.advisor_isic_code'),
            __('messages.academy_users.advisor_phone'),
            __('messages.academy_users.advisor_cell_phone'),
            __('messages.academy_users.advisor_mail'),
            __('messages.academy_users.address_advisor'),

            __('messages.academy_users.tag37'),
            __('messages.academy_users.tag38'),
            config('app.location') . __('messages.academy_users.tag2'),
            __('messages.academy_users.tag58'),
            __('messages.academy_users.tag64-1'),
            __('messages.academy_users.tag64-2'),
            __('messages.academy_users.tag3-1'),
            __('messages.academy_users.tag3-2'),
            __('messages.academy_users.tag31-1'),
            __('messages.academy_users.tag31-2'),
            __('messages.academy_users.tag59'),
            __('messages.academy_users.tag60'),
            __('messages.academy_users.tag8'),
            __('messages.academy_users.tag45'),
            __('messages.academy_users.tag27-1'),
            __('messages.academy_users.tag27-2'),
            __('messages.academy_users.last_status_date'),
            'Términos y Condiciones',
            __('messages.academy_document.app_certificate'),
            __('messages.academy_users.reports'),
            __('messages.academy_users.tag42'),
        ];


        if ($this->type_academy != 'children') {
            $heading = array_filter($heading, static function ($element) {
                return $element !== __('messages.academy_users.tag2-5');
            });
        }

        return $heading;
    }

    // freeze the first row with headings
    public function registerEvents(): array
    {
        return [];
    }

    public function collection()
    {
        $data = [];
        foreach ($this->results as $academyUser) {
            $coaches = '';
            if ($academyUser->coaches) {
                $coaches = $academyUser->coaches;
            }

            $lastPaymentDate = PaymentTransaction::select(DB::raw('MAX(payment_transactions.payment_date) AS last_payment_date'))
                ->join('academy_purchases', 'academy_purchases.payment_transaction_id', '=', 'payment_transactions.id')
                ->join('academy_users', 'academy_users.id', '=', 'academy_purchases.academy_user_id')
                ->where('academy_users.id', $academyUser->id)->first();
            $lastPaymentDate = $lastPaymentDate && $lastPaymentDate->last_payment_date ? \Carbon\Carbon::parse($lastPaymentDate->last_payment_date)->format('Y-m-d h:i:s A') : '';

            $lastStatusDate = AcademyStateUser::select(DB::raw('MAX(academy_state_users.updated_at) AS last_status_date'))
                ->where('academy_user_id', $academyUser->id)
                ->first();
            $lastStatusDate = $lastStatusDate && $lastStatusDate->last_status_date ? \Carbon\Carbon::parse($lastStatusDate->last_status_date)->format('Y-m-d h:i:s A') : '';

            $dataTerms = User::select(DB::raw('GROUP_CONCAT(DISTINCT(terms.version)) AS terms_conditions'))
                ->leftjoin('term_clients', 'term_clients.user_id', '=', 'users.id')
                ->leftjoin('terms', 'terms.id', '=', 'term_clients.term_id')
                ->where('users.id', $academyUser->user_id)
                ->first();

            $dataDocuments = AcademyUser::select(DB::raw('GROUP_CONCAT(DISTINCT(academy_documents.name)) AS academy_documents1'))
                ->leftJoin('academy_document_users', 'academy_document_users.academy_user_id', '=', 'academy_users.id')
                ->leftJoin('academy_documents', 'academy_documents.id', '=', 'academy_document_users.academy_document_id')
                ->where('academy_users.id', $academyUser->id)
                ->first();

            $dataReports = AcademyUser::select(DB::raw('GROUP_CONCAT(DISTINCT(academy_reports.period)) AS academy_reports'))
                ->leftJoin('academy_reports', 'academy_reports.academy_user_id', '=', 'academy_users.id')
                ->where('academy_users.id', $academyUser->id)
                ->first();

            $initialData = array(
                $academyUser->student_name,
                $academyUser->student_last_name,
                $this->getObjectValueByKey($academyUser, 'academy_state.name'),
                $academyUser->photo,
                $academyUser->studentDocumentType,
                $academyUser->identification,
                $academyUser->student_academy_code,
                $academyUser->school_name,
                $academyUser->school_grade,
                $academyUser->birthdate,
                $academyUser->age,
                $academyUser->mail,
                $academyUser->phone,
                $academyUser->direction_student,
                $this->getObjectValueByKey($academyUser, 'academy_users.user.first_name'),
                $this->getObjectValueByKey($academyUser, 'academy_users.user.last_name'),
                $this->getObjectValueByKey($academyUser, 'academy_users.user.email') ?? 'Asignar usuario app',
                $academyUser->contactDocumentType,
                $this->getObjectValueByKey($academyUser, 'academy_users.user.document'),
                $academyUser->advisor_name,
                $academyUser->advisor_last_name,
                $academyUser->advisorDocumentType,
                $academyUser->advisor_identification,
                $academyUser->advisor_relation,
                $academyUser->advisor_ocupation,
                $academyUser->observations,

                // Campos persona jurídica
                $academyUser->type_person,
                $academyUser->advisor_nit,
                $academyUser->advisor_business_name,
                $academyUser->advisor_property_name,
                $academyUser->advisor_isic_code,
                $academyUser->advisor_phone,
                $academyUser->advisor_cell_phone,
                $academyUser->advisor_mail,
                $academyUser->direction_advisor,

                $academyUser->blood_type,
                $academyUser->eps,
                $academyUser->locationName,
                $academyUser->categoryName,
                $academyUser->scheduleName,
                $coaches,
                $academyUser->last_inscription_year,
                $academyUser->discounts,
                $academyUser->tshirt_size,
                $academyUser->uniform_type,
                $academyUser->periodName,
                $academyUser->segmentation,
                \Carbon\Carbon::parse($academyUser->created_at)->format('Y-m-d h:i:s A'),
                $academyUser->review_state,
                $academyUser->payment_status,
                $lastPaymentDate,
                $lastStatusDate,
                $dataTerms->terms_conditions ? 'SI' : 'NO',
                $dataDocuments->academy_documents1 && str_contains($dataDocuments->academy_documents1, 'Certificado de salud APP') ? 'SI' : 'NO',
                $dataReports->academy_reports,
                $academyUser->active === 1 ? 'SI' : 'NO'
            );

            if ($this->type_academy != 'children') {
                array_splice($initialData, 6, 1);
            }

            $data[] = $initialData;
        }
        return collect($data);
    }

    private function getObjectValueByKey($object, $tag)
    {
        foreach ($object as $key => $value) {
            if ($key == $tag)
                return $value;
        }
    }
}