From 561063730158fa647543b65e86932d8ee32ec41d Mon Sep 17 00:00:00 2001 From: sosokker Date: Sun, 19 Nov 2023 01:10:37 +0700 Subject: [PATCH] Add context to overview and finish overview --- inventory/models.py | 12 ++- inventory/urls.py | 4 +- inventory/utils.py | 21 ++++++ inventory/views.py | 22 +++++- .../inventory/{index.html => overview.html} | 74 +++++++------------ ...options_alter_order_order_date_and_more.py | 27 +++++++ transaction/models.py | 10 ++- 7 files changed, 116 insertions(+), 54 deletions(-) create mode 100644 inventory/utils.py rename templates/inventory/{index.html => overview.html} (82%) create mode 100644 transaction/migrations/0002_alter_supply_options_alter_order_order_date_and_more.py diff --git a/inventory/models.py b/inventory/models.py index 64b604d..1b8b11b 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -13,6 +13,16 @@ class Warehouse(models.Model): address = models.TextField() have_freeze = models.BooleanField() + @property + def stock_percentage(self) -> float: + inventories = Inventory.objects.filter(warehouse=self) + total_stock = 0 + total_max_stock = 0 + for inventory in inventories: + total_stock += inventory.current_stock + total_max_stock += inventory.max_stock + return total_stock / total_max_stock * 100 + def __str__(self): return f"{self.name}" @@ -31,7 +41,7 @@ class Inventory(models.Model): current_stock = models.IntegerField() @property - def stock_percentage(self): + def stock_percentage(self) -> float: return self.current_stock / self.max_stock * 100 def __str__(self): diff --git a/inventory/urls.py b/inventory/urls.py index 647ec66..6317246 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include -from inventory.views import test +from inventory.views import OverviewView urlpatterns = [ - path('overview/', test, name='overview'), + path('overview/', OverviewView.as_view(), name='overview'), ] diff --git a/inventory/utils.py b/inventory/utils.py new file mode 100644 index 0000000..9f13884 --- /dev/null +++ b/inventory/utils.py @@ -0,0 +1,21 @@ +from inventory.models import Inventory +from transaction.models import Supply + +def stock_percentage_all() -> float: + inventories = Inventory.objects.all() + total_stock = 0 + total_max_stock = 0 + for inventory in inventories: + total_stock += inventory.current_stock + total_max_stock += inventory.max_stock + if total_max_stock == 0: + return 0 + return total_stock / total_max_stock * 100 + + +def count_pending_supply() -> int: + pending_count = 0 + for supply in Supply.objects.all(): + if supply.pending_status(): + pending_count += 1 + return pending_count \ No newline at end of file diff --git a/inventory/views.py b/inventory/views.py index 413d02d..68135e4 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1,6 +1,24 @@ from django.shortcuts import render +from django.views.generic import TemplateView +from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.decorators import login_required +from inventory.models import Warehouse +from inventory.utils import stock_percentage_all, count_pending_supply +from transaction.models import Customer + @login_required -def test(request): - return render(request, 'inventory/index.html') \ No newline at end of file +def Over(request): + return render(request, 'inventory/index.html') + +class OverviewView(TemplateView, LoginRequiredMixin): + template_name = "inventory/overview.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['warehouse_list'] = Warehouse.objects.all() + context['warehouse_count'] = Warehouse.objects.count() + context['customer_count'] = Customer.objects.count() + context['stock_percentage'] = stock_percentage_all() + context['pending_supply'] = count_pending_supply() + return context \ No newline at end of file diff --git a/templates/inventory/index.html b/templates/inventory/overview.html similarity index 82% rename from templates/inventory/index.html rename to templates/inventory/overview.html index f855ec9..b0d94db 100644 --- a/templates/inventory/index.html +++ b/templates/inventory/overview.html @@ -32,7 +32,7 @@ @@ -116,18 +116,6 @@ - -
- -
- - - - @@ -220,15 +208,15 @@
- +
- Earnings (Monthly)
-
$40,000
+ Warehouse Count
+
{{ warehouse_count }}
@@ -238,15 +226,15 @@
- +
- Earnings (Annual)
-
$215,000
+ Customer Count
+
{{ customer_count }}
@@ -256,22 +244,22 @@
- +
-
Tasks +
Stock Level
-
50%
+
{{ stock_percentage }}%
@@ -285,15 +273,15 @@
- +
- Pending Requests
-
18
+ Pending Supply
+
{{ pending_supply }}
@@ -315,26 +303,18 @@
Warehouse Stock Level
-

Server Migration 20%

-
-
-
-

Sales Tracking 40%

-
-
-
-

Customer Database 60%

-
-
-
-

Payout Details 80%

-
-
-
-

Account Setup Complete!

-
-
-
+ {% if warehouse_list|length != 0 %} + {% for warehouse in warehouse_list %} +

Account Setup + {% if warehouse.stock_percentage == 100 %}Complete!{% else %}{{ warehouse.stock_percentage }}%{% endif %} +

+
+
+
+ {% endfor %} + {% else %} +

No Warehouse Available!

+ {% endif %}
@@ -348,7 +328,7 @@ diff --git a/transaction/migrations/0002_alter_supply_options_alter_order_order_date_and_more.py b/transaction/migrations/0002_alter_supply_options_alter_order_order_date_and_more.py new file mode 100644 index 0000000..0da83b2 --- /dev/null +++ b/transaction/migrations/0002_alter_supply_options_alter_order_order_date_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.7 on 2023-11-18 17:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('transaction', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='supply', + options={'verbose_name_plural': 'Supplies'}, + ), + migrations.AlterField( + model_name='order', + name='order_date', + field=models.DateTimeField(), + ), + migrations.AlterField( + model_name='supply', + name='arrive_date', + field=models.DateTimeField(), + ), + ] diff --git a/transaction/models.py b/transaction/models.py index 27cf510..e2a0e16 100644 --- a/transaction/models.py +++ b/transaction/models.py @@ -1,3 +1,5 @@ +import datetime + from django.db import models from inventory.models import Warehouse, Item @@ -27,7 +29,11 @@ class Supply(models.Model): supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) quantity = models.IntegerField() - arrive_date = models.DateField() + arrive_date = models.DateTimeField() + + def pending_status(self) -> bool: + now = datetime.datetime.now() + return self.arrive_date > now.date() def __str__(self): return f"{self.supplier.name} - {self.item.name} - {self.quantity}" @@ -60,7 +66,7 @@ class Order(models.Model): """ customer = models.ForeignKey(Customer, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) - order_date = models.DateField() + order_date = models.DateTimeField() quantity = models.IntegerField() def __str__(self):