ajax()) { return $next($request); } Menu::create('portal-customer-sidebar', function ($menu) { $business_id = auth()->user()->business_id; $contact = Contact::where('business_id', $business_id)->findOrFail(auth()->user()->crm_contact_id); $crm_settings = Business::where('id', $business_id)->value('crm_settings'); $crm_settings = ! empty($crm_settings) ? json_decode($crm_settings, true) : []; $enabled_modules = ! empty(session('business.enabled_modules')) ? session('business.enabled_modules') : []; $menu->url(action([\Modules\Portal\Http\Controllers\Customer\DashboardController::class, 'index']), __('portal::lang.nav_home'), [ 'icon' => 'fa fas fa-tachometer-alt', 'active' => request()->segment(1) == 'customer' && request()->segment(2) == 'dashboard', ])->order(1); $menu->url(action([\Modules\Portal\Http\Controllers\Customer\CommunicationController::class, 'index']), __('portal::lang.communications'), [ 'icon' => 'fa fas fa-comments', 'active' => request()->segment(2) == 'communications', ])->order(2); if ($this->moduleEnabled($enabled_modules, ['project', 'Project', 'ProfessionalProject'])) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\ProjectController::class, 'index']), __('portal::lang.my_projects'), [ 'icon' => 'fa fas fa-project-diagram', 'active' => request()->segment(2) == 'projects', ])->order(3); } if ($this->moduleEnabled($enabled_modules, ['maintenance', 'Maintenance'])) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\EquipmentController::class, 'index']), __('portal::lang.my_equipment'), [ 'icon' => 'fa fas fa-cogs', 'active' => request()->segment(2) == 'equipment', ])->order(3); $menu->url(action([\Modules\Portal\Http\Controllers\Customer\WorkOrderController::class, 'index']), __('portal::lang.work_orders'), [ 'icon' => 'fa fas fa-wrench', 'active' => request()->segment(2) == 'work-orders', ])->order(4); $menu->url(action([\Modules\Portal\Http\Controllers\Customer\FieldMissionController::class, 'index']), __('portal::lang.field_missions'), [ 'icon' => 'fa fas fa-map-marked-alt', 'active' => request()->segment(2) == 'field-missions', ])->order(5); } if ($this->moduleEnabled($enabled_modules, ['assetexchange', 'AssetExchange']) && \Module::has('AssetExchange') && \Module::isEnabled('AssetExchange')) { $aex_settings = []; if (\Illuminate\Support\Facades\Schema::hasColumn('business', 'aex_settings')) { $raw = Business::where('id', $business_id)->value('aex_settings'); $aex_settings = ! empty($raw) ? (json_decode($raw, true) ?: []) : []; } if (! empty($aex_settings['portal_listings_enabled'])) { $contact_id = auth()->user()->crm_contact_id; $unreadNotifications = 0; if ($contact_id && \Illuminate\Support\Facades\Schema::hasTable('aex_notifications')) { $unreadNotifications = AexNotification::where('business_id', $business_id) ->where('contact_id', $contact_id) ->whereNull('read_at') ->count(); } $menu->url(route('customer.asset_exchange.listings.index'), __('assetexchange::lang.portal_my_listings'), [ 'icon' => 'fa fas fa-industry', 'active' => request()->segment(2) == 'asset-exchange', ])->order(5); $notifLabel = __('assetexchange::lang.notifications'); if ($unreadNotifications > 0) { $notifLabel .= ' ('.$unreadNotifications.')'; } $menu->url(route('customer.asset_exchange.notifications.index'), $notifLabel, [ 'icon' => 'fa fas fa-bell', 'active' => request()->segment(2) == 'asset-exchange' && request()->segment(3) == 'notifications', ])->order(6); } } if ($this->moduleEnabled($enabled_modules, ['qualitymanagement', 'QualityManagement']) && \Module::has('QualityManagement') && \Module::isEnabled('QualityManagement')) { $module_util = new \App\Utils\ModuleUtil(); if ($module_util->isModuleInstalled('QualityManagement') && $module_util->hasThePermissionInSubscription($business_id, 'qualitymanagement_module')) { $menu->url(route('customer.quality.ncr.index'), __('qualitymanagement::lang.portal_ncr'), [ 'icon' => 'fa fas fa-clipboard-check', 'active' => request()->segment(2) == 'quality', ])->order(5); } } if ($this->moduleEnabled($enabled_modules, ['industrialengineering', 'IndustrialEngineering']) && \Module::has('IndustrialEngineering') && \Module::isEnabled('IndustrialEngineering')) { $module_util = new \App\Utils\ModuleUtil(); if ($module_util->isModuleInstalled('IndustrialEngineering') && $module_util->hasThePermissionInSubscription($business_id, 'industrial_engineering_module')) { $menu->url(route('customer.cpq.index'), __('industrialengineering::lang.portal_cpq'), [ 'icon' => 'fa fas fa-sliders-h', 'active' => request()->segment(2) == 'cpq', ])->order(5); } } if ($this->moduleEnabled($enabled_modules, ['tms', 'Tms'])) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\ShipmentController::class, 'index']), __('portal::lang.shipment_tracking'), [ 'icon' => 'fa fas fa-truck', 'active' => request()->segment(2) == 'shipments', ])->order(6); } if ($this->moduleEnabled($enabled_modules, ['repair', 'Repair'])) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\RepairController::class, 'index']), __('repair::lang.repair'), [ 'icon' => 'fa fas fa-tools', 'active' => request()->segment(2) == 'repairs', ])->order(7); } $menu->url(action([\Modules\Portal\Http\Controllers\Customer\SellController::class, 'getSellList']), __('portal::lang.nav_sales'), [ 'icon' => 'fa fas fa-file-invoice', 'active' => request()->segment(2) == 'sells', ])->order(8); $menu->url(action([\Modules\Portal\Http\Controllers\Customer\LedgerController::class, 'index']), __('portal::lang.nav_ledger'), [ 'icon' => 'fas fa-scroll', 'active' => request()->segment(2) == 'ledger', ])->order(9); if (! empty($crm_settings['enable_order_request'])) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\OrderRequestController::class, 'index']), __('crm::lang.order_request'), [ 'icon' => 'fa fas fa-arrow-circle-up', 'active' => request()->segment(2) == 'order-request', ])->order(10); } if (in_array('booking', $enabled_modules)) { $menu->url(action([\Modules\Portal\Http\Controllers\Customer\BookingController::class, 'index']), __('restaurant.bookings'), [ 'icon' => 'fas fa-calendar-check', 'active' => request()->segment(2) == 'bookings', ])->order(11); } $menu->url(action([\Modules\Portal\Http\Controllers\Customer\ProposalController::class, 'index']), __('portal::lang.nav_proposals'), [ 'icon' => 'fa fas fa-file-contract', 'active' => request()->segment(2) == 'proposals', ])->order(12); }); return $next($request); } private function moduleEnabled(array $enabled_modules, array $names): bool { return (bool) count(array_intersect($enabled_modules, $names)); } }