ultimatepos/Modules/ProfessionalProject/Http/Controllers/MilestoneController.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')];
}
}