edit filter time
This commit is contained in:
@@ -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([
|
||||
|
||||
Reference in New Issue
Block a user