ultimatepos/Modules/Portal/Http/Middleware/CustomerSidebarMenu.php

173 lines
8.9 KiB
PHP

<?php
namespace Modules\Portal\Http\Middleware;
use App\Business;
use App\Contact;
use Closure;
use Illuminate\Http\Request;
use Menu;
use Modules\AssetExchange\Models\Notification as AexNotification;
class CustomerSidebarMenu
{
public function handle(Request $request, Closure $next)
{
if ($request->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));
}
}