Add completed/abandoned shelves with status transitions
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

Items can be moved to Completed or Abandoned via card buttons.
Only active items appear in the default/category tabs; completed and
abandoned items are visible only in their respective shelf tabs.
Restore button moves items back to active.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-01 23:19:10 +03:00
parent 095614cb65
commit da11a056ed
5 changed files with 81 additions and 2 deletions

View File

@@ -35,8 +35,11 @@ SORT_MAP = {
def item_list(request):
category = request.GET.get('category', '')
sort = request.GET.get('sort', 'fav')
shelf = request.GET.get('shelf', Item.ACTIVE)
if shelf not in (Item.ACTIVE, Item.COMPLETED, Item.ABANDONED):
shelf = Item.ACTIVE
items = Item.objects.filter(user=request.user)
items = Item.objects.filter(user=request.user, status=shelf)
if category:
items = items.filter(category=category)
items = items.order_by(*SORT_MAP.get(sort, SORT_MAP['fav']))
@@ -45,6 +48,7 @@ def item_list(request):
'items': items,
'category': category,
'sort': sort,
'shelf': shelf,
'categories': Item.CATEGORY_CHOICES,
})
@@ -79,6 +83,18 @@ def item_edit(request, pk):
return render(request, 'backlogger/item_form.html', {'form': form, 'action': 'Edit', 'item': item})
@login_required
def item_set_status(request, pk):
if request.method == 'POST':
item = get_object_or_404(Item, pk=pk, user=request.user)
new_status = request.POST.get('status')
if new_status in (Item.ACTIVE, Item.COMPLETED, Item.ABANDONED):
item.status = new_status
item.save(update_fields=['status', 'updated_at'])
next_url = request.POST.get('next') or reverse('backlogger:list')
return redirect(next_url)
@login_required
def item_delete(request, pk):
if request.method == 'POST':