Implement Storage navigation and other helpful stuff
This commit is contained in:
@@ -89,7 +89,10 @@ class Storage(models.Model):
|
||||
|
||||
def get_total_stock_amount(self):
|
||||
stocks = Stock.objects.filter(storage=self)
|
||||
return stocks.aggregate(Sum('amount'))['amount__sum']
|
||||
sum = stocks.aggregate(Sum('amount'))['amount__sum']
|
||||
if sum is None:
|
||||
sum = 0
|
||||
return sum
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.validate_unique()
|
||||
@@ -216,9 +219,16 @@ class Stock(models.Model):
|
||||
def __str__(self):
|
||||
return str(self.component) + ' @ ' + str(self.amount) + ' in ' + str(
|
||||
self.storage)
|
||||
|
||||
def get_under_watermark():
|
||||
return Stock.objects.filter(amount__lt = F('watermark'))
|
||||
|
||||
@staticmethod
|
||||
def get_under_watermark(user_filter = None, invert: bool = False):
|
||||
query = Stock.objects.filter(amount__lt = F('watermark'))
|
||||
if user_filter is not None:
|
||||
if invert:
|
||||
query = query.exclude(storage__responsible=user_filter)
|
||||
else:
|
||||
query = query.filter(storage__responsible=user_filter)
|
||||
return query
|
||||
|
||||
class DistributorNum(models.Model):
|
||||
class Meta:
|
||||
|
@@ -10,6 +10,7 @@ from django.views.generic import TemplateView, DetailView
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
|
||||
from .models import Storage, Stock
|
||||
from .qr_parser import QrCodeValidator
|
||||
from django.core.paginator import Paginator
|
||||
|
||||
class QrSearchForm(forms.Form):
|
||||
my_qr_validator = QrCodeValidator()
|
||||
@@ -101,11 +102,25 @@ class StockView(LoginRequiredMixin, BaseTemplateMixin, TemplateView):
|
||||
template_name = 'parts/stocks.html'
|
||||
base_title = 'Stocks'
|
||||
navbar_selected = 'Stocks'
|
||||
default_pagination_size = 25
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['low_stocks'] = Stock.get_under_watermark()
|
||||
context['storages'] = Storage.objects.filter(parent_storage=None)
|
||||
|
||||
storage_page = self.request.GET.get('storage_page')
|
||||
if storage_page is None:
|
||||
storage_page = 1
|
||||
low_stock_page = self.request.GET.get('low_stock_page')
|
||||
if low_stock_page is None:
|
||||
low_stock_page = 1
|
||||
|
||||
storage_paginator = Paginator(Storage.objects.filter(parent_storage=None), self.default_pagination_size)
|
||||
low_stock_paginator = Paginator(Stock.get_under_watermark(),
|
||||
self.default_pagination_size)
|
||||
|
||||
context['low_stocks'] = low_stock_paginator.get_page(low_stock_page)
|
||||
context['storages'] = storage_paginator.get_page(storage_page)
|
||||
|
||||
return context
|
||||
|
||||
class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
|
||||
@@ -114,6 +129,7 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
|
||||
pk_url_kwarg = 'uuid'
|
||||
base_title = ''
|
||||
navbar_selected = 'Stocks'
|
||||
default_pagination_size = 8
|
||||
|
||||
def get_breadcrumbs(self):
|
||||
crumbs = self.object.get_path_components()
|
||||
@@ -125,4 +141,11 @@ class StockViewDetail(LoginRequiredMixin, BaseTemplateMixin, DetailView):
|
||||
self.base_title = 'Stocks / ' + self.object.name
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['breadcrumbs'] = self.get_breadcrumbs()
|
||||
|
||||
storage_page = self.request.GET.get('storage_page')
|
||||
if storage_page is None:
|
||||
storage_page = 1
|
||||
storage_paginator = Paginator(Storage.objects.filter(parent_storage=self.object), self.default_pagination_size)
|
||||
|
||||
context['storages'] = storage_paginator.get_page(storage_page)
|
||||
return context
|
||||
|
Reference in New Issue
Block a user