made the stock view more ugly by adding badges showing the number of stored parts, lots and substorages
This commit is contained in:
@@ -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):
|
||||
'''
|
||||
|
@@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user