generated from liutk/owl-admin-base
53 lines
1.5 KiB
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);
|
|
}
|
|
}
|