ultimatepos/Modules/ManagementTools/Http/Controllers/DataController.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', [])
);
}
}