[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: ProjectReportController.php
<?php namespace App\Http\Controllers; use App\Models\project_report; use App\Models\UserProject; use App\Models\UserWorkspace; use App\Models\Workspace; use App\Models\Utility; use App\Models\Milestone; use App\Models\Project; use App\Models\Task; use App\Models\Timesheet; use App\Models\Stage; use App\Models\User; use App\Models\Client; use App\Models\ClientProject; use App\Exports\task_reportExport; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class ProjectReportController extends Controller { public function index($slug) { $objUser = Auth::user(); $currentWorkspace = Utility::getWorkspaceBySlug($slug); if ($objUser && $currentWorkspace) { if ($objUser->getGuard() == 'client') { $projects = Project::select('projects.*')->join('client_projects', 'projects.id', '=', 'client_projects.project_id')->where('client_projects.client_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id)->get(); } else { $projects = Project::select('projects.*')->join('user_projects', 'projects.id', '=', 'user_projects.project_id')->where('user_projects.user_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id)->get(); } $stages = Stage::where('workspace_id', '=', $currentWorkspace->id)->orderBy('order')->get(); $users = User::select('users.*')->join('user_workspaces', 'user_workspaces.user_id', '=', 'users.id')->where('user_workspaces.workspace_id', '=', $currentWorkspace->id)->get(); return view('project_report.index', compact('currentWorkspace', 'stages', 'users', 'projects')); } else { return redirect()->back()->with('error', __('Permission Denied.')); } } public function create() { } public function store(Request $request) { } public function show(Request $request, $slug, $id) { $objUser = Auth::user(); $currentWorkspace = Utility::getWorkspaceBySlug($slug); if ($objUser && $currentWorkspace) { if ($objUser->getGuard() == 'client') { $project = Project::select('projects.*')->join('client_projects', 'projects.id', '=', 'client_projects.project_id')->where('client_projects.client_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id)->where('projects.id', '=', $id)->first(); } else { $project = Project::select('projects.*')->join('user_projects', 'projects.id', '=', 'user_projects.project_id')->where('user_projects.user_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id)->where('projects.id', '=', $id)->first(); } } if ($project) { $chartData = $this->getProjectChart( [ 'workspace_id' => $currentWorkspace->id, 'project_id' => $id, 'duration' => 'week', ] ); $daysleft = round((((strtotime($project->end_date) - strtotime(date('Y-m-d'))) / 24) / 60) / 60); $project_status_task = stage::join("tasks", "tasks.status", "=", "stages.id")->where("workspace_id", "=", $currentWorkspace->id)->where('tasks.project_id', '=', $id)->groupBy('name')->selectRaw('count(tasks.id) as count, name')->pluck('count', 'name'); $totaltask = Task::where('project_id', $id)->count(); $arrProcessPer_status_task = []; $arrProcess_Label_status_tasks = []; foreach ($project_status_task as $lables => $percentage_stage) { $arrProcess_Label_status_tasks[] = $lables; if ($totaltask == 0) { $arrProcessPer_status_task[] = 0.00; } else { $arrProcessPer_status_task[] = round(($percentage_stage * 100) / $totaltask, 2); } } $project_priority_task = Task::where('project_id', $id)->groupBy('priority')->selectRaw('count(id) as count, priority')->pluck('count', 'priority'); $arrProcessPer_priority = []; $arrProcess_Label_priority = []; foreach ($project_priority_task as $lable => $process) { $arrProcess_Label_priority[] = $lable; if ($totaltask == 0) { $arrProcessPer_priority[] = 0.00; } else { $arrProcessPer_priority[] = round(($process * 100) / $totaltask, 2); } } $arrProcessClass = [ 'text-success', 'text-primary', 'text-danger', ]; $chartData = app('App\Http\Controllers\ProjectController')->getProjectChart([ 'workspace_id' => $currentWorkspace->id, 'duration' => 'week', ]); $stages = Stage::where('workspace_id', '=', $currentWorkspace->id)->orderBy('order')->get(); $users = User::select('users.*')->join('user_workspaces', 'user_workspaces.user_id', '=', 'users.id')->where('user_workspaces.workspace_id', '=', $currentWorkspace->id)->get(); $milestones = Milestone::where('project_id', $id)->get(); //Logged Hours $logged_hour_chart = 0; $total_hour = 0; $logged_hour = 0; $tasks = Task::where('project_id', $id)->get(); $data = []; foreach ($tasks as $task) { $timesheets_task = Timesheet::where('task_id', $task->id)->where('project_id', $id)->get(); foreach ($timesheets_task as $timesheet) { $date_time = $timesheet->time; $hours = date('H', strtotime($date_time)); $minutes = date('i', strtotime($date_time)); $total_hour = $hours + ($minutes / 60); $logged_hour += $total_hour; $logged_hour_chart = number_format($logged_hour, 2, '.', ''); } } //Estimated Hours $esti_logged_hour_chart = 0; $esti_total_hour = 0; $esti_logged_hour = 0; $hourdiff = 0; foreach ($tasks as $task) { $start_date = $task->start_date; $end_date = $task->due_date; $hourdiff = round((strtotime($end_date) - strtotime($start_date)) / 3600, 1); $esti_logged_hour += $hourdiff; $esti_logged_hour_chart = number_format($esti_logged_hour, 2, '.', ''); } return view('project_report.show', compact('currentWorkspace', 'project', 'chartData', 'daysleft', 'arrProcessPer_priority', 'arrProcess_Label_priority', 'arrProcessClass', 'stages', 'users', 'milestones', 'arrProcess_Label_status_tasks', 'arrProcessPer_status_task', 'logged_hour_chart', 'esti_logged_hour_chart')); } else { return redirect()->back()->with('error', __('Permission denied.')); } } public function edit(project_report $project_report) { } public function update(Request $request, project_report $project_report) { } public function destroy(project_report $project_report) { } public function ajax_data(Request $request, $slug) { $objUser = Auth::user(); $currentWorkspace = Utility::getWorkspaceBySlug($slug); if ($objUser->getGuard() == 'client') { $projects = Project::select('projects.*')->join('client_projects', 'projects.id', '=', 'client_projects.project_id')->where('client_projects.client_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id); } else { $projects = Project::select('projects.*')->join('user_projects', 'projects.id', '=', 'user_projects.project_id')->where('user_projects.user_id', '=', $objUser->id)->where('projects.workspace', '=', $currentWorkspace->id); } if ($request->all_users) { unset($projects); $projects = Project::select('projects.*')->join('user_projects', 'projects.id', '=', 'user_projects.project_id')->where('user_projects.user_id', '=', $request->all_users)->where('projects.workspace', '=', $currentWorkspace->id); } if ($request->status) { $projects->where('status', '=', $request->status); } if ($request->start_date) { $projects->where('start_date', '=', $request->start_date); } if ($request->end_date) { $projects->where('end_date', '=', $request->end_date); } $client_keyword = Auth::user()->getGuard() == 'client' ? 'client.' : ''; $projects = $projects->get(); $data = []; foreach ($projects as $project) { $tmp = []; $tmp['id'] = $project->id; $tmp['name'] = $project->name; $tmp['start_date'] = $project->start_date; $tmp['end_date'] = $project->end_date; $tmp['members'] = '<div class="user-group mx-2">'; $images_path = Utility::get_file('avatars/'); foreach ($project->users as $user) { // $path = asset(\Storage::url('avatars/' . $user->avatar)); $path = $images_path . $user->avatar; $avatar = $user->avatar ? 'src="' . $path . '"' : 'avatar="' . $user->name . '"'; if ($user->pivot->is_active) { $tmp['members'] .= '<a href="#" class="img_group" data-toggle="tooltip" data-placement="top" title=" ' . $user->name . '"> <img alt="' . $user->name . '" ' . $avatar . '/> </a> '; } } $tmp['members'] .= '</div>'; $percentage = $project->project_progress(); $tmp['Progress'] = '<div class="progress_wrapper"> <div class="progress"> <div class="progress-bar" role="progressbar" style="width:' . $percentage["percentage"] . '" aria-valuenow="55" aria-valuemin="0" aria-valuemax="100"> </div> </div> <div class="progress_labels"> <div class="total_progress"> <strong>' . $percentage["percentage"] . '</strong> </div> </div> </div>'; if ($project->status == 'Finished') { $tmp['status'] = '<span class="badge p-2 px-3 bg-success">' . 'Finished' . '</span>'; } elseif ($project->status == 'Ongoing') { $tmp['status'] = '<span class="badge p-2 px-3 bg-secondary">' . 'Ongoing' . '</span>'; } else { $tmp['status'] = '<span class="badge p-2 px-3 bg-warning">' . 'OnHold' . '</span>'; } if (Auth::user()->getGuard() != 'client') { $tmp['action'] = ' <a class="btn-warning btn btn-sm me-1" data-toggle="tooltip" title="' . __('Show Project Report') . '" data-size="lg" data-title="' . __('show') . '" href="' . route( $client_keyword . 'project_report.show', [ $currentWorkspace->slug, $project->id, ] ) . '"><i class="ti ti-eye"></i></a> <a href="#" class="btn-info btn btn-sm" data-toggle="tooltip" title="' . __('Edit Project') . '" data-ajax-popup="true" data-size="lg" data-title="' . __('Edit') . '" data-url="' . route( 'projects.edit', [ $currentWorkspace->slug, $project->id, ] ) . '"><i class="ti ti-pencil"></i></a>'; } else { $tmp['action'] = ' <a class="btn-warning btn btn-sm" data-toggle="tooltip" title="' . __('Show Project Report') . '" data-size="lg" data-title="' . __('show') . '" href="' . route( $client_keyword . 'project_report.show', [ $currentWorkspace->slug, $project->id, ] ) . '"><i class="ti ti-eye"></i></a>'; } $data[] = array_values($tmp); } return response()->json(['data' => $data], 200); } public function getProjectChart($arrParam) { $arrDuration = []; if ($arrParam['duration'] && $arrParam['duration'] == 'week') { $previous_week = Utility::getFirstSeventhWeekDay(-1); foreach ($previous_week['datePeriod'] as $dateObject) { $arrDuration[$dateObject->format('Y-m-d')] = $dateObject->format('D'); } } // $arrTask = [ // 'label' => [], // 'color' => [], // ]; $stages = Stage::where('workspace_id', '=', $arrParam['workspace_id'])->orderBy('order'); $stageNames = $stages->pluck('name', 'id')->toArray(); $stageColors = $stages->pluck('color')->toArray(); $arrTask = [ 'label' => [], 'color' => $stageColors, ]; foreach ($arrDuration as $date => $label) { $data = Task::select('status', DB::raw('count(*) as total')) ->whereDate('updated_at', $date) ->when(isset($arrParam['project_id']), function ($query) use ($arrParam) { return $query->where('project_id', $arrParam['project_id']); }) ->when(isset($arrParam['workspace_id']), function ($query) use ($arrParam) { return $query->whereIn('project_id', function ($subQuery) use ($arrParam) { $subQuery->select('id') ->from('projects') ->where('workspace', $arrParam['workspace_id']); }); }) ->groupBy('status') ->pluck('total', 'status') ->all(); foreach ($stages as $stage) { $arrTask[$stage->id][] = $data[$stage->id] ?? 0; } $arrTask['label'][] = __($label); } $arrTask['stages'] = $stageNames; return $arrTask; // foreach ($arrDuration as $date => $label) { // $objProject = Task::select('status', DB::raw('count(*) as total'))->whereDate('updated_at', '=', $date)->groupBy('status'); // if (isset($arrParam['project_id'])) { // $objProject->where('project_id', '=', $arrParam['project_id']); // } // if (isset($arrParam['workspace_id'])) { // $objProject->whereIn( // 'project_id', // function ($query) use ($arrParam) { // $query->select('id')->from('projects')->where('workspace', '=', $arrParam['workspace_id']); // } // ); // } // $data = $objProject->pluck('total', 'status')->all(); // foreach ($stages->pluck('name', 'id')->toArray() as $id => $stage) { // $arrTask[$id][] = isset($data[$id]) ? $data[$id] : 0; // } // $arrTask['label'][] = __($label); // } // $arrTask['stages'] = $stages->pluck('name', 'id')->toArray(); // $arrTask['color'] = $stages->pluck('color')->toArray(); } public function ajax_tasks_report(Request $request, $slug, $id) { $userObj = Auth::user(); $currentWorkspace = Utility::getWorkspaceBySlug($slug); $tasks = Task::select( [ 'tasks.*', 'stages.name as stage', 'stages.complete', ] )->where('project_id', $id)->join("stages", "stages.id", "=", "tasks.status"); if ($request->assign_to) { $tasks->whereRaw("find_in_set('" . $request->assign_to . "',assign_to)"); } if ($request->priority) { $tasks->where('priority', '=', $request->priority); } if ($request->milestone_id) { $tasks->where('milestone_id', '=', $request->milestone_id); } if ($request->status) { $tasks->where('tasks.status', '=', $request->status); } if ($request->start_date) { $tasks->where('start_date', '=', $request->status); } if ($request->due_date) { $tasks->where('due_date', '=', $request->due_date); } $tasks = $tasks->get(); $data = []; foreach ($tasks as $task) { $timesheets_task = Timesheet::where('project_id', $id)->where('task_id', $task->id)->get(); $hour_format_number = 0; $total_hour = 0; $logged_hour = 0; foreach ($timesheets_task as $timesheet) { $date_time = $timesheet->time; $hours = date('H', strtotime($date_time)); $minutes = date('i', strtotime($date_time)); $total_hour = $hours + ($minutes / 60); $logged_hour += $total_hour; $hour_format_number = number_format($logged_hour, 2, '.', ''); } $tmp = []; $tmp['title'] = '<a href="' . route( 'projects.task.board', [ $currentWorkspace->slug, $task->project_id, ] ) . '" class="text-body">' . $task->title . '</a>'; $tmp['milestone'] = ($milestone = $task->milestone()) ? $milestone->title : ''; $start_date = '<span class="text-body">' . date('Y-m-d', strtotime($task->start_date)) . '</span> '; $due_date = '<span class="text-' . ($task->due_date < date('Y-m-d') ? 'danger' : 'success') . '">' . date('Y-m-d', strtotime($task->due_date)) . '</span> '; $tmp['start_date'] = $start_date; $tmp['due_date'] = $due_date; if ($currentWorkspace->permission == 'Owner' || Auth::user()->getGuard() == 'client') { $tmp['user_name'] = ""; foreach ($task->users() as $user) { if (isset($user) && $user) { $tmp['user_name'] .= '<span class="badge bg-secondary p-2 px-3">' . $user->name . '</span> '; } } } $tmp['logged_hours'] = $hour_format_number; if ($task->priority == "High") { $tmp['priority'] = '<span class="priority_badge badge bg-danger p-2 px-3 ">' . __('High') . '</span>'; } elseif ($task->priority == "Medium") { $tmp['priority'] = '<span class="priority_badge badge bg-info p-2 px-3">' . __('Medium') . '</span>'; } else { $tmp['priority'] = '<span class="priority_badge badge bg-success p-2 px-3">' . __('Low') . '</span>'; } if ($task->complete == 1) { $tmp['status'] = '<span class="status_badge badge bg-success p-2 px-3">' . __($task->stage) . '</span>'; } else { $tmp['status'] = '<span class="status_badge badge bg-primary p-2 px-3">' . __($task->stage) . '</span>'; } $data[] = array_values($tmp); } return response()->json(['data' => $data], 200); } public function export($id) { $name = 'task_report_' . date('Y-m-d i:h:s'); $data = Excel::download(new task_reportExport($id), $name . '.xlsx'); ob_end_clean(); return $data; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.81 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002