MIF_E31231754/app/Imports/WargaImport.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;
}
}