SIPDAM/samooapk/laravel/app/Console/Commands/MigrateOldCatatanData.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;
}
}