60 lines
1.5 KiB
PHP
60 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Imports;
|
|
|
|
use App\Models\Warga;
|
|
use App\Models\Wilayah;
|
|
use Maatwebsite\Excel\Concerns\ToModel;
|
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
|
|
|
class WargaImport implements ToModel, WithHeadingRow
|
|
{
|
|
public function headingRow(): int
|
|
{
|
|
return 9;
|
|
}
|
|
|
|
public function model(array $row)
|
|
{
|
|
if (!isset($row['nik']) || !isset($row['nama_lengkap'])) {
|
|
return null;
|
|
}
|
|
|
|
// Cari atau buat wilayah berdasarkan dusun dan rw
|
|
$wilayah = null;
|
|
if (isset($row['dusun']) && isset($row['rw'])) {
|
|
$wilayah = Wilayah::firstOrCreate([
|
|
'dusun' => $row['dusun'],
|
|
'rw' => str_pad($row['rw'], 2, '0', STR_PAD_LEFT),
|
|
], [
|
|
'latitude' => 0,
|
|
'longitude' => 0,
|
|
]);
|
|
}
|
|
|
|
$warga = Warga::firstOrNew(['nik' => $row['nik']]);
|
|
|
|
$warga->nama = $row['nama_lengkap'];
|
|
|
|
// Hanya update alamat jika ada di excel, atau beri default jika data baru
|
|
if (isset($row['alamat'])) {
|
|
$warga->alamat = $row['alamat'];
|
|
} elseif (!$warga->exists) {
|
|
$warga->alamat = '-';
|
|
}
|
|
|
|
$warga->dusun = $row['dusun'] ?? '-';
|
|
$warga->rw = $row['rw'] ?? '-';
|
|
$warga->wilayah_id = $wilayah ? $wilayah->id : null;
|
|
|
|
if (!$warga->exists) {
|
|
$warga->rt = '00';
|
|
}
|
|
|
|
$warga->is_aktif = true;
|
|
$warga->save();
|
|
|
|
return $warga;
|
|
}
|
|
}
|