105 lines
3.5 KiB
PHP
105 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\ProfessionalProject\Http\Controllers;
|
|
|
|
use App\Utils\ModuleUtil;
|
|
use App\Utils\Util;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\ProfessionalProject\Entities\PpMilestone;
|
|
use Modules\ProfessionalProject\Entities\PpProject;
|
|
use Modules\ProfessionalProject\Entities\PpTask;
|
|
use Modules\ProfessionalProject\Utils\ProfessionalProjectUtil;
|
|
|
|
class MilestoneController extends Controller
|
|
{
|
|
protected $commonUtil;
|
|
protected $ppUtil;
|
|
protected $moduleUtil;
|
|
|
|
public function __construct(Util $commonUtil, ProfessionalProjectUtil $ppUtil, ModuleUtil $moduleUtil)
|
|
{
|
|
$this->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')];
|
|
}
|
|
}
|