'managementtools_module', 'label' => __('managementtools::lang.module_name'), 'default' => false, ], ]; } public function user_permissions() { return [ ['value' => 'managementtools.access', 'label' => __('managementtools::lang.access'), 'default' => false], ['value' => 'managementtools.manage_skills', 'label' => __('managementtools::lang.manage_skills'), 'default' => false], ['value' => 'managementtools.manage_tools', 'label' => __('managementtools::lang.manage_tools'), 'default' => false], ['value' => 'managementtools.daily_report_own', 'label' => __('managementtools::lang.daily_report_own'), 'default' => true], ['value' => 'managementtools.daily_report_all', 'label' => __('managementtools::lang.daily_report_all'), 'default' => false], ['value' => 'managementtools.manage_employee_tasks', 'label' => __('managementtools::lang.manage_employee_tasks'), 'default' => false], ['value' => 'managementtools.manage_project_categories', 'label' => __('managementtools::lang.manage_project_categories'), 'default' => false], ['value' => 'managementtools.task_report', 'label' => __('managementtools::lang.task_report'), 'default' => false], ['value' => 'managementtools.manage_scores', 'label' => __('managementtools::lang.manage_scores'), 'default' => false], ['value' => 'managementtools.score_view_own', 'label' => __('managementtools::lang.score_view_own'), 'default' => true], ['value' => 'managementtools.urgent_messages', 'label' => __('managementtools::lang.urgent_messages'), 'default' => false], ['value' => 'managementtools.urgent_messages_view', 'label' => __('managementtools::lang.urgent_messages_view'), 'default' => true], ['value' => 'managementtools.team_view', 'label' => __('managementtools::lang.team_view'), 'default' => false], ['value' => 'managementtools.ticket_own', 'label' => __('managementtools::lang.ticket_own'), 'default' => true], ['value' => 'managementtools.ticket_manage', 'label' => __('managementtools::lang.ticket_manage_perm'), 'default' => false], ['value' => 'managementtools.board_view', 'label' => __('managementtools::lang.board_view'), 'default' => false], ['value' => 'managementtools.board_manage', 'label' => __('managementtools::lang.board_manage'), 'default' => false], ]; } public function modifyAdminMenu() { if (! \Module::has('ManagementTools') || ! \Module::isEnabled('ManagementTools')) { return; } $user = auth()->user(); $hasEmployeeAccess = $user->can('managementtools.daily_report_own') || $user->can('managementtools.score_view_own') || $user->can('managementtools.urgent_messages_view') || $user->can('managementtools.urgent_messages') || $user->can('managementtools.ticket_own') || $user->can('managementtools.ticket_manage'); $hasAdminAccess = $user->can('managementtools.access'); if (! $hasEmployeeAccess && ! $hasAdminAccess) { return; } Menu::modify('admin-sidebar-menu', function ($menu) { $menu->dropdown( __('managementtools::lang.module_name'), function ($sub) { $user = auth()->user(); $sub->header(__('managementtools::lang.nav_group_reports')); if ($user->can('managementtools.daily_report_own')) { $sub->url( action([DailyReportController::class, 'index']), __('managementtools::lang.daily_report'), ['active' => request()->segment(1) == 'management-tools' && request()->segment(2) == 'daily-reports' && ! in_array(request()->segment(3), ['users', 'UserTasks'], true)] ); } if ($user->can('managementtools.access') && $user->can('managementtools.daily_report_all')) { $sub->url( action([DailyReportController::class, 'employees']), __('managementtools::lang.employee_reports'), ['active' => request()->segment(2) == 'daily-reports' && request()->segment(3) == 'users'] ); if ($user->can('managementtools.board_view')) { $sub->url( action([ExecutiveCockpitController::class, 'index']), __('managementtools::lang.executive_cockpit'), ['active' => request()->segment(2) == 'executive-cockpit'] ); } $sub->url( action([DailyReportController::class, 'analytics']), __('managementtools::lang.report_analytics'), ['active' => request()->segment(2) == 'report-analytics'] ); } if ($user->can('managementtools.access') && ($user->can('managementtools.manage_employee_tasks') || $user->can('managementtools.daily_report_all'))) { $sub->url( action([EmployeeTaskController::class, 'index']), __('managementtools::lang.employee_tasks'), ['active' => request()->segment(2) == 'daily-reports' && request()->segment(3) == 'UserTasks'] ); } if ($user->can('managementtools.access') && app(\Modules\ManagementTools\Utils\ProfessionalProjectBridge::class)->isAvailable() && ($user->can('managementtools.manage_employee_tasks') || $user->can('managementtools.daily_report_own') || $user->can('managementtools.task_report') || $user->can('managementtools.daily_report_all')) && ! (config('menu_consolidation.unified_projects_menu', true) && \Module::has('ProfessionalProject') && \Module::isEnabled('ProfessionalProject') && auth()->user()->can('professionalproject.access'))) { $sub->url( action([ProjectCategoryController::class, 'index']), __('managementtools::lang.project_categories'), ['active' => request()->segment(2) == 'project-categories'] ); } if ($user->can('managementtools.access') && $user->can('managementtools.task_report')) { $sub->url( action([TaskReportController::class, 'index']), __('managementtools::lang.task_report_menu'), ['active' => request()->segment(2) == 'task-report'] ); } $sub->header(__('managementtools::lang.nav_group_management')); if ($user->can('managementtools.access') && $user->can('managementtools.manage_skills')) { $sub->url( action([SkillController::class, 'index']), __('managementtools::lang.skills'), ['active' => request()->segment(2) == 'skills' && request()->segment(3) != 'report'] ); $sub->url( action([SkillController::class, 'report']), __('managementtools::lang.skills_report'), ['active' => request()->segment(2) == 'skills' && request()->segment(3) == 'report'] ); } if ($user->can('managementtools.access') && $user->can('managementtools.manage_tools')) { $sub->url( action([ToolController::class, 'index']), __('managementtools::lang.tools'), ['active' => request()->segment(2) == 'tools'] ); } $sub->header(__('managementtools::lang.nav_group_scores')); if ($user->can('managementtools.access') && $user->can('managementtools.manage_scores')) { $sub->url( action([ScoreController::class, 'index']), __('managementtools::lang.scores'), ['active' => request()->segment(2) == 'scores'] ); $sub->url( action([ScoreCardController::class, 'index']), __('managementtools::lang.score_cards'), ['active' => request()->segment(2) == 'score-cards'] ); } if ($user->can('managementtools.score_view_own')) { $sub->url( action([ScoreController::class, 'myScores']), __('managementtools::lang.my_scores'), ['active' => request()->segment(2) == 'my-scores'] ); } $sub->header(__('managementtools::lang.nav_group_team')); if ($user->can('managementtools.urgent_messages')) { $sub->url( action([UrgentMessageController::class, 'index']), __('managementtools::lang.urgent_messages_manage'), ['active' => request()->segment(2) == 'urgent-messages'] ); } elseif ($user->can('managementtools.urgent_messages_view')) { $sub->url( action([UrgentMessageController::class, 'index']), __('managementtools::lang.urgent_messages_menu'), ['active' => request()->segment(2) == 'urgent-messages'] ); } if ($user->can('managementtools.access') && $user->can('managementtools.team_view')) { $sub->url( action([TeamController::class, 'index']), __('managementtools::lang.team_members'), ['active' => request()->segment(2) == 'team'] ); } if ($user->can('managementtools.ticket_own') || $user->can('managementtools.ticket_manage')) { $sub->url( action([TicketController::class, 'index']), __('managementtools::lang.tickets'), ['active' => request()->segment(2) == 'tickets'] ); } }, [ 'icon' => MenuIcons::svg('briefcase'), 'active' => request()->segment(1) == 'management-tools', 'data-module' => 'ManagementTools', 'data-menu-group' => 'management', ] )->order(86); }); } public function getStats($business_id) { return [ 'skills_count' => MtSkill::forBusiness($business_id)->count(), 'tools_count' => MtTool::forBusiness($business_id)->count(), ]; } /** * User create/edit form partial — assign skills. */ public function moduleViewPartials($data) { if (! \Module::has('ManagementTools') || ! \Module::isEnabled('ManagementTools')) { return ''; } if (! in_array($data['view'] ?? '', ['manage_user.create', 'manage_user.edit'], true)) { return ''; } if (! auth()->user()->can('user.create') && ! auth()->user()->can('user.update')) { return ''; } $business_id = (int) session()->get('user.business_id'); $mtUtil = app(ManagementToolsUtil::class); $skills = $mtUtil->getSkillsDropdown($business_id); $user = $data['user'] ?? null; $assigned_skills = $user ? $mtUtil->getUserAssignedSkills($business_id, $user->id) : []; return view('managementtools::partials.user_skills_form', compact('skills', 'assigned_skills'))->render(); } /** * Persist user skills after user save. */ public function afterModelSaved($data) { if (($data['event'] ?? '') !== 'user_saved') { return; } if (! \Module::has('ManagementTools') || ! \Module::isEnabled('ManagementTools')) { return; } if (! request()->input('mt_skills_sync')) { return; } $user = $data['model_instance']; $mtUtil = app(ManagementToolsUtil::class); $mtUtil->syncUserSkills( (int) $user->business_id, (int) $user->id, request()->input('mt_skills', []), request()->input('mt_skill_levels', []) ); } }