mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-08 00:02:15 +01:00
Add ability to set task to done, fixes ST-244
This commit is contained in:
committed by
Gregor Vostrak
parent
75e739f6fb
commit
364168debd
@@ -15,6 +15,7 @@ use App\Models\Task;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class TaskController extends Controller
|
||||
{
|
||||
@@ -53,6 +54,12 @@ class TaskController extends Controller
|
||||
if (! $canViewAllTasks) {
|
||||
$query->visibleByEmployee($user);
|
||||
}
|
||||
$doneFilter = $request->getFilterDone();
|
||||
if ($doneFilter === 'true') {
|
||||
$query->whereNotNull('done_at');
|
||||
} elseif ($doneFilter === 'false') {
|
||||
$query->whereNull('done_at');
|
||||
}
|
||||
|
||||
$tasks = $query->paginate(config('app.pagination_per_page_default'));
|
||||
|
||||
@@ -89,6 +96,9 @@ class TaskController extends Controller
|
||||
{
|
||||
$this->checkPermission($organization, 'tasks:update', $task);
|
||||
$task->name = $request->input('name');
|
||||
if ($request->has('is_done')) {
|
||||
$task->done_at = $request->getIsDone() ? Carbon::now() : null;
|
||||
}
|
||||
$task->save();
|
||||
|
||||
return new TaskResource($task);
|
||||
|
||||
@@ -39,6 +39,15 @@ class TaskIndexRequest extends FormRequest
|
||||
return $builder;
|
||||
}),
|
||||
],
|
||||
'done' => [
|
||||
'string',
|
||||
'in:true,false,all',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function getFilterDone(): string
|
||||
{
|
||||
return $this->input('done', 'false');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,16 @@ class TaskUpdateRequest extends FormRequest
|
||||
return $builder->where('project_id', '=', $this->task->project_id);
|
||||
}))->ignore($this->task->getKey())->withCustomTranslation('validation.task_name_already_exists'),
|
||||
],
|
||||
'is_done' => [
|
||||
'boolean',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function getIsDone(): bool
|
||||
{
|
||||
assert($this->has('is_done'));
|
||||
|
||||
return $this->boolean('is_done');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ class TaskResource extends BaseResource
|
||||
'id' => $this->resource->id,
|
||||
/** @var string $name Name */
|
||||
'name' => $this->resource->name,
|
||||
/** @var bool $is_done Whether the task is done */
|
||||
'is_done' => $this->resource->is_done,
|
||||
/** @var string $project_id ID of the project */
|
||||
'project_id' => $this->resource->project_id,
|
||||
/** @var string $created_at When the tag was created */
|
||||
|
||||
@@ -7,6 +7,7 @@ namespace App\Models;
|
||||
use App\Models\Concerns\HasUuids;
|
||||
use Database\Factories\TaskFactory;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
@@ -19,11 +20,13 @@ use Illuminate\Support\Carbon;
|
||||
* @property string $name
|
||||
* @property string $project_id
|
||||
* @property string $organization_id
|
||||
* @property Carbon|null $done_at
|
||||
* @property Carbon|null $created_at
|
||||
* @property Carbon|null $updated_at
|
||||
* @property-read Project $project
|
||||
* @property-read Organization $organization
|
||||
* @property-read Collection<int, TimeEntry> $timeEntries
|
||||
* @property-read bool $is_done
|
||||
*
|
||||
* @method static TaskFactory factory()
|
||||
*/
|
||||
@@ -76,4 +79,14 @@ class Task extends Model
|
||||
return $builder->visibleByEmployee($user);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Attribute<bool, never>
|
||||
*/
|
||||
public function isDone(): Attribute
|
||||
{
|
||||
return Attribute::make(
|
||||
get: fn (mixed $value, array $attributes) => isset($attributes['done_at']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user