Files
Verde-Web/app/Http/Controllers/Api/V1/Helper/HelperAssignmentController.php

98 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1\Helper;
use App\Http\Controllers\Api\V1\ApiController;
use App\Http\Resources\TeamMemberResource;
use App\Models\TeamMember;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class HelperAssignmentController extends ApiController
{
public function assignment(Request $request): JsonResponse
{
$user = $request->user();
$today = now()->toDateString();
$assignment = TeamMember::query()
->where('user_id', $user->id)
->where('role_in_team', TeamMember::ROLE_HELPER)
->whereDate('assigned_from', '<=', $today)
->where(function ($q) use ($today) {
$q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today);
})
->with(['team.driver', 'team.scanner', 'team.truck', 'team.area'])
->orderBy('id', 'desc')
->first();
if (! $assignment) {
return $this->ok(null, 'No active assignment for today.');
}
return $this->ok(new TeamMemberResource($assignment));
}
public function accept(Request $request): JsonResponse
{
$user = $request->user();
$today = now()->toDateString();
$assignment = TeamMember::query()
->where('user_id', $user->id)
->where('role_in_team', TeamMember::ROLE_HELPER)
->whereDate('assigned_from', '<=', $today)
->where(function ($q) use ($today) {
$q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today);
})
->orderBy('id', 'desc')
->first();
if (! $assignment) {
return $this->fail('No active assignment to accept.', null, 404);
}
$assignment->update(['status' => TeamMember::STATUS_ACCEPTED]);
return $this->ok(new TeamMemberResource($assignment->load(['team.driver', 'team.scanner', 'team.truck', 'team.area'])), 'Assignment accepted.');
}
public function reject(Request $request): JsonResponse
{
$user = $request->user();
$today = now()->toDateString();
$assignment = TeamMember::query()
->where('user_id', $user->id)
->where('role_in_team', TeamMember::ROLE_HELPER)
->whereDate('assigned_from', '<=', $today)
->where(function ($q) use ($today) {
$q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today);
})
->orderBy('id', 'desc')
->first();
if (! $assignment) {
return $this->fail('No active assignment to reject.', null, 404);
}
$assignment->update(['status' => TeamMember::STATUS_REJECTED]);
return $this->ok(new TeamMemberResource($assignment->load(['team.driver', 'team.scanner', 'team.truck', 'team.area'])), 'Assignment rejected.');
}
public function history(Request $request): JsonResponse
{
$user = $request->user();
$assignments = TeamMember::query()
->where('user_id', $user->id)
->where('role_in_team', TeamMember::ROLE_HELPER)
->with(['team.driver', 'team.scanner', 'team.truck', 'team.area'])
->orderBy('assigned_from', 'desc')
->paginate($request->integer('per_page', 15));
return $this->ok(TeamMemberResource::collection($assignments));
}
}