68 lines
2.7 KiB
PHP
68 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use App\Models\Penugasan;
|
|
|
|
class MigrateOldCatatanData extends Command
|
|
{
|
|
protected $signature = 'penugasan:migrate-catatan';
|
|
protected $description = 'Migrasikan data lama dari kolom catatan_admin ke kolom terstruktur';
|
|
|
|
public function handle()
|
|
{
|
|
$penugasans = Penugasan::whereNull('alamat_lokasi')
|
|
->whereNotNull('catatan_admin')
|
|
->get();
|
|
|
|
$this->info("Ditemukan {$penugasans->count()} data lama yang perlu dimigrasi...");
|
|
$updated = 0;
|
|
|
|
foreach ($penugasans as $p) {
|
|
$catatan = $p->catatan_admin;
|
|
$nama = null;
|
|
$alamat = null;
|
|
$noSamb = null;
|
|
|
|
// ── Cari Nama ──────────────────────────────────
|
|
// Pola: "Nama : ...", "Nama DR ...", "Nama: ..."
|
|
if (preg_match('/Nama\s*[:\-]?\s*(.+?)(?=Alamat|Pekerjaan|No\.?|$)/is', $catatan, $m)) {
|
|
$nama = trim($m[1]);
|
|
}
|
|
|
|
// ── Cari Alamat ─────────────────────────────────
|
|
// Pola: "Alamat: ...", "Alamat BR. ..."
|
|
if (preg_match('/Alamat\s*[:\-]?\s*(.+?)(?=Pekerjaan|No\.?|Nama|$)/is', $catatan, $m)) {
|
|
$alamat = trim($m[1]);
|
|
}
|
|
|
|
// ── Cari No Sambungan ───────────────────────────
|
|
// Pola: "no sambungan 0032", "No sambungannya 0008", "no samb 0032"
|
|
if (preg_match('/no\.?\s*samb(?:ungan(?:nya)?)?\s*[:\-]?\s*([0-9]+)/is', $catatan, $m)) {
|
|
$noSamb = trim($m[1]);
|
|
}
|
|
|
|
// Bersihkan trailing punct dari hasil parsing
|
|
$nama = $nama ? rtrim($nama, ' ,;.') : null;
|
|
$alamat = $alamat ? rtrim($alamat, ' ,;.') : null;
|
|
|
|
// Hanya update kalau minimal ada salah satu yang berhasil di-parse
|
|
if ($nama || $alamat || $noSamb) {
|
|
$p->update([
|
|
'nama_pelanggan' => $nama,
|
|
'alamat_lokasi' => $alamat,
|
|
'no_sambungan' => $noSamb,
|
|
]);
|
|
$updated++;
|
|
$this->line(" ✅ ID #{$p->id_penugasan} → Nama: $nama | Alamat: $alamat | No: $noSamb");
|
|
} else {
|
|
$this->line(" ⚠️ ID #{$p->id_penugasan} → Format tidak dikenali: \"{$catatan}\"");
|
|
}
|
|
}
|
|
|
|
$this->info("\n✅ Selesai! $updated dari {$penugasans->count()} data berhasil dimigrasi.");
|
|
return 0;
|
|
}
|
|
}
|