85 lines
3.2 KiB
PHP
85 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\GovernmentAgency;
|
|
use App\Models\IssueManagement;
|
|
use App\Models\Legacy\OldIssueManagement;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class IssueManagementSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$legacyIssues = OldIssueManagement::all();
|
|
|
|
foreach ($legacyIssues as $legacyIssue) {
|
|
// Cek apakah ada koma (multiple agency) atau tidak
|
|
if (str_contains($legacyIssue->agency, ',')) {
|
|
// Jika multiple, pecah berdasarkan koma
|
|
$agencyNames = explode(',', $legacyIssue->agency);
|
|
} else {
|
|
// Jika single, tetap jadikan array agar bisa di-loop
|
|
$agencyNames = [$legacyIssue->agency];
|
|
}
|
|
|
|
// Hapus spasi pada nama agency
|
|
$agencyNames = array_map('trim', $agencyNames);
|
|
|
|
// Ambil semua agency yang ada di database yang sesuai dengan nama agency
|
|
// Opsi 1
|
|
// $agencies = GovernmentAgency::whereIn('name', $agencyNames)->get();
|
|
// $agencies = GovernmentAgency::whereIn('name', $agencyNames)->get();
|
|
// Opsi 2
|
|
$agencies = GovernmentAgency::where(function ($query) use ($agencyNames) {
|
|
foreach ($agencyNames as $name) {
|
|
$query->orWhere('name', 'LIKE', "%$name%");
|
|
}
|
|
})->get();
|
|
|
|
// Membuat array untuk menyimpan id agency yang ditemukan
|
|
$agencyIds = [];
|
|
|
|
// Loop untuk mencocokkan nama agency dengan id
|
|
foreach ($agencyNames as $name) {
|
|
// Cari agency yang cocok dengan nama ini
|
|
$agency = $agencies->firstWhere('name', $name);
|
|
|
|
if ($agency) {
|
|
$agencyIds[] = $agency->id;
|
|
} else {
|
|
$otherAgency = GovernmentAgency::where('name', 'Lainnya')->first();
|
|
|
|
Log::info('OPD yang tidak cocok: '.$name);
|
|
|
|
$agencyIds[] = $otherAgency->id;
|
|
}
|
|
}
|
|
|
|
// Membuat issue management baru dan mengaitkan dengan agency
|
|
$createdIssueManagement = IssueManagement::create([
|
|
'id' => $legacyIssue->id,
|
|
'location_id' => $legacyIssue->locus,
|
|
'sub_location_id' => $legacyIssue->sub_locus,
|
|
'classification_id' => $legacyIssue->classification,
|
|
'sub_classification_id' => $legacyIssue->sub_classification,
|
|
'issue' => $legacyIssue->issue,
|
|
'response' => $legacyIssue->response,
|
|
'description' => $legacyIssue->description,
|
|
'created_at' => $legacyIssue->created_at,
|
|
'updated_at' => $legacyIssue->updated_at,
|
|
'deleted_at' => $legacyIssue->deleted_at,
|
|
'enhancer_id' => in_array($legacyIssue->enhancer, [0, 3]) ? 1 : $legacyIssue->enhancer,
|
|
'media_monitoring_id' => $legacyIssue->media_monitoring,
|
|
]);
|
|
|
|
// Attach agency IDs ke issue management
|
|
$createdIssueManagement->governmentAgencies()->attach($agencyIds);
|
|
}
|
|
}
|
|
}
|