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;
}
}
}