diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index 7d2181c..62b026f 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -305,6 +305,9 @@ public function governmentAgency(Request $request){ return DataTables::of($data) ->addIndexColumn() + ->addColumn('issues', function ($data) { + return $data->managementIssues->count(); + }) ->addColumn('action', function ($data) { $showUrl = route('dashboard.government.agencies.show', ['id' => encrypt_id($data->id)]); @@ -1592,7 +1595,7 @@ public function mediaMonitoring(Request $request){ return DataTables::of($data) ->addIndexColumn() ->addColumn('enhancer', function ($data) { - return $data->enhancer->name; + return $data->enhancer ? $data->enhancer->name : 'Undefined'; }) ->addColumn('input_date', function ($data) { return idn_date($data->input_date, 'd F Y'); @@ -1601,7 +1604,11 @@ public function mediaMonitoring(Request $request){ return shorten_text($data->title, 40); }) ->addColumn('link', function ($data) { - return ''.$data->link.''; + if(filled($data->link)){ + return ''.$data->link.''; + }else{ + return '-'; + } }) ->addColumn('issue_status', function ($data) { if ($data->issue) { @@ -1659,9 +1666,6 @@ public function issueManagement(Request $request){ return DataTables::of($data) ->addIndexColumn() - ->addColumn('enhancer', function ($data) { - return $data->enhancer->name; - }) ->addColumn('code', function ($data) { return $data->mediaMonitoring->code; }) diff --git a/app/Models/GovernmentAgency.php b/app/Models/GovernmentAgency.php index 96d38f8..a2f9dff 100644 --- a/app/Models/GovernmentAgency.php +++ b/app/Models/GovernmentAgency.php @@ -3,14 +3,15 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class GovernmentAgency extends Model { + protected $table = 'government_agencies'; protected $fillable = [ 'name', - 'slug', 'short_name', 'location', 'description', diff --git a/app/Models/IssueManagement.php b/app/Models/IssueManagement.php index 3e6eb5d..3a18063 100644 --- a/app/Models/IssueManagement.php +++ b/app/Models/IssueManagement.php @@ -4,9 +4,12 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model\Pivot; +use Illuminate\Database\Eloquent\SoftDeletes; class IssueManagement extends Model { + use SoftDeletes; + protected $table = 'issue_managements'; protected $fillable = [ diff --git a/app/Models/Legacy/OldGovernmentAgency.php b/app/Models/Legacy/OldGovernmentAgency.php new file mode 100644 index 0000000..fe7db9a --- /dev/null +++ b/app/Models/Legacy/OldGovernmentAgency.php @@ -0,0 +1,12 @@ +id(); $table->string('name'); - $table->string('slug')->unique();; $table->string('short_name')->nullable(); $table->text('location')->nullable(); $table->text('description')->nullable(); diff --git a/database/migrations/2025_02_28_105935_create_locations_table.php b/database/migrations/2025_02_28_105935_create_locations_table.php index 14b68d9..37605a5 100644 --- a/database/migrations/2025_02_28_105935_create_locations_table.php +++ b/database/migrations/2025_02_28_105935_create_locations_table.php @@ -14,7 +14,6 @@ public function up(): void Schema::create('locations', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->string('slug')->unique();; $table->text('description')->nullable(); $table->enum('status', ['0', '1'])->default('0'); $table->unsignedBigInteger('enhancer_id'); diff --git a/database/migrations/2025_02_28_105943_create_sub_locations_table.php b/database/migrations/2025_02_28_105943_create_sub_locations_table.php index 619f7ed..fa5f32a 100644 --- a/database/migrations/2025_02_28_105943_create_sub_locations_table.php +++ b/database/migrations/2025_02_28_105943_create_sub_locations_table.php @@ -14,7 +14,6 @@ public function up(): void Schema::create('sub_locations', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->string('slug')->unique();; $table->text('description')->nullable(); $table->enum('status', ['0', '1'])->default('0'); $table->unsignedBigInteger('location_id'); diff --git a/database/migrations/2025_03_03_003155_create_issue_management_table.php b/database/migrations/2025_03_03_003155_create_issue_management_table.php index 527272e..5ec8da8 100644 --- a/database/migrations/2025_03_03_003155_create_issue_management_table.php +++ b/database/migrations/2025_03_03_003155_create_issue_management_table.php @@ -25,10 +25,11 @@ public function up(): void $table->foreign('media_monitoring_id')->references('id')->on('media_monitorings'); $table->enum('issue', ['positif','negatif','netral','krisis']); $table->enum('response', ['positif','negatif','netral','krisis']); - $table->text('description'); + $table->text('description')->nullable(); $table->unsignedBigInteger('enhancer_id'); $table->foreign('enhancer_id')->references('id')->on('users'); $table->timestamps(); + $table->softDeletes(); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a3210b3..aa05bd6 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,6 +2,7 @@ namespace Database\Seeders; +use App\Models\SubLocation; use App\Models\User; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -17,10 +18,13 @@ public function run(): void $this->call(UserSeeder::class); $this->call(ClassificationSeeder::class); $this->call(SubClassificationSeeder::class); + $this->call(LocationSeeder::class); + $this->call(SubLocationSeeder::class); $this->call(CompanySeeder::class); $this->call(MediaSeeder::class); $this->call(JournalistSeeder::class); $this->call(GovernmentAgencySeeder::class); $this->call(MediaMonitoringSeeder::class); + $this->call(IssueManagementSeeder::class); } } diff --git a/database/seeders/GovernmentAgencySeeder.php b/database/seeders/GovernmentAgencySeeder.php index 59b58eb..7320138 100644 --- a/database/seeders/GovernmentAgencySeeder.php +++ b/database/seeders/GovernmentAgencySeeder.php @@ -3,8 +3,10 @@ namespace Database\Seeders; use App\Models\GovernmentAgency; +use App\Models\Legacy\OldGovernmentAgency; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Str; class GovernmentAgencySeeder extends Seeder { @@ -12,13 +14,31 @@ class GovernmentAgencySeeder extends Seeder * Run the database seeds. */ public function run(): void - { - GovernmentAgency::create([ - 'name' => 'Dinas Pendidikan', - 'slug' => 'dinas-pendidikan', - 'short_name' => 'Disdik', - 'description' => 'Dinas yang menangani bidang pendidikan.', - 'enhancer_id' => '1', - ]); +{ + $legacyGovernmentAgencies = OldGovernmentAgency::all(); + + foreach ($legacyGovernmentAgencies as $agency) { + $normalizedAgencyName = trim($agency->name); // Hapus spasi berlebih + + // Cari apakah sudah ada yang mirip dengan nama ini (tanpa memperhatikan huruf besar/kecil) + $existingAgency = GovernmentAgency::whereRaw('LOWER(name) = ?', [strtolower($normalizedAgencyName)])->first(); + + if (!$existingAgency) { + GovernmentAgency::create([ + 'name' => $normalizedAgencyName, // Simpan dengan format aslinya + 'created_at' => $agency->created_at, + 'updated_at' => $agency->updated_at, + 'enhancer_id' => $agency->user_id, + ]); + } } + + // Tambahkan "Lainnya" jika belum ada + GovernmentAgency::firstOrCreate( + ['name' => 'Lainnya'], + ['enhancer_id' => 1] + ); +} + + } diff --git a/database/seeders/IssueManagementSeeder.php b/database/seeders/IssueManagementSeeder.php index 976d2b3..f5c20c6 100644 --- a/database/seeders/IssueManagementSeeder.php +++ b/database/seeders/IssueManagementSeeder.php @@ -2,8 +2,12 @@ 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 { @@ -12,6 +16,71 @@ class IssueManagementSeeder extends Seeder */ 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); + } } + } diff --git a/database/seeders/LocationSeeder.php b/database/seeders/LocationSeeder.php index 7e5d433..201e42e 100644 --- a/database/seeders/LocationSeeder.php +++ b/database/seeders/LocationSeeder.php @@ -2,8 +2,11 @@ namespace Database\Seeders; +use App\Models\Legacy\OldLocation; +use App\Models\Location; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Str; class LocationSeeder extends Seeder { @@ -12,6 +15,18 @@ class LocationSeeder extends Seeder */ public function run(): void { - // + $legacyLocations = OldLocation::all(); + + foreach($legacyLocations as $legacyLocation){ + Location::create([ + 'id' => $legacyLocation->id, + 'name' => $legacyLocation->name, + 'description' => null, + 'status' => $legacyLocation->status, + 'enhancer_id' => $legacyLocation->enhancer, + 'created_at' => $legacyLocation->created_at, + 'updated_at' => $legacyLocation->updated_at, + ]); + } } } diff --git a/database/seeders/SubLocationSeeder.php b/database/seeders/SubLocationSeeder.php index 2a60569..c505d28 100644 --- a/database/seeders/SubLocationSeeder.php +++ b/database/seeders/SubLocationSeeder.php @@ -2,8 +2,11 @@ namespace Database\Seeders; +use App\Models\Legacy\OldSubLocation; +use App\Models\SubLocation; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Str; class SubLocationSeeder extends Seeder { @@ -12,6 +15,19 @@ class SubLocationSeeder extends Seeder */ public function run(): void { - // + $legacySubLocations = OldSubLocation::all(); + + foreach($legacySubLocations as $legacySubLocation){ + SubLocation::create([ + 'id' => $legacySubLocation->id, + 'name' => $legacySubLocation->name, + 'description' => null, + 'status' => $legacySubLocation->status, + 'enhancer_id' => $legacySubLocation->enhancer, + 'created_at' => $legacySubLocation->created_at, + 'updated_at' => $legacySubLocation->updated_at, + 'location_id' => $legacySubLocation->locus, + ]); + } } } diff --git a/resources/views/dashboard/government-agencies/index.blade.php b/resources/views/dashboard/government-agencies/index.blade.php index cfb2a8e..4136786 100644 --- a/resources/views/dashboard/government-agencies/index.blade.php +++ b/resources/views/dashboard/government-agencies/index.blade.php @@ -44,6 +44,7 @@