commonUtil = $commonUtil; $this->ppUtil = $ppUtil; $this->moduleUtil = $moduleUtil; } protected function authorizeModule() { $business_id = request()->session()->get('user.business_id'); if (! auth()->user()->can('professionalproject.manage_milestones')) { abort(403, 'Unauthorized action.'); } } public function index($project_id) { $this->authorizeModule(); $business_id = request()->session()->get('user.business_id'); $project = PpProject::where('business_id', $business_id)->findOrFail($project_id); $milestones = PpMilestone::withCount('tasks') ->where('project_id', $project_id) ->orderBy('position') ->get(); if (request()->ajax()) { return view('professionalproject::milestone.partials.list') ->with(compact('milestones', 'project')) ->render(); } return view('professionalproject::milestone.index') ->with(compact('project', 'milestones')); } public function store(Request $request) { $this->authorizeModule(); $business_id = $request->session()->get('user.business_id'); $milestone = PpMilestone::create([ 'business_id' => $business_id, 'project_id' => $request->input('project_id'), 'title' => $request->input('title'), 'parent_id' => $request->input('parent_id'), 'position' => (PpMilestone::where('project_id', $request->input('project_id'))->max('position') ?? 0) + 1, 'created_by' => auth()->user()->id, ]); return ['success' => true, 'msg' => __('lang_v1.success'), 'milestone' => $milestone]; } public function update(Request $request, $id) { $this->authorizeModule(); $business_id = $request->session()->get('user.business_id'); $milestone = PpMilestone::where('business_id', $business_id)->findOrFail($id); $milestone->update($request->only(['title', 'parent_id', 'position'])); return ['success' => true, 'msg' => __('lang_v1.success')]; } public function destroy($id) { $this->authorizeModule(); $business_id = request()->session()->get('user.business_id'); $milestone = PpMilestone::where('business_id', $business_id)->findOrFail($id); if ($milestone->milestone_type === 'uncategorised') { return ['success' => false, 'msg' => __('professionalproject::lang.cannot_delete_uncategorised')]; } $uncategorised = $this->ppUtil->ensureUncategorisedMilestone( $business_id, $milestone->project_id, auth()->user()->id ); PpTask::where('milestone_id', $milestone->id)->update(['milestone_id' => $uncategorised->id]); $milestone->delete(); return ['success' => true, 'msg' => __('lang_v1.success')]; } }