mirror of
https://github.com/Sosokker/Inventory-Management-System.git
synced 2025-12-19 23:44:05 +01:00
Add InventoryDetail filter
This commit is contained in:
parent
83f55e8193
commit
7c841cf5f6
@ -1,5 +1,6 @@
|
|||||||
import django_filters
|
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 WarehouseFilter(django_filters.FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -26,3 +27,27 @@ class InventoryFilter(django_filters.FilterSet):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Inventory
|
model = Inventory
|
||||||
fields = []
|
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']
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
from typing import Any
|
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.views.generic import TemplateView
|
||||||
from django_filters.views import FilterView
|
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.mixins import LoginRequiredMixin
|
||||||
from django.contrib.auth.decorators import login_required
|
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 inventory.utils import stock_percentage_all, count_pending_supply
|
||||||
from transaction.models import Customer
|
from transaction.models import Customer
|
||||||
|
|
||||||
@ -52,12 +52,20 @@ class WarehouseDetailView(FilterView, LoginRequiredMixin):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class InventoryView(TemplateView, LoginRequiredMixin):
|
class InventoryView(FilterView, LoginRequiredMixin):
|
||||||
template_name = "inventory/inventory.html"
|
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):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**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['item_list'] = inventory.item_set.all()
|
||||||
context['inventory_name'] = inventory.stock_identifier
|
context['inventory_name'] = inventory.stock_identifier
|
||||||
context['warehouse_name'] = inventory.warehouse.name
|
context['warehouse_name'] = inventory.warehouse.name
|
||||||
|
|||||||
@ -29,18 +29,14 @@
|
|||||||
<h6 class="m-0 font-weight-bold text-primary">Filter</h6>
|
<h6 class="m-0 font-weight-bold text-primary">Filter</h6>
|
||||||
</a>
|
</a>
|
||||||
<!-- Card Content - Collapse -->
|
<!-- Card Content - Collapse -->
|
||||||
<form method="get">
|
<form method="get" class="p-4">
|
||||||
<div class="row g-3 align-items-center mx-2 my-4">
|
|
||||||
{{ filter.form.as_p }}
|
{{ filter.form.as_p }}
|
||||||
<div class="col-auto">
|
<label for="{{ filter.form.ordering.id_for_label }}">Sort by:</label>
|
||||||
<button type="submit" class="btn btn-primary">Filter</button>
|
{{ filter.form.ordering }}
|
||||||
</div>
|
<input type="submit" value="Apply">
|
||||||
<div class="col-auto">
|
|
||||||
<a href={{ request.path }} class="btn btn-danger">
|
<a href={{ request.path }} class="btn btn-danger">
|
||||||
<i class="fas fa-trash"></i> Clear Filter
|
<i class="fas fa-trash"></i> Clear Filter
|
||||||
</a>
|
</a>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -46,7 +46,7 @@
|
|||||||
<button type="submit" class="btn btn-primary">Filter</button>
|
<button type="submit" class="btn btn-primary">Filter</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<a href="{% url 'warehouse' %}" class="btn btn-danger">
|
<a href={{ request.path }} class="btn btn-danger">
|
||||||
<i class="fas fa-trash"></i> Clear Filter
|
<i class="fas fa-trash"></i> Clear Filter
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
<hr class="sidebar-divider my-0">
|
<hr class="sidebar-divider my-0">
|
||||||
|
|
||||||
<!-- Nav Item - Dashboard -->
|
<!-- Nav Item - Dashboard -->
|
||||||
<li class="nav-item active">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href={% url 'overview' %}>
|
<a class="nav-link" href={% url 'overview' %}>
|
||||||
<i class="fas fa-fw fa-tachometer-alt"></i>
|
<i class="fas fa-fw fa-tachometer-alt"></i>
|
||||||
<span>Overview</span></a>
|
<span>Overview</span></a>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user