One Hat Cyber Team
Your IP :
18.224.33.105
Server IP :
192.145.235.60
Server :
Linux ngx365.inmotionhosting.com 5.14.0-427.33.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Aug 30 09:45:56 EDT 2024 x86_64
Server Software :
Apache
PHP Version :
8.2.27
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
centos12
/
www
/
centosuit
/
app
/
Http
/
Controllers
/
Edit File:
DashboardController.php
<?php namespace App\Http\Controllers; use App\Helper\Reply; use App\Models\DashboardWidget; use App\Models\DealFollowUp; use App\Models\EmployeeDetails; use App\Models\Event; use App\Models\Holiday; use App\Models\LeadPipeline; use App\Models\Leave; use App\Models\ProjectTimeLog; use App\Models\ProjectTimeLogBreak; use App\Models\Task; use App\Models\TaskboardColumn; use App\Models\Ticket; use App\Traits\ClientDashboard; use App\Traits\ClientPanelDashboard; use App\Traits\CurrencyExchange; use App\Traits\EmployeeDashboard; use App\Traits\FinanceDashboard; use App\Traits\HRDashboard; use App\Traits\OverviewDashboard; use App\Traits\ProjectDashboard; use App\Traits\TicketDashboard; use Carbon\Carbon; use Carbon\CarbonPeriod; use Froiden\Envato\Traits\AppBoot; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class DashboardController extends AccountBaseController { use AppBoot, CurrencyExchange, OverviewDashboard, EmployeeDashboard, ProjectDashboard, ClientDashboard, HRDashboard, TicketDashboard, FinanceDashboard, ClientPanelDashboard; public function __construct() { parent::__construct(); $this->pageTitle = 'app.menu.dashboard'; $this->middleware(function ($request, $next) { // WORKSUITESAAS abort_403(user()->is_superadmin); return $next($request); }); } /** * @return array|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response|mixed|void */ public function index() { $this->isCheckScript(); if (in_array('employee', user_roles())) { $this->viewOverviewDashboard = user()->permission('view_overview_dashboard'); $this->viewProjectDashboard = user()->permission('view_project_dashboard'); $this->viewClientDashboard = user()->permission('view_client_dashboard'); $this->viewHRDashboard = user()->permission('view_hr_dashboard'); $this->viewTicketDashboard = user()->permission('view_ticket_dashboard'); $this->viewFinanceDashboard = user()->permission('view_finance_dashboard'); return $this->employeeDashboard(); } if (in_array('client', user_roles())) { return $this->clientPanelDashboard(); } } public function widget(Request $request, $dashboardType) { $data = $request->except('_token'); // Step 1: Reset all widgets' status to 0 DashboardWidget::where('status', 1) ->where('dashboard_type', $dashboardType) ->update(['status' => 0]); // Step 2: Update the status to 1 for widgets present in the request if (!empty($data)) { DashboardWidget::where('dashboard_type', $dashboardType) ->whereIn('widget_name', array_keys($data)) ->update(['status' => 1]); } return Reply::success(__('messages.updateSuccess')); } public function checklist() { if (in_array('admin', user_roles())) { return view('dashboard.checklist', $this->data); } } /** * @return array|\Illuminate\Http\Response */ public function memberDashboard() { abort_403(!in_array('employee', user_roles())); return $this->employeeDashboard(); } public function advancedDashboard() { if (in_array('admin', user_roles()) || $this->sidebarUserPermissions['view_overview_dashboard'] == 4 || $this->sidebarUserPermissions['view_project_dashboard'] == 4 || $this->sidebarUserPermissions['view_client_dashboard'] == 4 || $this->sidebarUserPermissions['view_hr_dashboard'] == 4 || $this->sidebarUserPermissions['view_ticket_dashboard'] == 4 || $this->sidebarUserPermissions['view_finance_dashboard'] == 4) { $tab = request('tab'); $this->widgetToModuleMap = [ 'total_clients' => 'clients', 'total_employees' => 'employees', 'total_projects' => 'projects', 'total_unpaid_invoices' => 'invoices', 'total_hours_logged' => 'timelogs', 'total_pending_tasks' => 'tasks', 'total_today_attendance' => 'attendance', 'total_unresolved_tickets' => 'tickets', 'recent_earnings' => 'payments', 'settings_leaves' => 'leaves', 'new_tickets' => 'tickets', 'overdue_tasks' => 'tasks', 'pending_follow_up' => 'tasks', 'project_activity_timeline' => 'projects', 'user_activity_timeline' => 'users', 'timelogs' => 'timelogs', 'total_project' => 'projects', 'total_overdue_project' => 'projects', 'status_wise_project' => 'projects', 'pending_milestone' => 'projects', 'total_leads' => 'leads', 'total_lead_conversions' => 'leads', 'total_contracts_generated' => 'contracts', 'total_contracts_signed' => 'contracts', 'client_wise_earnings' => 'clients', 'client_wise_timelogs' => 'clients', 'lead_vs_status' => 'leads', 'lead_vs_source' => 'leads', 'latest_client' => 'leads', 'recent_login_activities' => 'clients', 'total_deals' => 'leads', 'total_leaves_approved' => 'leaves', 'total_new_employee' => 'employees', 'total_employee_exits' => 'employees', 'average_attendance' => 'attendance', 'department_wise_employee' => 'employees', 'designation_wise_employee' => 'employees', 'gender_wise_employee' => 'employees', 'role_wise_employee' => 'employees', 'leaves_taken' => 'leaves', 'late_attendance_mark' => 'attendance', 'headcount' => 'employees', 'joining_vs_attrition' => 'employees', 'birthday' => 'employees', 'total_tickets' => 'tickets', 'total_unassigned_ticket' => 'tickets', 'type_wise_ticket' => 'tickets', 'status_wise_ticket' => 'tickets', 'channel_wise_ticket' => 'tickets', 'total_paid_invoices' => 'invoices', 'total_expenses' => 'expenses', 'total_earnings' => 'invoices', 'total_pending_amount' => 'invoices', 'invoice_overview' => 'invoices', 'estimate_overview' => 'estimates', 'proposal_overview' => 'leads', 'earnings_by_client' => 'clients', 'earnings_by_projects' => 'projects', ]; switch ($tab) { case 'project': $this->projectDashboard(); break; case 'client': $this->clientDashboard(); break; case 'hr': $this->hrDashboard(); break; case 'ticket': $this->ticketDashboard(); break; case 'finance': $this->financeDashboard(); break; default: if (in_array('admin', user_roles()) || $this->sidebarUserPermissions['view_overview_dashboard'] == 4) { $this->activeTab = $tab ?: 'overview'; $this->overviewDashboard(); } elseif ($this->sidebarUserPermissions['view_project_dashboard'] == 4) { $this->activeTab = $tab ?: 'project'; $this->projectDashboard(); } elseif ($this->sidebarUserPermissions['view_client_dashboard'] == 4) { $this->activeTab = $tab ?: 'client'; $this->clientDashboard(); } elseif ($this->sidebarUserPermissions['view_hr_dashboard'] == 4) { $this->activeTab = $tab ?: 'hr'; $this->hrDashboard(); } elseif ($this->sidebarUserPermissions['view_finance_dashboard'] == 4) { $this->activeTab = $tab ?: 'finance'; $this->ticketDashboard(); } else if ($this->sidebarUserPermissions['view_ticket_dashboard'] == 4) { $this->activeTab = $tab ?: 'finance'; $this->financeDashboard(); } break; } if (request()->ajax()) { return $this->returnAjax($this->view); } if (!isset($this->activeTab)) { $this->activeTab = $tab ?: 'overview'; } return view('dashboard.admin', $this->data); } } public function accountUnverified() { return view('dashboard.unverified', $this->data); } public function weekTimelog() { $now = now(company()->timezone); $attndcSetting = attendance_setting(); $this->timelogDate = $timelogDate = Carbon::parse(request()->date); $this->weekStartDate = $now->copy()->startOfWeek($attndcSetting->week_start_from); $this->weekEndDate = $this->weekStartDate->copy()->addDays(7); $this->weekPeriod = CarbonPeriod::create($this->weekStartDate, $this->weekStartDate->copy()->addDays(6)); // Get All Dates from start to end date $this->dateWiseTimelogs = ProjectTimeLog::dateWiseTimelogs($timelogDate->toDateString(), user()->id); $this->dateWiseTimelogBreak = ProjectTimeLogBreak::dateWiseTimelogBreak($timelogDate->toDateString(), user()->id); $this->weekWiseTimelogs = ProjectTimeLog::weekWiseTimelogs($this->weekStartDate->copy()->toDateString(), $this->weekEndDate->copy()->toDateString(), user()->id); $this->weekWiseTimelogBreak = ProjectTimeLogBreak::weekWiseTimelogBreak($this->weekStartDate->toDateString(), $this->weekEndDate->toDateString(), user()->id); $this->dayMinutes = $this->dateWiseTimelogs->sum('total_minutes'); $this->dayBreakMinutes = $this->dateWiseTimelogBreak->sum('total_minutes'); $loggedMinutes = $this->dayMinutes - $this->dayBreakMinutes; $this->totalDayMinutes = $this->formatTime($loggedMinutes); $this->totalDayBreakMinutes = $this->formatTime($this->dayBreakMinutes); $html = view('dashboard.employee.week_timelog', $this->data)->render(); return Reply::dataOnly(['html' => $html]); } private function formatTime($totalMinutes) { $hours = intdiv($totalMinutes, 60); $minutes = $totalMinutes % 60; return $hours > 0 ? $hours . 'h' . ($minutes > 0 ? ' ' . sprintf('%02dm', $minutes) : '') : ($minutes > 0 ? sprintf('%dm', $minutes) : '0s'); } public function privateCalendar() { if (request()->filter) { $employee_details = EmployeeDetails::where('user_id', user()->id)->first(); $employee_details->calendar_view = request()->filter ? request()->filter : null; $employee_details->save(); session()->forget('user'); } $startDate = Carbon::parse(request('start')); $endDate = Carbon::parse(request('end')); // get calendar view current logined user $calendar_filter_array = explode(',', user()->employeeDetail->calendar_view); $eventData = array(); $viewEventPerm = user()->permission('view_events'); if (!is_null($viewEventPerm) && $viewEventPerm != 'none') { if (in_array('events', $calendar_filter_array)) { // Events $model = Event::with('attendee', 'attendee.user'); $model->where(function ($query) { $query->whereHas('attendee', function ($query) { $query->where('user_id', user()->id); }); $query->orWhere('added_by', user()->id); }); $model->whereBetween('start_date_time', [$startDate->toDateString(), $endDate->toDateString()]); $events = $model->get(); foreach ($events as $event) { $eventData[] = [ 'id' => $event->id, 'title' => $event->event_name, 'start' => $event->start_date_time, 'end' => $event->end_date_time, 'event_type' => 'event', 'extendedProps' => ['bg_color' => $event->label_color, 'color' => '#fff', 'icon' => 'fa-calendar'] ]; } } } $user = user(); $viewHolidayPerm = user()->permission('view_holiday'); if (!is_null($viewHolidayPerm) && $viewHolidayPerm != 'none') { if (in_array('holiday', $calendar_filter_array)) { // holiday $holidays = Holiday::whereBetween('date', [$startDate->toDateString(), $endDate->toDateString()]) ->where(function ($query) use ($user) { $query->where(function ($subquery) use ($user) { $subquery->where(function ($q) use ($user) { $q->where('department_id_json', 'like', '%"' . $user->employeeDetail->department_id . '"%') ->orWhereNull('department_id_json'); }); $subquery->where(function ($q) use ($user) { $q->where('designation_id_json', 'like', '%"' . $user->employeeDetail->designation_id . '"%') ->orWhereNull('designation_id_json'); }); $subquery->where(function ($q) use ($user) { $q->where('employment_type_json', 'like', '%"' . $user->employeeDetail->employment_type . '"%') ->orWhereNull('employment_type_json'); }); }); }); $holidays = $holidays->get(); foreach ($holidays as $holiday) { $eventData[] = [ 'id' => $holiday->id, 'title' => $holiday->occassion, 'start' => $holiday->date, 'end' => $holiday->date, 'event_type' => 'holiday', 'extendedProps' => ['bg_color' => '#1d82f5', 'color' => '#fff', 'icon' => 'fa-star'] ]; } } } $viewTaskPerm = user()->permission('view_tasks'); if (!is_null($viewTaskPerm) && $viewTaskPerm != 'none') { if (in_array('task', $calendar_filter_array)) { // tasks $completedTaskColumn = TaskboardColumn::completeColumn(); $tasks = Task::with('boardColumn') ->where('board_column_id', '<>', $completedTaskColumn->id) ->whereHas('users', function ($query) { $query->where('user_id', user()->id); }) ->where(function ($q) use ($startDate, $endDate) { $q->whereBetween(DB::raw('DATE(tasks.`due_date`)'), [$startDate->toDateString(), $endDate->toDateString()]); $q->orWhereBetween(DB::raw('DATE(tasks.`start_date`)'), [$startDate->toDateString(), $endDate->toDateString()]); })->get(); foreach ($tasks as $task) { $eventData[] = [ 'id' => $task->id, 'title' => $task->heading, 'start' => $task->start_date, 'end' => $task->due_date ?: $task->start_date, 'event_type' => 'task', 'extendedProps' => ['bg_color' => $task->boardColumn->label_color, 'color' => '#fff', 'icon' => 'fa-list'] ]; } } } $viewTicketPerm = user()->permission('view_tickets'); if (!is_null($viewTicketPerm) && $viewTicketPerm != 'none') { if (in_array('tickets', $calendar_filter_array)) { // tickets $tickets = Ticket::where('user_id', user()->id) ->whereBetween(DB::raw('DATE(tickets.`updated_at`)'), [$startDate->toDateTimeString(), $endDate->endOfDay()->toDateTimeString()])->get(); foreach ($tickets as $ticket) { $eventData[] = [ 'id' => $ticket->ticket_number, 'title' => $ticket->subject, 'start' => $ticket->updated_at, 'end' => $ticket->updated_at, 'event_type' => 'ticket', 'extendedProps' => ['bg_color' => '#1d82f5', 'color' => '#fff', 'icon' => 'fa-ticket-alt'] ]; } } } $viewleavePerm = user()->permission('view_leave'); if (!is_null($viewleavePerm) && $viewleavePerm != 'none') { if (in_array('leaves', $calendar_filter_array)) { // approved leaves of all emoloyees with employee name $leaves = Leave::join('leave_types', 'leave_types.id', 'leaves.leave_type_id') ->where('leaves.status', 'approved') ->select('leaves.id', 'leaves.leave_date', 'leaves.status', 'leave_types.type_name', 'leave_types.color', 'leaves.leave_date', 'leaves.duration', 'leaves.status', 'leaves.user_id') ->with('user') ->whereBetween(DB::raw('DATE(leaves.`leave_date`)'), [$startDate->toDateString(), $endDate->toDateString()]) ->get(); foreach ($leaves as $leave) { $duration = ($leave->duration == 'half day') ? '( ' . __('app.halfday') . ' )' : ''; $eventData[] = [ 'id' => $leave->id, 'title' => $duration . ' ' . $leave->user->name, 'start' => $leave->leave_date->toDateString(), 'end' => $leave->leave_date->toDateString(), 'event_type' => 'leave', /** @phpstan-ignore-next-line */ 'extendedProps' => ['name' => 'Leave : ' . $leave->user->name, 'bg_color' => $leave->color, 'color' => '#fff', 'icon' => 'fa-plane-departure'] ]; } } } $viewDealPerm = user()->permission('view_deals'); if (!is_null($viewDealPerm) && $viewDealPerm != 'none') { if (in_array('follow_ups', $calendar_filter_array)) { // follow ups $followUps = DealFollowUp::with('lead')->whereHas('lead.leadAgent', function ($query) { $query->where('user_id', user()->id); }) ->whereBetween(DB::raw('DATE(next_follow_up_date)'), [$startDate->startOfDay()->toDateTimeString(), $endDate->endOfDay()->toDateTimeString()]) ->get(); foreach ($followUps as $followUp) { $eventData[] = [ 'id' => $followUp->id, 'title' => $followUp->lead->name, 'start' => $followUp->next_follow_up_date->timezone(company()->timezone), 'end' => $followUp->next_follow_up_date->timezone(company()->timezone), 'event_type' => 'follow_up', 'extendedProps' => ['bg_color' => '#1d82f5', 'color' => '#fff', 'icon' => 'fa-thumbs-up'] ]; } } } return $eventData; } public function getLeadStage($pipelineId) { $this->startDate = (request('startDate') != '') ? Carbon::createFromFormat($this->company->date_format, request('startDate')) : now($this->company->timezone)->startOfMonth(); $this->endDate = (request('endDate') != '') ? Carbon::createFromFormat($this->company->date_format, request('endDate')) : now($this->company->timezone); $startDate = $this->startDate->toDateString(); $endDate = $this->endDate->toDateString(); $this->leadPipelines = LeadPipeline::all(); $this->leadStatusChart = $this->leadStatusChart($startDate, $endDate, $pipelineId); return $this->returnAjax('dashboard.ajax.lead-by-pipeline'); } }
Simpan