Add "scheduled_for_deletion" field to StockItem

- If set to True, this StockItem will be deleted (soon) by the background worker
- As deletion takes significant time, this prevents delete operations from blocking the UI
This commit is contained in:
Oliver 2021-09-07 16:28:57 +10:00
parent 4b1c2677c5
commit 7d3cd03d6c
3 changed files with 29 additions and 1 deletions

View File

@ -653,6 +653,9 @@ class StockList(generics.ListCreateAPIView):
queryset = StockItemSerializer.annotate_queryset(queryset) queryset = StockItemSerializer.annotate_queryset(queryset)
# Do not expose StockItem objects which are scheduled for deletion
queryset = queryset.filter(scheduled_for_deletion=False)
return queryset return queryset
def filter_queryset(self, queryset): def filter_queryset(self, queryset):

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.4 on 2021-09-07 06:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('stock', '0065_auto_20210701_0509'),
]
operations = [
migrations.AddField(
model_name='stockitem',
name='scheduled_for_deletion',
field=models.BooleanField(default=False, help_text='This StockItem will be deleted by the background worker', verbose_name='Scheduled for deletion'),
),
]

View File

@ -209,7 +209,8 @@ class StockItem(MPTTModel):
belongs_to=None, belongs_to=None,
customer=None, customer=None,
is_building=False, is_building=False,
status__in=StockStatus.AVAILABLE_CODES status__in=StockStatus.AVAILABLE_CODES,
scheduled_for_deletion=False,
) )
# A query filter which can be used to filter StockItem objects which have expired # A query filter which can be used to filter StockItem objects which have expired
@ -588,6 +589,12 @@ class StockItem(MPTTModel):
help_text=_('Select Owner'), help_text=_('Select Owner'),
related_name='stock_items') related_name='stock_items')
scheduled_for_deletion = models.BooleanField(
default=False,
verbose_name=_('Scheduled for deletion'),
help_text=_('This StockItem will be deleted by the background worker'),
)
def is_stale(self): def is_stale(self):
""" """
Returns True if this Stock item is "stale". Returns True if this Stock item is "stale".