store-manage/app/Http/Controllers/Api/TaskController.php

53 lines
1.5 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Resources\TaskResource;
use App\Models\Task;
use App\Models\TaskHygiene;
use App\Models\TaskLedger;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TaskController extends Controller
{
public function index(Request $request)
{
/** @var \App\Models\Employee */
$user = $request->user();
$orderBy = <<<'MySQL'
CASE
WHEN task_status = 1 THEN 100
ELSE 0
END
MySQL;
/** @var \Illuminate\Database\Eloquent\Collection */
$tasks = Task::with(['taskable'])
->whereHasMorph(
'taskable',
[TaskHygiene::class, TaskLedger::class],
function (Builder $query, string $type) use ($user) {
switch ($type) {
case TaskLedger::class:
case TaskHygiene::class:
if ($user->isStoreMaster()) {
$query->where('store_id', $user->store_id);
} else {
$query->whereRaw('1!=1');
}
break;
}
}
)
->orderBy(DB::raw($orderBy), 'DESC')
->orderBy('start_at', 'ASC')
->orderBy('end_at', 'ASC')
->simplePaginate($request->query('per_page', 20));
return TaskResource::collection($tasks);
}
}