@extends('layouts.main') @section('content') @php $groupDefinitions = [ 'Master' => [ 'icon' => 'fas fa-cubes', 'permissions' => [ 'master_produk.show', 'master_produk.index', 'master_produk.create', 'master_produk.edit', 'master_produk.store', 'master_produk.update', 'master_produk.delete', 'master_produk.destroy', 'master_produk.toggle', 'produk.create', 'produk.store', 'produk.edit', 'produk.update', 'produk.destroy', 'categories.index', 'categories.create', 'categories.store', 'categories.edit', 'categories.update', 'categories.destroy', 'kategori.destroy', 'units.index', 'units.create', 'units.store', 'units.edit', 'units.update', 'units.destroy', 'stock_opname.index', 'stock_opname.create', 'stock_opname.store', 'stock_opname.show', 'stock_opname.edit', 'stock_opname.update', 'stock_opname.destroy', 'stock_opname.approve', 'product_losses.create', 'product_losses.show', 'product_losses.edit', 'product_losses.destroy', ], ], 'Penjualan Produk' => [ 'icon' => 'fas fa-receipt', 'permissions' => [ 'penjualan.index', 'penjualan.show', 'penjualan.create', 'penjualan.store', 'penjualan.edit', 'penjualan.update', 'penjualan.destroy', 'penjualan.approve', 'penjualan.unapprove', 'penjualan.batal', 'retur-penjualan.index', 'retur-penjualan.show', 'retur-penjualan.create', 'retur-penjualan.store', 'retur-penjualan.destroy', 'histori-harga-jual.index', 'histori-harga-jual.destroy-selected', 'histori-harga-jual.destroy-by-date', ], ], 'Pembelian Produk' => [ 'icon' => 'fas fa-cart-arrow-down', 'permissions' => [ 'pembelian.index', 'pembelian.show', 'pembelian.create', 'pembelian.store', 'pembelian.edit', 'pembelian.update', 'pembelian.destroy', 'pembelian.approve', 'pembelian.unapprove', 'pembelian.batal', 'retur-pembelian.index', 'retur-pembelian.show', 'retur-pembelian.create', 'retur-pembelian.store', 'retur-pembelian.destroy', 'histori-harga-beli.index', 'histori-harga-beli.destroy-selected', 'histori-harga-beli.destroy-by-date', ], ], 'Laporan' => [ 'icon' => 'fas fa-folder-open', 'permissions' => [ 'sales_report.index', 'sales_report.sales_pdf', 'purchases_report.index', 'purchase_report.purchases_pdf', 'profit_loss.index', 'operational_expenses.index', 'operational_expenses.create', 'operational_expenses.store', 'operational_expenses.edit', 'operational_expenses.update', 'operational_expenses.destroy', ], ], 'Daftar Pihak' => [ 'icon' => 'fas fa-users', 'permissions' => [ 'customers.index', 'customers.show', 'customers.create', 'customers.store', 'customers.edit', 'customers.update', 'customers.destroy', 'suppliers.index', 'suppliers.show', 'suppliers.create', 'suppliers.store', 'suppliers.edit', 'suppliers.update', 'suppliers.destroy', ], ], 'Lainnya' => [ 'icon' => 'fas fa-microchip', 'permissions' => [ 'users.index', 'users.create', 'users.store', 'users.edit', 'users.update', 'users.destroy', 'roles.index', 'roles.edit', 'roles.update', 'profiles', 'profil.edit', 'profil.update', 'backup', 'backup.index', 'backup.run', 'backup.download', 'backup.destroy', 'logs.index', ], ], ]; $permissionsByName = $permissions->keyBy('name'); $usedPermissionNames = collect(); $groupedPermissions = collect($groupDefinitions)->map(function ($group) use ($permissionsByName, &$usedPermissionNames) { $items = collect($group['permissions']) ->map(fn ($name) => $permissionsByName->get($name)) ->filter() ->values(); $usedPermissionNames = $usedPermissionNames->merge($items->pluck('name')); return [ 'icon' => $group['icon'], 'items' => $items, ]; })->filter(fn ($group) => $group['items']->isNotEmpty()); $otherPermissions = $permissions ->reject(fn ($permission) => $usedPermissionNames->contains($permission->name)) ->values(); if ($otherPermissions->isNotEmpty()) { $groupedPermissions->put('Permission Lainnya', [ 'icon' => 'fas fa-ellipsis-h', 'items' => $otherPermissions, ]); } $isSuperadmin = $role->name === 'superadmin'; @endphp