fix(filters): add tasks to filter buckets when updating the filter
This commit is contained in:
parent
5cc420b289
commit
f8fb9d7407
@ -280,8 +280,18 @@ func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklo
|
||||
}
|
||||
|
||||
// Move all tasks into the new bucket when the project already has tasks
|
||||
err = addTasksToView(s, a, p, b)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return RecalculateTaskPositions(s, p, a)
|
||||
}
|
||||
|
||||
func addTasksToView(s *xorm.Session, a web.Auth, pv *ProjectView, b *Bucket) (err error) {
|
||||
c := &TaskCollection{
|
||||
ProjectID: p.ProjectID,
|
||||
ProjectID: pv.ProjectID,
|
||||
}
|
||||
ts, _, _, err := c.ReadAll(s, a, "", 0, -1)
|
||||
if err != nil {
|
||||
@ -298,17 +308,12 @@ func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklo
|
||||
taskBuckets = append(taskBuckets, &TaskBucket{
|
||||
TaskID: task.ID,
|
||||
BucketID: b.ID,
|
||||
ProjectViewID: p.ID,
|
||||
ProjectViewID: pv.ID,
|
||||
})
|
||||
}
|
||||
|
||||
_, err = s.Insert(&taskBuckets)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return RecalculateTaskPositions(s, p, a)
|
||||
}
|
||||
|
||||
// Update is the handler to update a project view
|
||||
|
@ -18,12 +18,12 @@ package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
"xorm.io/builder"
|
||||
|
||||
"code.vikunja.io/api/pkg/log"
|
||||
"code.vikunja.io/api/pkg/user"
|
||||
|
||||
"code.vikunja.io/web"
|
||||
"xorm.io/builder"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
@ -195,7 +195,78 @@ func (sf *SavedFilter) Update(s *xorm.Session, _ web.Auth) error {
|
||||
"is_favorite",
|
||||
).
|
||||
Update(sf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Add all tasks which are not already in a bucket to the default bucket
|
||||
kanbanFilterViews := []*ProjectView{}
|
||||
err = s.Where("project_id = ? and view_kind = ? and bucket_configuration_mode = ?", getProjectIDFromSavedFilterID(sf.ID), ProjectViewKindKanban, BucketConfigurationModeManual).
|
||||
Find(&kanbanFilterViews)
|
||||
if err != nil || len(kanbanFilterViews) == 0 {
|
||||
return err
|
||||
}
|
||||
|
||||
parsedFilters, err := getTaskFiltersFromFilterString(sf.Filters.Filter, sf.Filters.FilterTimezone)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filterCond, err := convertFiltersToDBFilterCond(parsedFilters, sf.Filters.FilterIncludeNulls)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
taskBuckets := []*TaskBucket{}
|
||||
taskPositions := []*TaskPosition{}
|
||||
|
||||
for _, view := range kanbanFilterViews {
|
||||
// Fetch all tasks in the filter but not in task_bucket
|
||||
// select * from tasks where id not in (select task_id from task_buckets where project_view_id = ?) and FILTER_COND
|
||||
tasksToAdd := []*Task{}
|
||||
err = s.Where(builder.And(
|
||||
builder.NotIn("id",
|
||||
builder.
|
||||
Select("task_id").
|
||||
From("task_buckets").
|
||||
Where(builder.Eq{"project_view_id": view.ID})),
|
||||
filterCond,
|
||||
)).
|
||||
Find(&tasksToAdd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
bucketID, err := getDefaultBucketID(s, view)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, task := range tasksToAdd {
|
||||
taskBuckets = append(taskBuckets, &TaskBucket{
|
||||
TaskID: task.ID,
|
||||
BucketID: bucketID,
|
||||
ProjectViewID: view.ID,
|
||||
})
|
||||
|
||||
taskPositions = append(taskPositions, &TaskPosition{
|
||||
TaskID: task.ID,
|
||||
ProjectViewID: view.ID,
|
||||
Position: 0,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
_, err = s.Insert(taskBuckets)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = s.Insert(taskPositions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete removes a saved filter
|
||||
|
Loading…
x
Reference in New Issue
Block a user