dbfdg
can('manage project'))
{
return view('projects.index', compact('view'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
if(\Auth::user()->can('create project'))
{
$users = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '!=', 'client')->get()->pluck('name', 'id');
$clients = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '=', 'client')->get()->pluck('name', 'id');
$clients->prepend('Select Client', '');
$users->prepend('Select User', '');
return view('projects.create', compact('clients','users'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
if(\Auth::user()->can('create project'))
{
$validator = \Validator::make(
$request->all(), [
'project_name' => 'required',
'project_image' => 'required',
]
);
if($validator->fails())
{
return redirect()->back()->with('error', Utility::errorFormat($validator->getMessageBag()));
}
$project = new Project();
$project->project_name = $request->project_name;
$project->start_date = date("Y-m-d H:i:s", strtotime($request->start_date));
$project->end_date = date("Y-m-d H:i:s", strtotime($request->end_date));
if($request->hasFile('project_image'))
{
//storage limit
$image_size = $request->file('project_image')->getSize();
$result = Utility::updateStorageLimit(\Auth::user()->creatorId(), $image_size);
if($result==1)
{
$imageName = time() . '.' . $request->project_image->extension();
$request->file('project_image')->storeAs('projects', $imageName);
$project->project_image = 'projects/'.$imageName;
}
}
$project->client_id = $request->client;
$project->budget = !empty($request->budget) ? $request->budget : 0;
$project->description = $request->description;
$project->status = $request->status;
$project->estimated_hrs = $request->estimated_hrs;
$project->tags = $request->tag;
$project->created_by = \Auth::user()->creatorId();
$project['copylinksetting'] = '{"member":"on","milestone":"off","basic_details":"on","activity":"off","attachment":"on","bug_report":"on","task":"off","tracker_details":"off","timesheet":"off" ,"password_protected":"off"}';
$project->save();
if(\Auth::user()->type=='company'){
ProjectUser::create(
[
'project_id' => $project->id,
'user_id' => Auth::user()->id,
]
);
if($request->user){
foreach($request->user as $key => $value) {
ProjectUser::create(
[
'project_id' => $project->id,
'user_id' => $value,
]
);
}
}
}else{
ProjectUser::create(
[
'project_id' => $project->id,
'user_id' => Auth::user()->creatorId(),
]
);
ProjectUser::create(
[
'project_id' => $project->id,
'user_id' => Auth::user()->id,
]
);
if($request->user){
foreach($request->user as $key => $value) {
ProjectUser::create(
[
'project_id' => $project->id,
'user_id' => $value,
]
);
}
}
}
//For Notification
$setting = Utility::settings(\Auth::user()->creatorId());
$client = User::find($project->client_id);
$user = User::find($request->user[0]);
$users = [$client , $user];
if(isset($setting['new_project']) && $setting['new_project'] ==1)
{
foreach ($users as $key => $user) {
$projectArr = [
'project_user' => $user->name,
'project_name' => $project->project_name,
'project_start_date' => $project->start_date,
'project_end_date' => $project->end_date,
'hours' => $project->estimated_hrs,
];
$resp = Utility::sendEmailTemplate('new_project', [$user->id => $user->email], $projectArr);
}
}
$projectNotificationArr = [
'project_name' => $request->project_name,
'user_name' => \Auth::user()->name,
];
//Slack Notification
if(isset($setting['project_notification']) && $setting['project_notification'] ==1)
{
Utility::send_slack_msg('new_project', $projectNotificationArr);
}
//Telegram Notification
if(isset($setting['telegram_project_notification']) && $setting['telegram_project_notification'] ==1)
{
Utility::send_telegram_msg('new_project', $projectNotificationArr);
}
//webhook
$module ='New Project';
$webhook= Utility::webhookSetting($module);
if($webhook)
{
$parameter = json_encode($project);
$status = Utility::WebhookCall($webhook['url'],$parameter,$webhook['method']);
if($status == false)
{
return redirect()->back()->with('error', __('Webhook call failed.'));
}
}
return redirect()->route('projects.index')->with('success', __('Project Add Successfully'). ((isset($result) && $result!=1) ? '
' . $result . '' : ''));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Display the specified resource.
*
* @param \App\Poject $poject
* @return \Illuminate\Http\Response
*/
public function show(Project $project)
{
if(\Auth::user()->can('view project'))
{
$usr = Auth::user();
if(\Auth::user()->type == 'client'){
$user_projects = Project::where('client_id',\Auth::user()->id)->pluck('id','id')->toArray();;
}else{
$user_projects = $usr->projects->pluck('id')->toArray();
}
if(in_array($project->id, $user_projects))
{
$project_data = [];
// Task Count
$tasks = Project::projectTask($project->id);
$project_task = $tasks->count();
$completedTask = ProjectTask::where('project_id',$project->id)->where('is_complete',1)->get();
$project_done_task = $completedTask->count();
$project_data['task'] = [
'total' => number_format($project_task),
'done' => number_format($project_done_task),
'percentage' => Utility::getPercentage($project_done_task, $project_task),
];
// end Task Count
// Expense
$expAmt = 0;
foreach($project->expense as $expense)
{
$expAmt += $expense->amount;
}
$project_data['expense'] = [
'allocated' => $project->budget,
'total' => $expAmt,
'percentage' => Utility::getPercentage($expAmt, $project->budget),
];
// end expense
// Users Assigned
$total_users = User::where('created_by', '=', $usr->id)->count();
$project_data['user_assigned'] = [
'total' => number_format($total_users) . '/' . number_format($total_users),
'percentage' => Utility::getPercentage($total_users, $total_users),
];
// end users assigned
// Day left
$total_day = Carbon::parse($project->start_date)->diffInDays(Carbon::parse($project->end_date));
$remaining_day = Carbon::parse($project->start_date)->diffInDays(now());
$project_data['day_left'] = [
'day' => number_format($remaining_day) . '/' . number_format($total_day),
'percentage' => Utility::getPercentage($remaining_day, $total_day),
];
// end Day left
// Open Task
$remaining_task = ProjectTask::where('project_id', '=', $project->id)->where('is_complete', '=', 0)->where('created_by',\Auth::user()->creatorId())->count();
$total_task = $project->tasks->count();
$project_data['open_task'] = [
'tasks' => number_format($remaining_task) . '/' . number_format($total_task),
'percentage' => Utility::getPercentage($remaining_task, $total_task),
];
// end open task
// Milestone
$total_milestone = $project->milestones()->count();
$complete_milestone = $project->milestones()->where('status', 'LIKE', 'complete')->count();
$project_data['milestone'] = [
'total' => number_format($complete_milestone) . '/' . number_format($total_milestone),
'percentage' => Utility::getPercentage($complete_milestone, $total_milestone),
];
// End Milestone
// Time spent
$times = $project->timesheets()->where('created_by', '=', $usr->id)->pluck('time')->toArray();
$totaltime = str_replace(':', '.', Utility::timeToHr($times));
$project_data['time_spent'] = [
'total' => number_format($totaltime) . '/' . number_format($totaltime),
'percentage' => Utility::getPercentage(number_format($totaltime), $totaltime),
];
// end time spent
// Allocated Hours
$hrs = Project::projectHrs($project->id);
$project_data['task_allocated_hrs'] = [
'hrs' => number_format($hrs['allocated']) . '/' . number_format($hrs['allocated']),
'percentage' => Utility::getPercentage($hrs['allocated'], $hrs['allocated']),
];
// end allocated hours
// Chart
$seven_days = Utility::getLastSevenDays();
$chart_task = [];
$chart_timesheet = [];
$cnt = 0;
$cnt1 = 0;
foreach(array_keys($seven_days) as $k => $date)
{
$task_cnt = $project->tasks()->where('is_complete', '=', 1)->whereRaw("find_in_set('" . $usr->id . "',assign_to)")->where('marked_at', 'LIKE', $date)->count();
$arrTimesheet = $project->timesheets()->where('created_by', '=', $usr->id)->where('date', 'LIKE', $date)->pluck('time')->toArray();
// Task Chart Count
$cnt += $task_cnt;
// Timesheet Chart Count
$timesheet_cnt = str_replace(':', '.', Utility::timeToHr($arrTimesheet));
$cn[] = $timesheet_cnt;
$cnt1 += $timesheet_cnt;
$chart_task[] = $task_cnt;
$chart_timesheet[] = $timesheet_cnt;
}
$project_data['task_chart'] = [
'chart' => $chart_task,
'total' => $cnt,
];
$project_data['timesheet_chart'] = [
'chart' => $chart_timesheet,
'total' => $cnt1,
];
$last_task = TaskStage::orderBy('order', 'DESC')->where('created_by',\Auth::user()->creatorId())->first();
// end chart
return view('projects.view',compact('project','project_data' , 'last_task'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Poject $poject
* @return \Illuminate\Http\Response
*/
public function edit(Project $project)
{
if(\Auth::user()->can('edit project'))
{
$clients = User::where('created_by', '=', \Auth::user()->creatorId())->where('type', '=', 'client')->get()->pluck('name', 'id');
$project = Project::findOrfail($project->id);
if($project->created_by == \Auth::user()->creatorId())
{
return view('projects.edit', compact('project', 'clients'));
}
else
{
return response()->json(['error' => __('Permission denied.')], 401);
}
return view('projects.edit',compact('project'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Poject $poject
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Project $project)
{
if(\Auth::user()->can('edit project'))
{
$validator = \Validator::make(
$request->all(), [
'project_name' => 'required',
]
);
if($validator->fails())
{
return redirect()->back()->with('error', Utility::errorFormat($validator->getMessageBag()));
}
$project = Project::find($project->id);
$project->project_name = $request->project_name;
$project->start_date = date("Y-m-d H:i:s", strtotime($request->start_date));
$project->end_date = date("Y-m-d H:i:s", strtotime($request->end_date));
if($request->hasFile('project_image'))
{
//storage limit
$file_path = $project->project_image;
$image_size = $request->file('project_image')->getSize();
$result = Utility::updateStorageLimit(\Auth::user()->creatorId(), $image_size);
if($result==1) {
// Utility::checkFileExistsnDelete([$project->project_image]);
Utility::changeStorageLimit(\Auth::user()->creatorId(), $file_path);
$imageName = time() . '.' . $request->project_image->extension();
$request->file('project_image')->storeAs('projects', $imageName);
$project->project_image = 'projects/' . $imageName;
}
}
$project->budget = $request->budget;
$project->client_id = $request->client;
$project->description = $request->description;
$project->status = $request->status;
$project->estimated_hrs = $request->estimated_hrs;
$project->tags = $request->tag;
$project->save();
return redirect()->route('projects.index')->with('success', __('Project Updated Successfully'). ((isset($result) && $result!=1) ? '
' . $result . '' : ''));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Poject $poject
* @return \Illuminate\Http\Response
*/
public function destroy(Project $project)
{
if(\Auth::user()->can('delete project'))
{
if(!empty($project->project_image))
{
$file_path = $project->project_image;
$result = Utility::changeStorageLimit(\Auth::user()->creatorId(), $file_path);
}
$project->delete();
return redirect()->back()->with('success', __('Project Successfully Deleted.'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function inviteMemberView(Request $request, $project_id)
{
$usr = Auth::user();
$project = Project::find($project_id);
$user_project = $project->users->pluck('id')->toArray();
$user_contact = User::where('created_by', \Auth::user()->creatorId())->where('type','!=','client')->whereNOTIn('id', $user_project)->pluck('id')->toArray();
$arrUser = array_unique($user_contact);
$users = User::whereIn('id', $arrUser)->get();
$setting = Utility::settings(\Auth::user()->creatorId());
if(isset($setting['project_assign_member']) && $setting['project_assign_member'] ==1)
{
foreach ($users as $key => $user) {
$projectArr = [
'project_user' => $user->name,
'project_name' => $project->project_name,
'project_start_date' => $project->start_date,
'project_end_date' => $project->end_date,
'hours' => $project->estimated_hrs,
];
$resp = Utility::sendEmailTemplate('project_assign_member', [$user->id => $user->email], $projectArr);
}
}
return view('projects.invite', compact('project_id', 'users'));
}
public function inviteProjectUserMember(Request $request)
{
$authuser = Auth::user();
// Make entry in project_user tbl
ProjectUser::create(
[
'project_id' => $request->project_id,
'user_id' => $request->user_id,
'invited_by' => $authuser->id,
]
);
// Make entry in activity_log tbl
ActivityLog::create(
[
'user_id' => $authuser->id,
'project_id' => $request->project_id,
'log_type' => 'Invite User',
'remark' => json_encode(['title' => $authuser->name]),
]
);
return json_encode(
[
'code' => 200,
'status' => 'Success',
'success' => __('User invited successfully.'),
]
);
}
public function destroyProjectUser($id, $user_id)
{
$project = Project::find($id);
if($project->created_by == \Auth::user()->ownerId())
{
ProjectUser::where('project_id', '=', $project->id)->where('user_id', '=', $user_id)->delete();
return redirect()->back()->with('success', __('User successfully deleted!'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function loadUser(Request $request)
{
if($request->ajax())
{
$project = Project::find($request->project_id);
$returnHTML = view('projects.users', compact('project'))->render();
return response()->json(
[
'success' => true,
'html' => $returnHTML,
]
);
}
}
public function milestone($project_id)
{
if(\Auth::user()->can('create milestone'))
{
$project = Project::find($project_id);
return view('projects.milestone', compact('project'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function milestoneStore(Request $request, $project_id)
{
if(\Auth::user()->can('create milestone'))
{
$project = Project::find($project_id);
$validator = Validator::make(
$request->all(), [
'title' => 'required',
'status' => 'required',
'cost' => 'required',
'due_date' => 'required',
'start_date'=>'required'
]
);
if($validator->fails())
{
return redirect()->back()->with('error', Utility::errorFormat($validator->getMessageBag()));
}
$milestone = new Milestone();
$milestone->project_id = $project->id;
$milestone->title = $request->title;
$milestone->status = $request->status;
$milestone->cost = $request->cost;
$milestone->start_date = $request->start_date;
$milestone->due_date = $request->due_date;
$milestone->description = $request->description;
$milestone->save();
ActivityLog::create(
[
'user_id' => \Auth::user()->id,
'project_id' => $project->id,
'log_type' => 'Create Milestone',
'remark' => json_encode(['title' => $milestone->title]),
]
);
return redirect()->back()->with('success', __('Milestone successfully created.'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function milestoneEdit($id)
{
if(\Auth::user()->can('edit milestone'))
{
$milestone = Milestone::find($id);
return view('projects.milestoneEdit', compact('milestone'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function milestoneUpdate($id, Request $request)
{
if(\Auth::user()->can('edit milestone'))
{
$validator = Validator::make(
$request->all(), [
'title' => 'required',
'status' => 'required',
'cost' => 'required',
'due_date' => 'required',
'start_date'=>'required'
]
);
if($validator->fails())
{
return redirect()->back()->with('error', Utility::errorFormat($validator->getMessageBag()));
}
$milestone = Milestone::find($id);
$milestone->title = $request->title;
$milestone->status = $request->status;
$milestone->cost = $request->cost;
$milestone->progress = $request->progress;
$milestone->due_date = $request->duedate;
$milestone->start_date = $request->start_date;
$milestone->description = $request->description;
$milestone->save();
return redirect()->back()->with('success', __('Milestone updated successfully.'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function milestoneDestroy($id)
{
if(\Auth::user()->can('delete milestone'))
{
$milestone = Milestone::find($id);
$milestone->delete();
return redirect()->back()->with('success', __('Milestone successfully deleted.'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function milestoneShow($id)
{
if(\Auth::user()->can('view milestone'))
{
$milestone = Milestone::find($id);
return view('projects.milestoneShow', compact('milestone'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function filterProjectView(Request $request)
{
if(\Auth::user()->can('manage project'))
{
$usr = Auth::user();
if(\Auth::user()->type == 'client'){
$user_projects = Project::where('client_id',\Auth::user()->id)->where('created_by',\Auth::user()->creatorId())->pluck('id','id')->toArray();;
}else{
$user_projects = $usr->projects()->pluck('project_id', 'project_id')->toArray();
}
if($request->ajax() && $request->has('view') && $request->has('sort'))
{
$sort = explode('-', $request->sort);
$projects = Project::whereIn('id', array_keys($user_projects))->orderBy($sort[0], $sort[1]);
if(!empty($request->keyword))
{
$projects->where('project_name', 'LIKE', $request->keyword . '%')->orWhereRaw('FIND_IN_SET("' . $request->keyword . '",tags)');
}
if(!empty($request->status))
{
$projects->whereIn('status', $request->status);
}
$projects = $projects->get();
$last_task = TaskStage::orderBy('order', 'DESC')->where('created_by',\Auth::user()->creatorId())->first();
$returnHTML = view('projects.' . $request->view, compact('projects', 'user_projects', 'last_task'))->render();
return response()->json(
[
'success' => true,
'html' => $returnHTML,
]
);
}
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
// Project Gantt Chart
public function gantt($projectID, $duration = 'Week')
{
if(\Auth::user()->can('view grant chart'))
{
$project = Project::find($projectID);
$tasks = [];
if($project)
{
$tasksobj = $project->tasks;
foreach($tasksobj as $task)
{
$tmp = [];
$tmp['id'] = 'task_' . $task->id;
$tmp['name'] = $task->name;
$tmp['start'] = $task->start_date;
$tmp['end'] = $task->end_date;
$tmp['custom_class'] = (empty($task->priority_color) ? '#ecf0f1' : $task->priority_color);
$tmp['progress'] = str_replace('%', '', $task->taskProgress($task)['percentage']);
$tmp['extra'] = [
'priority' => ucfirst(__($task->priority)),
'comments' => count($task->comments),
'duration' => Utility::getDateFormated($task->start_date) . ' - ' . Utility::getDateFormated($task->end_date),
];
$tasks[] = $tmp;
}
}
return view('projects.gantt', compact('project', 'tasks', 'duration'));
}
else
{
return redirect()->back()->with('error', __('Permission Denied.'));
}
}
public function ganttPost($projectID, Request $request)
{
$project = Project::find($projectID);
if($project)
{
if(\Auth::user()->can('view project task'))
{
$id = trim($request->task_id, 'task_');
$task = ProjectTask::find($id);
$task->start_date = $request->start;
$task->end_date = $request->end;
$task->save();
return response()->json(
[
'is_success' => true,
'message' => __("Time Updated"),
], 200
);
}
else
{
return response()->json(
[
'is_success' => false,
'message' => __("You can't change Date!"),
], 400
);
}
}
else
{
return response()->json(
[
'is_success' => false,
'message' => __("Something is wrong."),
], 400
);
}
}
public function bug($project_id)
{
$user = Auth::user();
if($user->can('manage bug report'))
{
$project = Project::find($project_id);
if(!empty($project) && $project->created_by == Auth::user()->creatorId())
{
if($user->type != 'company')
{
if(\Auth::user()->type == 'client'){
$bugs = Bug::where('project_id',$project->id)->get();
}else{
$bugs = Bug::where('project_id',$project->id)->whereRaw("find_in_set('" . $user->id . "',assign_to)")->get();
}
}
if($user->type == 'company')
{
$bugs = Bug::where('project_id', '=', $project_id)->get();
}
return view('projects.bug', compact('project', 'bugs'));
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
public function bugCreate($project_id)
{
if(\Auth::user()->can('create bug report'))
{
$priority = Bug::$priority;
$status = BugStatus::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('title', 'id');
$project_user = ProjectUser::where('project_id', $project_id)->get();
$users = [];
foreach($project_user as $key=>$user)
{
$user_data = User::find($user->user_id);
$key = $user->user_id;
$user_name = !empty($user_data)? $user_data->name:'';
$users[$key] = $user_name;
}
return view('projects.bugCreate', compact('status', 'project_id', 'priority', 'users'));
}
else
{
return redirect()->back()->with('error', 'Permission denied.');
}
}
function bugNumber()
{
$latest = Bug::where('created_by', '=', \Auth::user()->creatorId())->latest()->first();
if(!$latest)
{
return 1;
}
return $latest->bug_id + 1;
}
public function bugStore(Request $request, $project_id)
{
if(\Auth::user()->can('create bug report'))
{
$validator = \Validator::make(
$request->all(), [
'title' => 'required',
'priority' => 'required',
'status' => 'required',
'assign_to' => 'required',
'start_date' => 'required',
'due_date' => 'required',
]
);
if($validator->fails())
{
$messages = $validator->getMessageBag();
return redirect()->route('task.bug', $project_id)->with('error', $messages->first());
}
$usr = \Auth::user();
$userProject = ProjectUser::where('project_id', '=', $project_id)->pluck('user_id')->toArray();
$project = Project::where('id', '=', $project_id)->first();
$bug = new Bug();
$bug->bug_id = $this->bugNumber();
$bug->project_id = $project_id;
$bug->title = $request->title;
$bug->priority = $request->priority;
$bug->start_date = $request->start_date;
$bug->due_date = $request->due_date;
$bug->description = $request->description;
$bug->status = $request->status;
$bug->assign_to = $request->assign_to;
$bug->created_by = \Auth::user()->creatorId();
$bug->save();
ActivityLog::create(
[
'user_id' => $usr->id,
'project_id' => $project_id,
'log_type' => 'Create Bug',
'remark' => json_encode(['title' => $bug->title]),
]
);
$projectArr = [
'project_id' => $project_id,
'name' => $project->name,
'updated_by' => $usr->id,
];
return redirect()->route('task.bug', $project_id)->with('success', __('Bug successfully created.'));
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
public function bugEdit($project_id, $bug_id)
{
if(\Auth::user()->can('edit bug report'))
{
$bug = Bug::find($bug_id);
$priority = Bug::$priority;
$status = BugStatus::where('created_by', '=', \Auth::user()->creatorId())->get()->pluck('title', 'id');
$project_user = ProjectUser::where('project_id', $project_id)->get();
$users = array();
foreach($project_user as $user)
{
$user_data = User::where('id',$user->user_id)->first();
$key = $user->user_id;
$user_name = !empty($user_data) ? $user_data->name:'';
$users[$key] = $user_name;
}
return view('projects.bugEdit', compact('status', 'project_id', 'priority', 'users', 'bug'));
}
else
{
return redirect()->back()->with('error', 'Permission denied.');
}
}
public function bugUpdate(Request $request, $project_id, $bug_id)
{
if(\Auth::user()->can('edit bug report'))
{
$validator = \Validator::make(
$request->all(), [
'title' => 'required',
'priority' => 'required',
'status' => 'required',
'assign_to' => 'required',
'start_date' => 'required',
'due_date' => 'required',
]
);
if($validator->fails())
{
$messages = $validator->getMessageBag();
return redirect()->route('task.bug', $project_id)->with('error', $messages->first());
}
$bug = Bug::find($bug_id);
$bug->title = $request->title;
$bug->priority = $request->priority;
$bug->start_date = $request->start_date;
$bug->due_date = $request->due_date;
$bug->description = $request->description;
$bug->status = $request->status;
$bug->assign_to = $request->assign_to;
$bug->save();
return redirect()->route('task.bug', $project_id)->with('success', __('Bug successfully created.'));
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
public function bugDestroy($project_id, $bug_id)
{
if(\Auth::user()->can('delete bug report'))
{
$bug = Bug::find($bug_id);
$bug->delete();
return redirect()->route('task.bug', $project_id)->with('success', __('Bug successfully deleted.'));
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
public function bugKanban($project_id)
{
$user = Auth::user();
if($user->can('move bug report'))
{
$project = Project::find($project_id);
if(!empty($project) && $project->created_by == $user->creatorId())
{
if($user->type != 'company')
{
$bugStatus = BugStatus::where('created_by', '=', Auth::user()->creatorId())->orderBy('order', 'ASC')->get();
}
if($user->type == 'company' || $user->type == 'client')
{
$bugStatus = BugStatus::where('created_by', '=', Auth::user()->creatorId())->orderBy('order', 'ASC')->get();
}
return view('projects.bugKanban', compact('project', 'bugStatus'));
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
else
{
return redirect()->back()->with('error', __('Permission denied.'));
}
}
public function bugKanbanOrder(Request $request)
{
// dd($request->all());
if(\Auth::user()->can('move bug report'))
{
$post = $request->all();
$bug = Bug::find($post['bug_id']);
$status = BugStatus::find($post['status_id']);
if(!empty($status))
{
$bug->status = $post['status_id'];
$bug->save();
}
foreach($post['order'] as $key => $item)
{
if($item != 'null'){
$bug_order = Bug::find($item);
if(!empty($bug_order)){
$bug_order->order = $key;
$bug_order->status = $post['status_id'];
$bug_order->save();
}
}
}
}
else
{
return redirect()->back()->with('error', 'Permission denied.');
}
}
public function bugShow($project_id, $bug_id)
{
$bug = Bug::find($bug_id);
return view('projects.bugShow', compact('bug'));
}
public function bugCommentStore(Request $request, $project_id, $bug_id)
{
$post = [];
$post['bug_id'] = $bug_id;
$post['comment'] = $request->comment;
$post['created_by'] = \Auth::user()->authId();
$post['user_type'] = \Auth::user()->type;
$comment = BugComment::create($post);
$comment->deleteUrl = route('bug.comment.destroy', [$comment->id]);
return response()->json(
[
'is_success' => true,
'message' => __("Bug comment successfully created."),
'data'=>$comment
], 200
);
}
public function bugCommentDestroy($comment_id)
{
$comment = BugComment::find($comment_id);
$comment->delete();
return "true";
}
public function bugCommentStoreFile(Request $request, $bug_id)
{
$request->validate(
['file' => 'required']
);
$fileName = $bug_id . time() . "_" . $request->file->getClientOriginalName();
$request->file->storeAs('bugs', $fileName);
$post['bug_id'] = $bug_id;
$post['file'] = $fileName;
$post['name'] = $request->file->getClientOriginalName();
$post['extension'] = "." . $request->file->getClientOriginalExtension();
$post['file_size'] = round(($request->file->getSize() / 1024) / 1024, 2) . ' MB';
$post['created_by'] = \Auth::user()->authId();
$post['user_type'] = \Auth::user()->type;
$BugFile = BugFile::create($post);
$BugFile->deleteUrl = route('bug.comment.file.destroy', [$BugFile->id]);
return $BugFile->toJson();
}
public function bugCommentDestroyFile(Request $request, $file_id)
{
$commentFile = BugFile::find($file_id);
$path = storage_path('bugs/' . $commentFile->file);
if(file_exists($path))
{
\File::delete($path);
}
$commentFile->delete();
return "true";
}
public function tracker($id)
{
$treckers =TimeTracker::where('project_id',$id)->get();
return view('time_trackers.index',compact('treckers'));
}
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 = TaskStage::where('created_by', '=', $arrParam['created_by'])->orderBy('order');
foreach ($arrDuration as $date => $label) {
$objProject = projectTask::select('stage_id', \DB::raw('count(*) as total'))->whereDate('updated_at', '=', $date)->groupBy('stage_id');
if (isset($arrParam['project_id'])) {
$objProject->where('project_id', '=', $arrParam['project_id']);
}
$data = $objProject->pluck('total', 'stage_id')->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();
return $arrTask;
}
//project duplicate module
public function copyproject($id)
{
if(Auth::user()->can('create project'))
{
$project = Project::find($id);
return view('projects.copy',compact('project'));
}
else
{
return response()->json(['error' => __('Permission denied.')], 401);
}
}
public function copyprojectstore(Request $request,$id)
{
if(Auth::user()->can('create project'))
{
$project = Project::find($id);
$duplicate = new Project();
$duplicate['project_name'] = $project->project_name;
$duplicate['status'] = $project->status;
$duplicate['project_image'] = $project->project_image;
$duplicate['client_id'] = $project->client_id;
$duplicate['description'] = $project->description;
$duplicate['start_date'] = $project->start_date;
$duplicate['end_date'] = $project->end_date;
$duplicate['estimated_hrs'] = $project->estimated_hrs;
$duplicate['created_by'] = \Auth::user()->creatorId();
$duplicate->save();
if(isset($request->user) && in_array("user", $request->user)){
$users = ProjectUser::where('project_id',$project->id)->get();
foreach($users as $user){
$users = new ProjectUser();
$users['user_id'] = $user->user_id;
$users['project_id'] = $duplicate->id;
$users->save();
}
}
else{
$objUser = Auth::user();
$users = new ProjectUser();
$users['user_id'] = $objUser->id;
$users['project_id']= $duplicate->id;
$users->save();
}
if(isset($request->task) && in_array("task", $request->task)){
$tasks = ProjectTask::where('project_id',$project->id)->get();
foreach($tasks as $task){
$project_task = new ProjectTask();
$project_task['name'] = $task->name;
$project_task['description'] = $task->description;
$project_task['estimated_hrs'] = $task->estimated_hrs;
$project_task['start_date'] = $task->start_date;
$project_task['end_date'] = $task->end_date;
$project_task['priority'] = $task->priority;
$project_task['priority_color'] = $task->priority_color;
$project_task['assign_to'] = $task->assign_to;
$project_task['project_id'] = $duplicate->id;
$project_task['milestone_id'] = $task->milestone_id;
$project_task['stage_id'] = $task->stage_id;
$project_task['order'] = $task->order;
$project_task['created_by'] = \Auth::user()->creatorId();
$project_task['is_favourite'] = $task->is_favourite;
$project_task['is_complete'] = $task->is_complete;
$project_task['marked_at'] = $task->marked_at;
$project_task['progress'] = $task->progress;
$project_task->save();
if(in_array("task_comment",$request->task)){
$task_comments = TaskComment::where('task_id',$task->id)->get();
foreach($task_comments as $task_comment){
$comment = new TaskComment();
$comment['comment'] = $task_comment->comment;
$comment['task_id'] = $project_task->id;
$comment['user_id'] = !empty($task_comment)? $task_comment->user_id :0;
$comment['user_type'] = $task_comment->user_type;
$comment['created_by'] = $task_comment->created_by;
$comment->save();
}
}
if(in_array("task_files",$request->task)){
$task_files = TaskFile::where('task_id',$task->id)->get();
foreach($task_files as $task_file){
$file = new TaskFile();
$file['file'] = $task_file->file;
$file['name'] = $task_file->name;
$file['extension'] = $task_file->extension;
$file['file_size'] = $task_file->file_size;
$file['created_by'] = $task_file->created_by;
$file['task_id'] = $project_task->id;
$file['user_type'] = $task_file->user_type;
$file->save();
}
}
}
}
if(isset($request->bug) && in_array("bug", $request->bug)){
$bugs = Bug::where('project_id',$project->id)->get();
foreach($bugs as $bug){
$project_bug = new Bug();
$project_bug['bug_id'] = $bug->bug_id;
$project_bug['project_id'] = $duplicate->id;
$project_bug['title'] = $bug->title;
$project_bug['priority'] = $bug->priority;
$project_bug['start_date'] = $bug->start_date;
$project_bug['due_date'] = $bug->due_date;
$project_bug['description'] = $bug->description;
$project_bug['status'] = $bug->status;
$project_bug['order'] = $bug->order;
$project_bug['assign_to'] = $bug->assign_to;
$project_bug['created_by'] = \Auth::user()->creatorId();
$project_bug->save();
if(in_array("bug_comment",$request->bug)){
$bug_comments = BugComment::where('bug_id',$bug->id)->get();
foreach($bug_comments as $bug_comment){
$bugcomment = new BugComment();
$bugcomment['comment'] = $bug_comment->comment;
$bugcomment['bug_id'] = $project_bug->id;
$bugcomment['user_type'] = $bug_comment->user_type;
$bugcomment['created_by'] = $bug_comment->created_by;
$bugcomment->save();
}
}
if(in_array("bug_files",$request->bug)){
$bug_files = BugFile::where('bug_id',$bug->id)->get();
foreach($bug_files as $bug_file){
$bugfile = new BugFile();
$bugfile['file'] = $bug_file->file;
$bugfile['name'] = $bug_file->name;
$bugfile['extension'] = $bug_file->extension;
$bugfile['file_size'] = $bug_file->file_size;
$bugfile['bug_id'] = $project_bug->id;
$bugfile['user_type'] = $bug_file->user_type;
$bugfile['created_by'] = $bug_file->created_by;
$bugfile->save();
}
}
}
}
if(isset($request->milestone) && in_array("milestone", $request->milestone)){
$milestones = Milestone::where('project_id',$project->id)->get();
foreach ($milestones as $milestone) {
$post = new Milestone();
$post['project_id'] = $duplicate->id;
$post['title'] = $milestone->title;
$post['status'] = $milestone->status;
$post['due_date'] = $milestone->due_date;
$post['start_date'] = $milestone->start_date;
$post['cost'] = $milestone->cost;
$post['progress'] = $milestone->progress;
$post->save();
}
}
if(isset($request->project_file) && in_array("project_file",$request->project_file)){
$project_files = TaskFile::where('task_id',$task->id)->get();
// dd($project_files);
foreach ($project_files as $project_file) {
$ProjectFile = new TaskFile();
$ProjectFile['task_id'] = $duplicate->id;
$ProjectFile['file'] = $project_file->file;
$ProjectFile['name'] = $project_file->name;
$ProjectFile['extension'] = $project_file->extension;
$ProjectFile['file_size'] = $project_file->file_size;
$ProjectFile['user_type'] = $project_file->user_type;
$ProjectFile['created_by'] = $project_file->created_by;
$ProjectFile->save();
}
}
if(isset($request->activity) && in_array('activity',$request->activity))
{
$where_in_array = [];
if( isset($request->milestone) && in_array("milestone", $request->milestone))
{
array_push($where_in_array,"Create Milestone");
}
if(isset($request->task) && in_array("task", $request->task))
{
array_push($where_in_array,"Create Task","Move");
}
if(isset($request->bug) && in_array("bug", $request->bug))
{
array_push($where_in_array,"Create Bug","Move Bug");
}
// if(isset($request->client) && in_array("client", $request->client))
// {
// array_push($where_in_array,"Share with Client");
// }
if(isset($request->user) && in_array("user", $request->user))
{
array_push($where_in_array,"Invite User");
}
if(isset($request->project_file) && in_array("project_file", $request->project_file))
{
array_push($where_in_array,"Upload File");
}
if(count($where_in_array) > 0)
{
$activities = ActivityLog::where('project_id',$project->id)->whereIn('log_type',$where_in_array)->get();
foreach($activities as $activity){
$activitylog = new ActivityLog();
$activitylog['user_id'] = $activity->user_id;
$activitylog['project_id'] = $duplicate->id;
$activitylog['project_id'] = $duplicate->id;
$activitylog['log_type'] = $activity->log_type;
$activitylog['remark'] = $activity->remark;
$activitylog->save();
}
}
}
return redirect()->back()->with('success', 'Project Created Successfully');
}
else
{
return redirect()->back()->with('error', 'permission Denied');
}
}
//share project module
public function copylink_setting_create( $projectID)
{
$objUser = Auth::user();
$project = Project::select('projects.*')->join('project_users', 'projects.id', '=', 'project_users.project_id')->where('project_users.user_id', '=', $objUser->id)->where('projects.id', '=', $projectID)->first();
$result = json_decode($project->copylinksetting);
return view('projects.copylink_setting', compact('project','projectID','result'));
}
public function copylinksetting(Request $request, $id )
{
$objUser = Auth::user();
$data = [];
$data['basic_details'] = isset($request->basic_details) ? 'on' : 'off';
$data['member'] = isset($request->member) ? 'on' : 'off';
$data['milestone'] = isset($request->milestone) ? 'on' : 'off';
$data['client'] = isset($request->client) ? 'on' : 'off';
$data['progress'] = isset($request->progress) ? 'on' : 'off';
$data['activity'] = isset($request->activity) ? 'on' : 'off';
$data['attachment'] = isset($request->attachment) ? 'on' : 'off';
$data['bug_report'] = isset($request->bug_report) ? 'on' : 'off';
$data['expense'] = isset($request->expense) ? 'on' : 'off';
$data['task'] = isset($request->task) ? 'on' : 'off';
$data['tracker_details'] = isset($request->tracker_details) ? 'on' : 'off';
$data['timesheet'] = isset($request->timesheet) ? 'on' : 'off';
$data['password_protected'] = isset($request->password_protected) ? 'on' : 'off';
$project = Project::select('projects.*')
->join('project_users', 'projects.id', '=', 'project_users.project_id')
->where('project_users.user_id', '=', $objUser->id)
->where('projects.id', '=', $id)->first();
if(isset($request->password_protected) && $request->password_protected == 'on' ){
$project->password = base64_encode($request->password);
}else{
$project->password = null;
}
$project->copylinksetting = (count($data) > 0 ) ? json_encode($data) : null;
$project->save();
return redirect()->back()->with('success', __('Copy Link Setting Save Successfully!'));
}
public function projectlink(Request $request,$project_id, $lang='')
{
try {
$id=\Illuminate\Support\Facades\Crypt::decrypt($project_id);
} catch (\Throwable $th) {
return redirect()->back()->with('error', __('Project Not Found.'));
}
$id=\Illuminate\Support\Facades\Crypt::decrypt($project_id);
$project = Project::find($id);
$data = [];
$data['basic_details'] = isset($request->basic_details) ? 'on' : 'off';
$data['member'] = isset($request->member) ? 'on' : 'off';
$data['milestone'] = isset($request->milestone) ? 'on' : 'off';
$data['activity'] = isset($request->activity) ? 'on' : 'off';
$data['attachment'] = isset($request->attachment) ? 'on' : 'off';
$data['bug_report'] = isset($request->bug_report) ? 'on' : 'off';
$data['expense'] = isset($request->expense) ? 'on' : 'off';
$data['task'] = isset($request->task) ? 'on' : 'off';
$data['tracker_details'] = isset($request->tracker_details) ? 'on' : 'off';
$data['timesheet'] = isset($request->timesheet) ? 'on' : 'off';
$data['password_protected'] = isset($request->password_protected) ? 'on' : 'off';
if(Auth::user() != null){
$usr = Auth::user();
}else{
$usr = User::where('id',$project->created_by)->first();
}
$user_projects = $usr->projects->pluck('id')->toArray();
$project_data = [];
// Task Count
$project_task = $project->tasks->count();
$project_done_task = $project->tasks->where('is_complete', '=', 1)->count();
$project_data['task'] = [
'total' => number_format($project_task),
'done' => number_format($project_done_task),
'percentage' => Utility::getPercentage($project_done_task, $project_task),
];
// end Task Count
// Users Assigned
$total_users = User::where('created_by', '=', $usr->id)->count();
$project_data['user_assigned'] = [
'total' => number_format($total_users) . '/' . number_format($total_users),
'percentage' => Utility::getPercentage($total_users, $total_users),
];
// End Users Assigned
// Day left
$total_day = Carbon::parse($project->start_date)->diffInDays(Carbon::parse($project->end_date));
$remaining_day = Carbon::parse($project->start_date)->diffInDays(now());
$project_data['day_left'] = [
'day' => number_format($remaining_day) . '/' . number_format($total_day),
'percentage' => Utility::getPercentage($remaining_day, $total_day),
];
// end day left
if($usr->checkProject($project->id) == 'Owner')
{
$remaining_task = ProjectTask::where('project_id', '=', $project->id)->where('is_complete', '=', 0)->count();
$total_task = ProjectTask::where('project_id', '=', $project->id)->count();
}
else
{
$remaining_task = ProjectTask::where('project_id', '=', $project->id)->where('is_complete', '=', 0)->whereRaw("find_in_set('" . $usr->id . "',assign_to)")->count();
$total_task = ProjectTask::where('project_id', '=', $project->id)->whereRaw("find_in_set('" . $usr->id . "',assign_to)")->count();
}
$project_data['open_task'] = [
'tasks' => number_format($remaining_task) . '/' . number_format($total_task),
'percentage' => Utility::getPercentage($remaining_task, $total_task),
];
// Milestone
$total_milestone = $project->milestones()->count();
$complete_milestone = $project->milestones()->where('status', 'LIKE', 'complete')->count();
$project_data['milestone'] = [
'total' => number_format($complete_milestone) . '/' . number_format($total_milestone),
'percentage' => Utility::getPercentage($complete_milestone, $total_milestone),
];
// End Milestone
// Chart
$seven_days = Utility::getLastSevenDays();
$chart_task = [];
$chart_timesheet = [];
$cnt = 0;
$cnt1 = 0;
foreach(array_keys($seven_days) as $k => $date)
{
if($usr->checkProject($project->id) == 'Owner')
{
$task_cnt = $project->tasks()->where('is_complete', '=', 1)->where('marked_at', 'LIKE', $date)->count();
$arrTimesheet = $project->timesheets()->where('date', 'LIKE', $date)->pluck('time')->toArray();
}
else
{
$task_cnt = $project->tasks()->where('is_complete', '=', 1)->whereRaw("find_in_set('" . $usr->id . "',assign_to)")->where('marked_at', 'LIKE', $date)->count();
$arrTimesheet = $project->timesheets()->where('created_by', '=', $usr->id)->where('date', 'LIKE', $date)->pluck('time')->toArray();
}
// Task Chart Count
$cnt += $task_cnt;
// Timesheet Chart Count
$timesheet_cnt = str_replace(':', '.', Utility::timeToHr($arrTimesheet));
$cn[] = $timesheet_cnt;
$cnt1 += number_format($timesheet_cnt, 2);
$chart_task[] = $task_cnt;
$chart_timesheet[] = number_format($timesheet_cnt, 2);
}
// Allocated Hours
$hrs = Project::projectHrs($project->id);
$project_data['task_allocated_hrs'] = [
'hrs' => number_format($hrs['allocated']) . '/' . number_format($hrs['allocated']),
'percentage' => Utility::getPercentage($hrs['allocated'], $hrs['allocated']),
];
// end allocated hours
// Time spent
if($usr->checkProject($project->id) == 'Owner')
{
$times = $project->timesheets->pluck('time')->toArray();
}
else
{
$times = $project->timesheets()->where('created_by', '=', $usr->id)->pluck('time')->toArray();
}
$totaltime = str_replace(':', '.', Utility::timeToHr($times));
$estimatedtime = $project->estimated_hrs != '' ? $project->estimated_hrs : '0';
$project_data['time_spent'] = [
'total' => number_format($totaltime) . '/' . number_format($estimatedtime),
'percentage' => Utility::getPercentage(number_format($totaltime), $estimatedtime),
];
// end time spent
$project_data['task_chart'] = [
'chart' => $chart_task,
'total' => $cnt,
];
$project_data['timesheet_chart'] = [
'chart' => $chart_timesheet,
'total' => $cnt1,
];
if(isset($request->milestone) && in_array("milestone", $request->milestone)){
$milestones = Milestone::where('project_id',$project->id)->get();
foreach ($milestones as $milestone) {
$post = new Milestone();
$post['project_id'] = $milestone->id;
$post['title'] = $milestone->title;
$post['status'] = $milestone->status;
$post['description'] = $milestone->description;
$post->save();
}
}
if(isset($request->task) && in_array("task", $request->task)){
$tasks = ProjectTask::where('project_id',$project->id)->where('stage_id',$stage->id)->get();
$activities = ActivityLog::where('project_id',$project->id)->where('task_id',$task->id)->get();
foreach($activities as $activity){
$activitylog = new ActivityLog();
$activitylog['user_id'] = $activity->user_id;
$activitylog['project_id'] = $activity->id;
$activitylog['task_id'] = $activity->id;
$activitylog['log_type'] = $activity->log_type;
$activitylog['remark'] = $activity->remark;
$activitylog->save();
}
}
$stages = TaskStage::where('project_id', '=', $id)->orderBy('order')->get();
foreach ($stages as &$status)
{
$stageClass[] = 'task-list-' . $status->id;
$task = ProjectTask::where('project_id', '=', $id);
// check project is shared or owner
if ($usr->checkProject($project_id) == 'Shared') {
$task->whereRaw(
"find_in_set('" . $usr->id . "',assign_to)"
);
}
//end
$task->orderBy('order');
$status['tasks'] = $task ->where('stage_id', '=', $status->id) ->get();
}
$treckers=TimeTracker::where('project_id',$id)->where('created_by',$usr->id)->get();
//bug report
$bugs = Bug::where('project_id',$project->id)->get();
//task
$tasks = ProjectTask::where('project_id',$project->id)->get();
//lang
$lang = !empty($lang) ? $lang : (!empty($usr->lang) ? $usr->lang : env('DEFAULT_ADMIN_LANG')) ;
\App::setLocale($lang);
// dd($lang);
if(\Session::get('copy_pass_true'. $id) == $project->password . '-' . $id)
{
return view('projects.copylink', compact('data','project','project_data','stages','treckers','usr','bugs','tasks','lang'));
}else
{
if(!isset(json_decode($project->copylinksetting)->password_protected) || json_decode($project->copylinksetting)->password_protected != 'on')
{
return view('projects.copylink', compact('data','project','project_data','stages','treckers','usr','lang','tasks','bugs'));
}elseif(isset(json_decode($project->copylinksetting)->password_protected) && json_decode($project->copylinksetting)->password_protected == 'on' && $request->password == base64_decode($project->password)){
\Session::put('copy_pass_true'.$id, $project->password . '-' . $id);
return view('projects.copylink', compact('data','project','project_data','stages','treckers','usr','lang','bugs','tasks'));
}else{
return view('projects.copylink_password', compact('id'));
}
}
}
}