simedkom/database/seeders/IssueManagementSeeder.php

87 lines
3.3 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\GovernmentAgency;
use App\Models\IssueManagement;
use App\Models\Legacy\OldIssueManagement;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
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);
}
}
}