'tms_module', 'label' => __('tms::lang.module_name'), 'default' => false, ], ]; } public function user_permissions() { return [ ['value' => 'tms.access', 'label' => __('tms::lang.access'), 'default' => false], ['value' => 'tms.view', 'label' => __('tms::lang.view_dashboard'), 'default' => false], ['value' => 'tms.shipments.view', 'label' => __('tms::lang.shipments_view'), 'default' => false], ['value' => 'tms.shipments.create', 'label' => __('tms::lang.shipments_create'), 'default' => false], ['value' => 'tms.shipments.update', 'label' => __('tms::lang.shipments_update'), 'default' => false], ['value' => 'tms.shipments.delete', 'label' => __('tms::lang.shipments_delete'), 'default' => false], ['value' => 'tms.vehicles.view', 'label' => __('tms::lang.vehicles_view'), 'default' => false], ['value' => 'tms.vehicles.create', 'label' => __('tms::lang.vehicles_create'), 'default' => false], ['value' => 'tms.vehicles.update', 'label' => __('tms::lang.vehicles_update'), 'default' => false], ['value' => 'tms.vehicles.delete', 'label' => __('tms::lang.vehicles_delete'), 'default' => false], ['value' => 'tms.drivers.view', 'label' => __('tms::lang.drivers_view'), 'default' => false], ['value' => 'tms.drivers.create', 'label' => __('tms::lang.drivers_create'), 'default' => false], ['value' => 'tms.drivers.update', 'label' => __('tms::lang.drivers_update'), 'default' => false], ['value' => 'tms.drivers.delete', 'label' => __('tms::lang.drivers_delete'), 'default' => false], ['value' => 'tms.carriers.view', 'label' => __('tms::lang.carriers_view'), 'default' => false], ['value' => 'tms.carriers.create', 'label' => __('tms::lang.carriers_create'), 'default' => false], ['value' => 'tms.carriers.update', 'label' => __('tms::lang.carriers_update'), 'default' => false], ['value' => 'tms.carriers.delete', 'label' => __('tms::lang.carriers_delete'), 'default' => false], ['value' => 'tms.reports.view', 'label' => __('tms::lang.reports_view'), 'default' => false], ['value' => 'tms.tracking.view', 'label' => __('tms::lang.tracking_view'), 'default' => false], ['value' => 'tms.tracking.report', 'label' => __('tms::lang.tracking_report'), 'default' => false], ['value' => 'tms.routes.view', 'label' => __('tms::lang.routes_view'), 'default' => false], ['value' => 'tms.routes.create', 'label' => __('tms::lang.routes_create'), 'default' => false], ['value' => 'tms.routes.update', 'label' => __('tms::lang.routes_update'), 'default' => false], ['value' => 'tms.routes.delete', 'label' => __('tms::lang.routes_delete'), 'default' => false], ['value' => 'tms.customs.view', 'label' => __('tms::lang.customs_view'), 'default' => false], ['value' => 'tms.customs.create', 'label' => __('tms::lang.customs_create'), 'default' => false], ['value' => 'tms.customs.update', 'label' => __('tms::lang.customs_update'), 'default' => false], ['value' => 'tms.customs.delete', 'label' => __('tms::lang.customs_delete'), 'default' => false], ['value' => 'tms.brokers.view', 'label' => __('tms::lang.brokers_view'), 'default' => false], ['value' => 'tms.brokers.create', 'label' => __('tms::lang.brokers_create'), 'default' => false], ['value' => 'tms.brokers.update', 'label' => __('tms::lang.brokers_update'), 'default' => false], ['value' => 'tms.brokers.delete', 'label' => __('tms::lang.brokers_delete'), 'default' => false], ]; } public function after_sale_saved($data) { $transaction = $data['transaction'] ?? null; if (! $transaction || $transaction->type !== 'sell') { return; } $module_util = new ModuleUtil(); if (! $this->isTmsEnabled($module_util, (int) $transaction->business_id)) { return; } $tmsUtil = app(TmsUtil::class); $settings = $tmsUtil->getTmsSettings((int) $transaction->business_id); if (empty($settings['auto_create_on_sale'])) { return; } $hasShipping = ! empty($transaction->shipping_address) || ! empty($transaction->shipping_details) || (float) ($transaction->shipping_charges ?? 0) > 0; if (! $hasShipping) { return; } app(TmsShipmentService::class)->createFromTransaction($transaction); } public function get_contact_view_tabs() { $module_util = new ModuleUtil(); $business_id = request()->session()->get('user.business_id'); if (! $this->isTmsEnabled($module_util, (int) $business_id)) { return []; } if (! auth()->user()->can('tms.shipments.view')) { return []; } return [ [ 'tab_menu_path' => 'tms::contact.partial.tab_menu', 'tab_content_path' => 'tms::contact.partial.tab_content', 'tab_data' => [], 'module_js_path' => 'tms::contact.partial.tab_js', ], ]; } public function transaction_show_actions($data) { $transaction = $data['transaction'] ?? null; if (! $transaction) { return ''; } $module_util = new ModuleUtil(); if (! $this->isTmsEnabled($module_util, (int) $transaction->business_id)) { return ''; } $html = ''; if (in_array($transaction->type, ['sell', 'sell_transfer', 'purchase'], true)) { $html .= $this->shipmentTransactionActions($transaction); } if (in_array($transaction->type, ['purchase', 'sell'], true)) { $html .= $this->customsTransactionActions($transaction); } return $html; } protected function shipmentTransactionActions($transaction): string { if (! in_array($transaction->type, ['sell', 'sell_transfer', 'purchase'], true)) { return ''; } if (! auth()->user()->can('tms.shipments.view') && ! auth()->user()->can('tms.shipments.create')) { return ''; } $shipment = Shipment::where('business_id', $transaction->business_id) ->where('transaction_id', $transaction->id) ->first(); $tmsUtil = app(TmsUtil::class); return view('tms::integrations.transaction_actions', [ 'transaction' => $transaction, 'shipment' => $shipment, 'statuses' => $tmsUtil->shipmentStatuses(), ])->render(); } protected function customsTransactionActions($transaction): string { if (! auth()->user()->can('tms.customs.view') && ! auth()->user()->can('tms.customs.create')) { return ''; } $clearance = CustomsClearance::where('business_id', $transaction->business_id) ->where('transaction_id', $transaction->id) ->with('shipment:id,ref_no') ->first(); return view('tms::integrations.customs_transaction_actions', [ 'transaction' => $transaction, 'clearance' => $clearance, 'shipment' => $clearance?->shipment ?? Shipment::where('business_id', $transaction->business_id)->where('transaction_id', $transaction->id)->first(), ])->render(); } public function get_additional_script() { if (! \Module::has('Tms') || ! \Module::isEnabled('Tms')) { return []; } $module_util = new ModuleUtil(); $business_id = (int) session()->get('user.business_id', 0); if (! $business_id || ! $this->isTmsEnabled($module_util, $business_id)) { return []; } $createUrl = url('tms/shipments/from-transaction/__ID__'); $customsUrl = url('tms/customs/from-transaction/__ID__'); return [ 'additional_js' => '', ]; } public function dashboard_widget() { $module_util = new ModuleUtil(); $business_id = (int) request()->session()->get('user.business_id'); if (! $this->isTmsEnabled($module_util, $business_id) || ! auth()->user()->can('tms.shipments.view')) { return []; } $pending = \Modules\Tms\Models\Shipment::where('business_id', $business_id) ->whereIn('status', ['draft', 'scheduled', 'in_transit']) ->count(); return [ 'position' => 'top_left', 'widget' => view('tms::dashboard.widget', compact('pending'))->render(), ]; } public function modifyAdminMenu() { if (! \Module::has('Tms') || ! \Module::isEnabled('Tms')) { return; } $business_id = session()->get('user.business_id'); $module_util = new ModuleUtil(); if (! $this->isTmsEnabled($module_util, (int) $business_id)) { return; } $user = auth()->user(); if (! $user->can('tms.access') && ! $user->can('tms.view')) { return; } Menu::modify('admin-sidebar-menu', function ($menu) { $menu->dropdown( __('tms::lang.module_name'), function ($sub) { $user = auth()->user(); if ($user->can('tms.view') || $user->can('tms.access')) { $sub->url( action([DashboardController::class, 'index']), __('tms::lang.dashboard'), ['active' => request()->segment(1) == 'tms' && request()->segment(2) == 'dashboard'] ); } if ($user->can('tms.shipments.view')) { $sub->url( action([ShipmentController::class, 'index']), __('tms::lang.shipments'), ['active' => request()->segment(2) == 'shipments'] ); } if ($user->can('tms.vehicles.view')) { $sub->url( action([VehicleController::class, 'index']), __('tms::lang.vehicles'), ['active' => request()->segment(2) == 'vehicles'] ); } if ($user->can('tms.drivers.view')) { $sub->url( action([DriverController::class, 'index']), __('tms::lang.drivers'), ['active' => request()->segment(2) == 'drivers'] ); } if ($user->can('tms.carriers.view')) { $sub->url( action([CarrierController::class, 'index']), __('tms::lang.carriers'), ['active' => request()->segment(2) == 'carriers'] ); } if ($user->can('tms.customs.view')) { $sub->url( action([\Modules\Tms\Http\Controllers\CustomsClearanceController::class, 'index']), __('tms::lang.customs'), ['active' => request()->segment(2) == 'customs'] ); } if ($user->can('tms.brokers.view')) { $sub->url( action([\Modules\Tms\Http\Controllers\CustomsBrokerController::class, 'index']), __('tms::lang.brokers'), ['active' => request()->segment(2) == 'brokers'] ); } if ($user->can('tms.routes.view')) { $sub->url( action([RouteController::class, 'index']), __('tms::lang.routes'), ['active' => request()->segment(2) == 'routes'] ); } if ($user->can('tms.tracking.view')) { $sub->url( action([TrackingController::class, 'index']), __('tms::lang.live_tracking'), ['active' => request()->segment(2) == 'tracking'] ); } if ($user->can('tms.tracking.report')) { $sub->url( action([DriverTrackController::class, 'index']), __('tms::lang.driver_gps'), ['active' => request()->segment(2) == 'driver'] ); } if ($user->can('tms.access')) { $sub->url( action([SettingsController::class, 'index']), __('tms::lang.settings'), ['active' => request()->segment(2) == 'settings'] ); } }, ['icon' => MenuIcons::svg('truck'), 'active' => request()->segment(1) == 'tms', 'data-module' => 'Tms', 'data-menu-group' => 'integrations'] )->order(86); }); } protected function isTmsEnabled(ModuleUtil $module_util, int $business_id): bool { if (! \Module::has('Tms') || ! \Module::isEnabled('Tms')) { return false; } if (! $module_util->isModuleInstalled('Tms')) { return false; } if ($module_util->isSuperadminInstalled()) { return (bool) $module_util->hasThePermissionInSubscription($business_id, 'tms_module'); } return true; } }