diff --git a/inventory/filters.py b/inventory/filters.py index d3ad65c..2b09305 100644 --- a/inventory/filters.py +++ b/inventory/filters.py @@ -1,5 +1,6 @@ import django_filters -from inventory.models import Warehouse, Inventory +from django_filters import OrderingFilter +from inventory.models import Warehouse, Inventory, Item class WarehouseFilter(django_filters.FilterSet): class Meta: @@ -25,4 +26,28 @@ class InventoryFilter(django_filters.FilterSet): class Meta: model = Inventory - fields = [] \ No newline at end of file + fields = [] + + +class ItemFilter(django_filters.FilterSet): + name = django_filters.CharFilter(lookup_expr='icontains', label='Item Name') + category = django_filters.CharFilter(field_name='category__name', lookup_expr='icontains', label='Category') + warehouse = django_filters.CharFilter(field_name='inventory__warehouse__name', lookup_expr='icontains', label='Warehouse') + quantity = django_filters.NumberFilter(label='Quantity', widget=django_filters.widgets.RangeWidget(attrs={'placeholder': 'Range'})) + weight = django_filters.NumberFilter(label='Weight', widget=django_filters.widgets.RangeWidget(attrs={'placeholder': 'Range'})) + ordering = OrderingFilter( + fields=( + ('quantity', 'quantity'), + ('weight', 'weight'), + ('inventory__warehouse__name', 'warehouse_name'), + ), + field_labels={ + 'quantity': 'Quantity', + 'weight': 'Weight', + 'inventory__warehouse__name': 'Warehouse Name', + } + ) + + class Meta: + model = Item + fields = ['name', 'category', 'warehouse', 'quantity', 'weight'] diff --git a/inventory/views.py b/inventory/views.py index db654ea..e16dbc7 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1,12 +1,12 @@ from typing import Any -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render from django.views.generic import TemplateView from django_filters.views import FilterView -from inventory.filters import WarehouseFilter, InventoryFilter +from inventory.filters import WarehouseFilter, InventoryFilter, ItemFilter from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.decorators import login_required -from inventory.models import Warehouse, Inventory +from inventory.models import Warehouse, Inventory, Item from inventory.utils import stock_percentage_all, count_pending_supply from transaction.models import Customer @@ -52,12 +52,20 @@ class WarehouseDetailView(FilterView, LoginRequiredMixin): return context -class InventoryView(TemplateView, LoginRequiredMixin): +class InventoryView(FilterView, LoginRequiredMixin): template_name = "inventory/inventory.html" + model = Item + filterset_class = ItemFilter + + def get_queryset(self): + queryset = super().get_queryset() + inventory_id = self.kwargs.get('iid') + inventory = get_object_or_404(Inventory, id=inventory_id) + return queryset.filter(inventory=inventory) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - inventory = Inventory.objects.get(id=self.kwargs.get('iid')) + inventory = get_object_or_404(Inventory, id=self.kwargs.get('iid')) context['item_list'] = inventory.item_set.all() context['inventory_name'] = inventory.stock_identifier context['warehouse_name'] = inventory.warehouse.name diff --git a/templates/inventory/inventory.html b/templates/inventory/inventory.html index 8107a24..d0c3637 100644 --- a/templates/inventory/inventory.html +++ b/templates/inventory/inventory.html @@ -29,19 +29,15 @@