ultimatepos/Modules/ProfessionalProject/Http/Controllers/TaskStatusController.php

92 lines
3.2 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\PpTask;
use Modules\ProfessionalProject\Entities\PpTaskStatus;
use Modules\ProfessionalProject\Utils\ProfessionalProjectUtil;
class TaskStatusController 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_task_statuses')) {
abort(403, 'Unauthorized action.');
}
$this->ppUtil->ensureTaskStatuses($business_id, auth()->user()->id);
}
public function index()
{
$this->authorizeModule();
$business_id = request()->session()->get('user.business_id');
$statuses = PpTaskStatus::where('business_id', $business_id)->orderBy('position')->get();
return view('professionalproject::task_status.index')->with(compact('statuses'));
}
public function store(Request $request)
{
$this->authorizeModule();
$business_id = $request->session()->get('user.business_id');
PpTaskStatus::create([
'business_id' => $business_id,
'title' => $request->input('title'),
'color' => $request->input('color', '#3498db'),
'position' => (PpTaskStatus::where('business_id', $business_id)->max('position') ?? 0) + 1,
'is_completed' => ! empty($request->input('is_completed')),
'created_by' => auth()->user()->id,
]);
return ['success' => true, 'msg' => __('lang_v1.success')];
}
public function update(Request $request, $id)
{
$this->authorizeModule();
$business_id = $request->session()->get('user.business_id');
$status = PpTaskStatus::where('business_id', $business_id)->findOrFail($id);
$status->update([
'title' => $request->input('title', $status->title),
'color' => $request->input('color', $status->color),
'position' => $request->input('position', $status->position),
'is_completed' => $request->has('is_completed') ? ! empty($request->input('is_completed')) : $status->is_completed,
]);
return ['success' => true, 'msg' => __('lang_v1.success')];
}
public function destroy($id)
{
$this->authorizeModule();
$business_id = request()->session()->get('user.business_id');
$status = PpTaskStatus::where('business_id', $business_id)->findOrFail($id);
if (PpTask::where('status_id', $status->id)->exists()) {
return ['success' => false, 'msg' => __('professionalproject::lang.status_has_tasks')];
}
$status->delete();
return ['success' => true, 'msg' => __('lang_v1.success')];
}
}