291 lines
14 KiB
PHP
291 lines
14 KiB
PHP
<?php
|
|
|
|
namespace Modules\ManagementTools\Http\Controllers;
|
|
|
|
use App\Http\MenuIcons;
|
|
use Illuminate\Routing\Controller;
|
|
use Menu;
|
|
use Modules\ManagementTools\Entities\MtSkill;
|
|
use Modules\ManagementTools\Entities\MtTool;
|
|
use Modules\ManagementTools\Utils\ManagementToolsUtil;
|
|
|
|
class DataController extends Controller
|
|
{
|
|
public function superadmin_package()
|
|
{
|
|
return [
|
|
[
|
|
'name' => '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', [])
|
|
);
|
|
}
|
|
}
|