edit filter time

This commit is contained in:
2026-06-02 22:17:47 +03:30
parent 300575930f
commit 41d1036300
7 changed files with 844 additions and 250 deletions
+42 -2
View File
@@ -122,6 +122,28 @@ class TaskController extends Controller
return $totalSeconds;
}
private function resolveTaskFinishedAt($durations): ?string
{
$latest = collect($durations)
->pluck('end')
->filter()
->map(fn ($value) => Carbon::parse($value))
->sortDesc()
->first();
return $latest?->toDateTimeString();
}
private function resolveTaskFinishedAtByTaskId(int $taskId): ?string
{
return $this->resolveTaskFinishedAt(
TaskDuration::query()
->where('task_id', $taskId)
->whereNotNull('end')
->get(['end'])
);
}
private function resolveAssigneeNames(Tasks $task, array $usersById = []): array
{
$assignees = is_string($task->assignees) ? json_decode($task->assignees, true) : $task->assignees;
@@ -155,6 +177,7 @@ class TaskController extends Controller
'description' => $task->description,
'start_date' => $task->start_date,
'target_date' => $task->target_date,
'finished_at' => $task->finished_at ?? null,
'priority' => $task->priority,
'state' => $task->state,
'app' => $task->app,
@@ -200,6 +223,7 @@ class TaskController extends Controller
'description' => $task->description,
'start_date' => $task->start_date,
'target_date' => $task->target_date,
'finished_at' => $this->resolveTaskFinishedAtByTaskId($task->id),
'priority' => $task->priority,
'state' => $task->state,
'app' => $task->app,
@@ -295,7 +319,7 @@ class TaskController extends Controller
$activeTaskIds = $activeQuery->pluck('task_id')->flip();
$durationQuery = TaskDuration::query()
->select(['task_id', 'user_id', 'duration'])
->select(['task_id', 'user_id', 'duration', 'end'])
->whereIn('task_id', $taskIds)
->whereNotNull('duration');
@@ -305,12 +329,20 @@ class TaskController extends Controller
$durationsByTaskId = $durationQuery->get()->groupBy('task_id');
$finishedAtByTaskId = TaskDuration::query()
->select(['task_id', 'end'])
->whereIn('task_id', $taskIds)
->whereNotNull('end')
->get()
->groupBy('task_id');
foreach ($tasks as $task) {
$task->active = $activeTaskIds->has($task->id);
$task->creator_name = $task->creator?->name ?? 'نامشخص';
$task->assignee_names = $this->resolveAssigneeNames($task, $usersById);
$ids = is_string($task->assignees) ? json_decode($task->assignees, true) : $task->assignees;
$task->assignee_ids = is_array($ids) ? array_map('strval', $ids) : [];
$task->finished_at = $this->resolveTaskFinishedAt($finishedAtByTaskId->get($task->id, collect()));
$totalSeconds = $this->sumDurationSeconds(
$durationsByTaskId->get($task->id, collect()),
$isAdmin ? null : $user->id
@@ -475,7 +507,14 @@ class TaskController extends Controller
} else {
unset($data['assignees']);
}
unset($data['_token'], $data['id'], $data['start_date_display'], $data['target_date_display']);
unset(
$data['_token'],
$data['id'],
$data['start_date_display'],
$data['target_date_display'],
$data['completed_at'],
$data['completed_at_display']
);
$task->update($data);
$after = $task->toArray();
@@ -626,6 +665,7 @@ class TaskController extends Controller
'duration' => $duration,
'start' => $taskDU->start,
'end' => $taskDU->end,
'finished_at' => $this->resolveTaskFinishedAtByTaskId($task->id),
]);
} else
return response()->json([