penjadwalan-ga/app/Imports/LogbookImport.php

65 lines
1.6 KiB
PHP

<?php
namespace App\Imports;
use App\Models\Logbooks;
use Carbon\Carbon;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use PhpOffice\PhpSpreadsheet\Shared\Date;
class LogbookImport implements ToModel, WithValidation, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Logbooks([
'pertemuan' => $row['pertemuan'],
'kelas_id' => $row['kelas_id'],
'tanggal' => $this->transformDate($row['tanggal'] ?? null),
'materi' => $row['materi'] ?? null,
'catatan' => $row['catatan'] ?? null,
'status' => $row['status'] ?? null,
]);
}
private function transformDate($date)
{
if (!$date) {
return null;
}
// Jika tanggal dalam format Excel (angka serial), ubah ke format tanggal
if (is_numeric($date)) {
return Carbon::instance(Date::excelToDateTimeObject($date))->format('Y-m-d');
}
// Jika tanggal dalam format teks, coba parsing
try {
return Carbon::parse($date)->format('Y-m-d');
} catch (\Exception $e) {
return null; // Jika gagal, set ke null
}
}
public function rules(): array
{
return [
'kelas_id' => 'required',
];
}
public function customValidationMessages()
{
return [
'kelas_id.required' => 'ID kelas tidak ditemukan',
];
}
}