From 6ed740b0a99633b5d8e6229d447c5ec18edb0de7 Mon Sep 17 00:00:00 2001 From: sosokker Date: Sun, 19 Nov 2023 03:51:54 +0700 Subject: [PATCH] Add Warehouse Detail View and filter --- core/urls.py | 4 +- inventory/filters.py | 25 ++++- inventory/urls.py | 4 +- inventory/views.py | 26 ++++- templates/inventory/warehouse.html | 4 +- templates/inventory/warehouse_detail.html | 122 ++++++++++++++++++++++ templates/nav.html | 8 -- 7 files changed, 176 insertions(+), 17 deletions(-) create mode 100644 templates/inventory/warehouse_detail.html diff --git a/core/urls.py b/core/urls.py index eb1afd7..aa3549b 100644 --- a/core/urls.py +++ b/core/urls.py @@ -5,6 +5,6 @@ from django.views.generic.base import RedirectView urlpatterns = [ path('admin/', admin.site.urls), path("accounts/", include("django.contrib.auth.urls")), # new - path('dashboard/', include('inventory.urls'), name='dashboard'), - path('', RedirectView.as_view(url='/dashboard/overview/')), + path('', include('inventory.urls'), name='dashboard'), + path('', RedirectView.as_view(url='/overview/')), ] diff --git a/inventory/filters.py b/inventory/filters.py index dcf7b80..d3ad65c 100644 --- a/inventory/filters.py +++ b/inventory/filters.py @@ -1,7 +1,28 @@ import django_filters -from inventory.models import Warehouse +from inventory.models import Warehouse, Inventory class WarehouseFilter(django_filters.FilterSet): class Meta: model = Warehouse - fields = ['name', 'address', 'have_freeze'] \ No newline at end of file + fields = ['name', 'address', 'have_freeze'] + + +class InventoryFilter(django_filters.FilterSet): + current_stock__gte = django_filters.NumberFilter(field_name='current_stock', lookup_expr='gte', label='Min Current Stock') + current_stock__lte = django_filters.NumberFilter(field_name='current_stock', lookup_expr='lte', label='Max Current Stock') + max_stock__gte = django_filters.NumberFilter(field_name='max_stock', lookup_expr='gte', label='Min Max Stock') + max_stock__lte = django_filters.NumberFilter(field_name='max_stock', lookup_expr='lte', label='Max Max Stock') + ordering = django_filters.OrderingFilter( + fields=( + ('current_stock', 'current_stock'), + ('max_stock', 'max_stock'), + ), + field_labels={ + 'current_stock': 'Current Stock', + 'max_stock': 'Max Stock', + } + ) + + class Meta: + model = Inventory + fields = [] \ No newline at end of file diff --git a/inventory/urls.py b/inventory/urls.py index 9aa3dcc..94bf9b6 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1,7 +1,9 @@ from django.urls import path, include -from inventory.views import OverviewView, WarehouseView +from inventory.views import OverviewView, WarehouseView, InventoryView, WarehouseDetailView urlpatterns = [ path('overview/', OverviewView.as_view(), name='overview'), path('warehouse/', WarehouseView.as_view(), name='warehouse'), + path('warehouse//', WarehouseDetailView.as_view(), name='warehouse-detail'), + path('warehouse///', InventoryView.as_view(), name='inventory'), ] diff --git a/inventory/views.py b/inventory/views.py index 54d0185..8ca00de 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -2,11 +2,11 @@ from typing import Any from django.shortcuts import render from django.views.generic import TemplateView from django_filters.views import FilterView -from inventory.filters import WarehouseFilter +from inventory.filters import WarehouseFilter, InventoryFilter from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.decorators import login_required -from inventory.models import Warehouse +from inventory.models import Warehouse, Inventory from inventory.utils import stock_percentage_all, count_pending_supply from transaction.models import Customer @@ -33,6 +33,28 @@ class WarehouseView(FilterView, LoginRequiredMixin): filterset_class = WarehouseFilter def get_context_data(self, **kwargs: Any) -> dict[str, Any]: + context = super().get_context_data(**kwargs) + context['warehouse_list'] = Warehouse.objects.all() + return context + + +class WarehouseDetailView(FilterView, LoginRequiredMixin): + model = Inventory + template_name = "inventory/warehouse_detail.html" + filterset_class = InventoryFilter + context_object_name = 'inventory_list' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['warehouse_id'] = self.kwargs.get('id') + context['inventory_list'] = Inventory.objects.all() + return context + + +class InventoryView(TemplateView, LoginRequiredMixin): + template_name = "inventory/inventory.html" + + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['warehouse_list'] = Warehouse.objects.all() return context \ No newline at end of file diff --git a/templates/inventory/warehouse.html b/templates/inventory/warehouse.html index f09f95f..48f0df9 100644 --- a/templates/inventory/warehouse.html +++ b/templates/inventory/warehouse.html @@ -88,7 +88,7 @@ {% if filter.is_bound %} {% for warehouse in filter.qs %} - {{ warehouse.name }} + {{ warehouse.name }} {{ warehouse.address }} {{ warehouse.stock_percentage|floatformat:3 }} {{ warehouse.inventory_count }} @@ -98,7 +98,7 @@ {% else %} {% for warehouse in warehouse_list %} - {{ warehouse.name }} + {{ warehouse.name }} {{ warehouse.address }} {{ warehouse.stock_percentage|floatformat:3 }} {{ warehouse.inventory_count }} diff --git a/templates/inventory/warehouse_detail.html b/templates/inventory/warehouse_detail.html new file mode 100644 index 0000000..b6ef679 --- /dev/null +++ b/templates/inventory/warehouse_detail.html @@ -0,0 +1,122 @@ +{% extends "base.html" %} + +{% block content %} + + + +
+ + {% include "nav.html" %} + + +
+ + + +
+ + + +
+ + +

Warehouse Tables

+

Warehouse Table

+ +
+ + +
Filter
+
+ +
+
+ {{ filter.form.as_p }} +
+ +
+ +
+
+
+ + + + + + +
+
+
Warehouse
+
+
+
+ + + + + + + + + + + + + + + + + + + {% if filter.is_bound %} + {% for inventory in filter.qs %} + + + + + + + {% endfor %} + {% else %} + {% for inventory in inventory_list %} + + + + + + + {% endfor %} + {% endif %} + +
Inventory NameCurrent StockMax StockStock Percentage
Inventory NameCurrent StockMax StockStock Percentage
{{ inventory.stock_identifier }}{{ inventory.current_stock }}{{ inventory.max_stock }}{{ inventory.stock_percentage|floatformat:3 }}
{{ inventory.stock_identifier }}{{ inventory.current_stock }}{{ inventory.max_stock }}{{ inventory.stock_percentage|floatformat:3 }}
+
+
+
+ +
+ + +
+ + + +
+ + +
+ + + + + + + + {% include "footer.html" %} + + +{% endblock content %} \ No newline at end of file diff --git a/templates/nav.html b/templates/nav.html index f7c80cb..be299a5 100644 --- a/templates/nav.html +++ b/templates/nav.html @@ -35,14 +35,6 @@ Storage - - -