diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index a8e2b9b..ed1fc64 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -155,21 +155,65 @@ class DashboardController extends Controller ->all(); $keyword = request('keyword'); $kategori = request('kategori'); + $kategoriHeader = request('kategori_header'); + $unitFilter = request('unit'); - $kategoriIds = is_array($kategori) + $kategoriValues = is_array($kategori) ? array_values(array_filter($kategori)) : array_values(array_filter(explode(',', (string) $kategori))); + $kategoriHeaderValues = is_array($kategoriHeader) + ? array_values(array_filter($kategoriHeader)) + : array_values(array_filter(explode(',', (string) $kategoriHeader))); + $allKategoriValues = array_values(array_filter(array_merge($kategoriValues, $kategoriHeaderValues))); + $kategoriTypes = []; + $kategoriIds = []; + foreach ($allKategoriValues as $val) { + $lower = strtolower(trim((string) $val)); + if (in_array($lower, ['akreditasi', 'akre'], true)) { + $kategoriTypes[] = 'akreditasi'; + continue; + } + if ($lower === 'hukum') { + $kategoriTypes[] = 'hukum'; + continue; + } + if ($lower === 'lainnya') { + $kategoriTypes[] = 'lainnya'; + continue; + } + $kategoriIds[] = $val; + } $unitFilterIds = is_array($unitFilter) ? array_values(array_filter($unitFilter)) : array_values(array_filter(explode(',', (string) $unitFilter))); if (!empty($unitFilterIds)) { $unitIds = array_values(array_intersect($unitIds, $unitFilterIds)); } - $query = FileDirectory::with('kategori')->where('statusenabled', true) + $baseQuery = FileDirectory::with('kategori') + ->where('statusenabled', true) ->where('status_action', 'approved') - ->whereIn('id_unit_kerja', $unitIds) - ->when(!empty($kategoriIds), function ($q) use ($kategoriIds) { - $q->whereIn('master_kategori_directory_id', $kategoriIds); + ->whereIn('id_unit_kerja', $unitIds); + + $query = (clone $baseQuery) + ->when(!empty($kategoriIds) || !empty($kategoriTypes), function ($q) use ($kategoriIds, $kategoriTypes) { + $q->where(function ($sub) use ($kategoriIds, $kategoriTypes) { + $hasClause = false; + if (!empty($kategoriIds)) { + $sub->whereIn('master_kategori_directory_id', $kategoriIds); + $hasClause = true; + } + if (in_array('akreditasi', $kategoriTypes, true)) { + $sub->where('is_akre', true); + $hasClause = true; + } + if (in_array('hukum', $kategoriTypes, true)) { + $hasClause ? $sub->orWhereNotNull('kategori_hukum') : $sub->whereNotNull('kategori_hukum'); + $hasClause = true; + } + if (in_array('lainnya', $kategoriTypes, true)) { + $hasClause ? $sub->orWhereNotNull('master_kategori_directory_id') : $sub->whereNotNull('master_kategori_directory_id'); + } + }); }) ->when($keyword, function ($q) use ($keyword) { $q->where(function ($sub) use ($keyword) { @@ -185,10 +229,23 @@ class DashboardController extends Controller $item->nama_kategori = $item->kategori->nama_kategori_directory ?? $item->kategori_hukum ?? null; return $item; }); + $kategoriList = (clone $baseQuery)->get()->map(function($item){ + if ($item->is_akre) { + return ['id' => 'akreditasi', 'label' => 'Kategori Akreditasi']; + } + if (!empty($item->kategori_hukum)) { + return ['id' => 'hukum', 'label' => 'Kategori Hukum']; + } + $label = $item->kategori->nama_kategori_directory ?? $item->nama_kategori_directory ?? 'Kategori'; + $id = $item->master_kategori_directory_id ?? $label; + return ['id' => (string) $id, 'label' => $label]; + })->unique('id')->values(); + $payload = [ 'status' => true, 'message' => 'Berhasil mendapatkan data', 'data' => $items, + 'kategori_list' => $kategoriList, 'pagination' => [ 'current_page' => $data->currentPage(), 'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null, @@ -928,18 +985,61 @@ class DashboardController extends Controller $keyword = request('keyword'); $unitId = request('unit'); $kategori = request('kategori'); + $kategoriHeader = request('kategori_header'); $unitIds = is_array($unitId) ? array_values(array_filter($unitId)) : array_values(array_filter(explode(',', (string) $unitId))); - $kategoriIds = is_array($kategori) + $kategoriValues = is_array($kategori) ? array_values(array_filter($kategori)) : array_values(array_filter(explode(',', (string) $kategori))); - $query = FileDirectory::with('kategori')->where('statusenabled', true)->where('status_action', 'approved') + $kategoriHeaderValues = is_array($kategoriHeader) + ? array_values(array_filter($kategoriHeader)) + : array_values(array_filter(explode(',', (string) $kategoriHeader))); + $allKategoriValues = array_values(array_filter(array_merge($kategoriValues, $kategoriHeaderValues))); + $kategoriTypes = []; + $kategoriIds = []; + foreach ($allKategoriValues as $val) { + $lower = strtolower(trim((string) $val)); + if (in_array($lower, ['akreditasi', 'akre'], true)) { + $kategoriTypes[] = 'akreditasi'; + continue; + } + if ($lower === 'hukum') { + $kategoriTypes[] = 'hukum'; + continue; + } + if ($lower === 'lainnya') { + $kategoriTypes[] = 'lainnya'; + continue; + } + $kategoriIds[] = $val; + } + $baseQuery = FileDirectory::with('kategori') + ->where('statusenabled', true)->where('status_action', 'approved') ->when(!empty($unitIds), function ($q) use ($unitIds) { $q->whereIn('id_unit_kerja', $unitIds); - }) - ->when(!empty($kategoriIds), function ($q) use ($kategoriIds) { - $q->whereIn('master_kategori_directory_id', $kategoriIds); + }); + + $query = (clone $baseQuery) + ->when(!empty($kategoriIds) || !empty($kategoriTypes), function ($q) use ($kategoriIds, $kategoriTypes) { + $q->where(function ($sub) use ($kategoriIds, $kategoriTypes) { + $hasClause = false; + if (!empty($kategoriIds)) { + $sub->whereIn('master_kategori_directory_id', $kategoriIds); + $hasClause = true; + } + if (in_array('akreditasi', $kategoriTypes, true)) { + $hasClause ? $sub->orWhere('is_akre', true) : $sub->where('is_akre', true); + $hasClause = true; + } + if (in_array('hukum', $kategoriTypes, true)) { + $hasClause ? $sub->orWhereNotNull('kategori_hukum') : $sub->whereNotNull('kategori_hukum'); + $hasClause = true; + } + if (in_array('lainnya', $kategoriTypes, true)) { + $hasClause ? $sub->orWhereNotNull('master_kategori_directory_id') : $sub->whereNotNull('master_kategori_directory_id'); + } + }); }) ->when($keyword, function ($q) use ($keyword) { $q->where(function ($sub) use ($keyword) { @@ -962,10 +1062,23 @@ class DashboardController extends Controller return $item; }); + $kategoriList = (clone $baseQuery)->get()->map(function($item){ + if ($item->is_akre) { + return ['id' => 'akreditasi', 'label' => 'Kategori Akreditasi']; + } + if (!empty($item->kategori_hukum)) { + return ['id' => 'hukum', 'label' => 'Kategori Hukum']; + } + $label = $item->kategori->nama_kategori_directory ?? $item->nama_kategori_directory ?? 'Kategori'; + $id = $item->master_kategori_directory_id ?? $label; + return ['id' => (string) $id, 'label' => $label]; + })->unique('id')->values(); + $payload = [ 'status' => true, 'message' => 'Berhasil mendapatkan data', 'data' => $items, + 'kategori_list' => $kategoriList, 'pagination' => [ 'current_page' => $data->currentPage(), 'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null, diff --git a/resources/views/dataUmum/index.blade.php b/resources/views/dataUmum/index.blade.php index 35fd4eb..7ba2d87 100644 --- a/resources/views/dataUmum/index.blade.php +++ b/resources/views/dataUmum/index.blade.php @@ -141,11 +141,11 @@