fix(filters): prevent position and bucket ID overriding position of existing tasks
Some checks failed
continuous-integration/drone/push Build is failing

This fixes a bug where the task position in a task was updated and immediately overridden by the update event handler.

Resolves https://community.vikunja.io/t/not-able-to-move-task-between-buckets-within-a-kanban-view-for-saved-filter/2882
This commit is contained in:
kolaente 2024-10-10 16:05:31 +02:00
parent 8ab387396d
commit 35a463c984
Signed by: konrad
GPG Key ID: F40E70337AB24C9B

View File

@ -332,21 +332,37 @@ func addTaskToFilter(s *xorm.Session, filter *SavedFilter, view *ProjectView, fa
return nil, nil, err
}
bucketID, err := getDefaultBucketID(s, view)
taskHasBucketInView, err := s.Where(builder.And(
builder.Eq{"task_id": task.ID},
builder.Eq{"project_view_id": view.ID},
)).Exist(&TaskBucket{})
if !taskHasBucketInView {
bucketID, err := getDefaultBucketID(s, view)
if err != nil {
return nil, nil, err
}
taskBucket = &TaskBucket{
BucketID: bucketID,
TaskID: task.ID,
ProjectViewID: view.ID,
}
}
// Check if a position for this task already exists
existingTaskPosition, err := s.Where(builder.And(
builder.Eq{"task_id": task.ID},
builder.Eq{"project_view_id": view.ID},
)).Exist(&TaskPosition{})
if err != nil {
return nil, nil, err
}
taskBucket = &TaskBucket{
BucketID: bucketID,
TaskID: task.ID,
ProjectViewID: view.ID,
}
taskPosition = &TaskPosition{
TaskID: task.ID,
ProjectViewID: view.ID,
Position: calculateDefaultPosition(task.Index, task.Position),
if !existingTaskPosition {
taskPosition = &TaskPosition{
TaskID: task.ID,
ProjectViewID: view.ID,
Position: calculateDefaultPosition(task.Index, task.Position),
}
}
return