62 lines
2.0 KiB
PHP
62 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Exports;
|
|
|
|
use App\Models\Application;
|
|
use App\Models\Attendance;
|
|
use App\Models\Position;
|
|
use App\Models\PusatMengundi;
|
|
use App\Models\SaluranMengundi;
|
|
use App\Models\StaffAssignment;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Collection;
|
|
use OpenSpout\Common\Entity\Row;
|
|
use OpenSpout\Writer\XLSX\Writer;
|
|
|
|
class AttendanceDetailExport
|
|
{
|
|
/**
|
|
* @param Collection<int, StaffAssignment> $assignments
|
|
*/
|
|
public function write(Collection $assignments, string $absolutePath): void
|
|
{
|
|
$writer = new Writer;
|
|
$writer->openToFile($absolutePath);
|
|
|
|
$writer->addRow(Row::fromValues([
|
|
'Pusat Mengundi',
|
|
'Saluran',
|
|
'Nama',
|
|
'Jawatan',
|
|
'Status Kehadiran',
|
|
'Masa Check-in',
|
|
'Catatan',
|
|
]));
|
|
|
|
foreach ($assignments as $assignment) {
|
|
$application = $assignment->application;
|
|
$user = $assignment->user;
|
|
$pusat = $assignment->pusatMengundi;
|
|
$position = $assignment->position;
|
|
$saluran = $assignment->saluranMengundi;
|
|
$attendance = $assignment->attendance;
|
|
$checkInTime = $attendance instanceof Attendance && filled($attendance->check_in_time)
|
|
? Carbon::parse($attendance->check_in_time)->format('d/m/Y H:i')
|
|
: '';
|
|
|
|
$writer->addRow(Row::fromValues([
|
|
$pusat instanceof PusatMengundi ? $pusat->code.' - '.$pusat->name : '',
|
|
$saluran instanceof SaluranMengundi ? $saluran->number : '',
|
|
($application instanceof Application ? $application->name : null) ?: ($user instanceof User ? $user->name : ''),
|
|
$position instanceof Position ? $position->code : '',
|
|
$attendance instanceof Attendance ? $attendance->status : 'not_recorded',
|
|
$checkInTime,
|
|
$attendance instanceof Attendance ? ($attendance->note ?? '') : '',
|
|
]));
|
|
}
|
|
|
|
$writer->close();
|
|
}
|
|
}
|