whoami7 - Manager
:
/
home
/
kckglobal
/
public_html
/
portal
/
app
/
Http
/
Controllers
/
Upload File:
files >> /home/kckglobal/public_html/portal/app/Http/Controllers/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\PushNotificationSetting; 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) { 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(); session()->forget(['qr_clock_in']); 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())) { $this->isCheckScript(); 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'); 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)) { $userid = user()->id; // tickets $tickets = Ticket::where(function ($query) use ($userid) { $query->where('tickets.user_id', '=', $userid)->orWhere('agent_id', '=', $userid); })->whereBetween(DB::raw('DATE(tickets.`created_at`)'), [$startDate->toDateTimeString(), $endDate->endOfDay()->toDateTimeString()])->get(); foreach ($tickets as $ticket) { $startTime = $ticket->created_at->timezone($this->company->timezone); $endTime = $ticket->created_at->timezone($this->company->timezone); $eventData[] = [ 'id' => $ticket->ticket_number, 'title' => $ticket->subject, 'start' => $startTime?->toDateTimeString(), 'end' => $endTime?->toDateTimeString(), '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->deal_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'); } public function beamAuth() { $userID = 'wrkst-'.user()->id; $userIDInQueryParam = request()->user_id; if ($userID != $userIDInQueryParam) { return response('Inconsistent request', 401); } else { $beamsClient = new \Pusher\PushNotifications\PushNotifications([ 'instanceId' => push_setting()->instance_id, 'secretKey' => push_setting()->beam_secret, ]); $beamsToken = $beamsClient->generateToken($userID); return response()->json($beamsToken); } } public function sendPushNotifications($usersIDs, $title, $body) { $setting = PushNotificationSetting::first(); if ($setting->beams_push_status && count($usersIDs) > 0) { $beamsClient = new \Pusher\PushNotifications\PushNotifications([ 'instanceId' => $setting->instance_id, 'secretKey' => $setting->beam_secret, ]); $pushIDs = []; foreach ($usersIDs[0] as $key => $uid) { $pushIDs[] = 'wrkst-' . $uid; } $publishResponse = $beamsClient->publishToUsers( $pushIDs, array( 'web' => array( 'notification' => array( 'title' => $title, 'body' => $body, 'icon' => companyOrGlobalSetting()->logo_url ) ) )); } return true; } }
Copyright ©2021 || Defacer Indonesia