made the stock view more ugly by adding badges showing the number of stored parts, lots and substorages

This commit is contained in:
2025-01-28 22:38:17 +01:00
parent aefcc472ea
commit 6ae94e9ea4
4 changed files with 32 additions and 8 deletions

View File

@@ -75,6 +75,9 @@ class Storage(models.Model):
null=True,
related_name='template_of')
# caching variable for subtrees
storage_list = None
def get_path_components(self):
chain = []
iterator = self
@@ -115,12 +118,18 @@ class Storage(models.Model):
else:
return self.storage_set.all()
def get_tree(self):
self.sub_storages = [self]
for storage in self.storage_set.all():
self.sub_storages += storage.get_tree()
@classmethod
def get_substorage_list(cls, sub_storages):
sub_sub_storages = cls.objects.filter(parent_storage__in=sub_storages)
return self.sub_storages
final_sub_storages = sub_storages | sub_sub_storages
if sub_sub_storages:
final_sub_storages |= cls.get_substorage_list(sub_sub_storages)
return final_sub_storages
def get_storage_list(self):
return Storage.objects.filter(id=self.id) | self.get_substorage_list(self.storage_set.all())
def validate_unique(self, exclude=None):
if Storage.objects.exclude(id=self.id).filter(name=self.name, parent_storage__isnull=True).exists():
@@ -132,12 +141,18 @@ class Storage(models.Model):
raise
def get_total_stock_amount(self):
stocks = Stock.objects.filter(storage=self)
stocks = Stock.objects.filter(storage__in=self.storage_list or self.get_storage_list())
sum = stocks.aggregate(Sum('amount'))['amount__sum']
if sum is None:
sum = 0
return sum
def get_total_stock_count(self):
return Stock.objects.filter(storage__in=self.storage_list or self.get_storage_list()).count()
def get_total_substorage_amount(self):
return len(self.storage_list or self.get_storage_list()) - 1 # -1 as thhe storage list counts the parent storage as well
@classmethod
def from_path(cls, path, root_storage=None):
'''

View File

@@ -76,7 +76,7 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
def search_stock_queryset(self, search):
if self.object.expand_sub_storage_stocks:
stocks_in_storage = Stock.objects.filter(storage__in=self.object.get_tree())
stocks_in_storage = Stock.objects.filter(storage__in=self.object.get_storage_list())
else:
stocks_in_storage = Stock.objects.filter(storage=self.object)