Add warehouse table view and extract nav/footer

This commit is contained in:
sosokker 2023-11-19 02:30:48 +07:00
parent 44d1064503
commit 3d9102d15d
8 changed files with 280 additions and 213 deletions

View File

@ -23,6 +23,10 @@ class Warehouse(models.Model):
total_max_stock += inventory.max_stock
return total_stock / total_max_stock * 100
@property
def inventory_count(self) -> int:
return Inventory.objects.filter(warehouse=self).count()
def __str__(self):
return f"{self.name}"

View File

@ -1,6 +1,7 @@
from django.urls import path, include
from inventory.views import OverviewView
from inventory.views import OverviewView, WarehouseView
urlpatterns = [
path('overview/', OverviewView.as_view(), name='overview'),
path('warehouse/', WarehouseView.as_view(), name='warehouse'),
]

View File

@ -1,3 +1,4 @@
from typing import Any
from django.shortcuts import render
from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
@ -21,4 +22,13 @@ class OverviewView(TemplateView, LoginRequiredMixin):
context['customer_count'] = Customer.objects.count()
context['stock_percentage'] = stock_percentage_all()
context['pending_supply'] = count_pending_supply()
return context
class WarehouseView(TemplateView, LoginRequiredMixin):
template_name = "inventory/warehouse.html"
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
context = super().get_context_data(**kwargs)
context['warehouse_list'] = Warehouse.objects.all()
return context

View File

@ -20,5 +20,6 @@
<!-- Custom styles for this template-->
<link href={% static 'css/sb-admin-2.min.css' %} rel="stylesheet">
</head>
{% block content %}{% endblock %}
{% block content %}
{% endblock %}
</html>

9
templates/footer.html Normal file
View File

@ -0,0 +1,9 @@
<!-- Footer -->
<footer class="sticky-footer bg-white">
<div class="container my-auto">
<div class="copyright text-center my-auto">
<a href="https://github.com/Sosokker/Inventory-Management-System"><i class="fas fa-laugh-wink"></i> Inventory Management System 2023</a>
</div>
</div>
</footer>
<!-- End of Footer -->

View File

@ -6,171 +6,7 @@
<!-- Page Wrapper -->
<div id="wrapper">
<!-- Sidebar -->
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
<!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.html">
<div class="sidebar-brand-icon rotate-n-15">
<i class="fas fa-archive"></i>
</div>
<div class="sidebar-brand-text mx-3">InvTrack<sup>Pro</sup></div>
</a>
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Nav Item - Dashboard -->
<li class="nav-item active">
<a class="nav-link" href={% url 'overview' %}>
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>Overview</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
Storage
</div>
<!-- Nav Item - Warehouse -->
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-fw fa-cog"></i>
<span>Warehouse</span>
</a>
</li>
<!-- Nav Item - Inventory -->
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-fw fa-wrench"></i>
<span>Inventory</span>
</a>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
Manage
</div>
<!-- Nav Item - Customer -->
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-fw fa-folder"></i>
<span>Customer</span>
</a>
</li>
<!-- Nav Item - Order -->
<li class="nav-item">
<a class="nav-link" href="charts.html">
<i class="fas fa-fw fa-chart-area"></i>
<span>Order</span></a>
</li>
<!-- Nav Item - Transfer -->
<li class="nav-item">
<a class="nav-link" href="tables.html">
<i class="fas fa-fw fa-table"></i>
<span>Transfer</span></a>
</li>
<!-- Nav Item - Supply -->
<li class="nav-item">
<a class="nav-link" href="tables.html">
<i class="fas fa-fw fa-table"></i>
<span>Supply</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
</ul>
<!-- End of Sidebar -->
<!-- Content Wrapper -->
<div id="content-wrapper" class="d-flex flex-column">
<!-- Main Content -->
<div id="content">
<!-- Topbar -->
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
<!-- Sidebar Toggle (Topbar) -->
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
<i class="fa fa-bars"></i>
</button>
<!-- Topbar Search -->
<form
class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search">
<div class="input-group">
<input type="text" class="form-control bg-light border-0 small" placeholder="Search for..."
aria-label="Search" aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-primary" type="button">
<i class="fas fa-search fa-sm"></i>
</button>
</div>
</div>
</form>
<!-- Topbar Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Nav Item - Search Dropdown (Visible Only XS) -->
<li class="nav-item dropdown no-arrow d-sm-none">
<a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-search fa-fw"></i>
</a>
<!-- Dropdown - Messages -->
<div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in"
aria-labelledby="searchDropdown">
<form class="form-inline mr-auto w-100 navbar-search">
<div class="input-group">
<input type="text" class="form-control bg-light border-0 small"
placeholder="Search for..." aria-label="Search"
aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-primary" type="button">
<i class="fas fa-search fa-sm"></i>
</button>
</div>
</div>
</form>
</div>
</li>
<!-- Logout -->
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" id="userDropdown" role="button" href={% url "logout" %}
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="mr-2 d-none d-lg-inline font-weight-bold text-gray-800">Logout</span>
</a>
</li>
<div class="topbar-divider d-none d-sm-block"></div>
<!-- Nav Item - User Information -->
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" id="userDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="mr-2 d-none d-lg-inline font-weight-bold text-gray-800">Hi {{ user.username }}!</span>
</a>
</li>
</ul>
</nav>
<!-- End of Topbar -->
{% include "nav.html" %}
<!-- Begin Page Content -->
<div class="container-fluid">
@ -299,16 +135,6 @@
</div>
<!-- End of Main Content -->
<!-- Footer -->
<footer class="sticky-footer bg-white">
<div class="container my-auto">
<div class="copyright text-center my-auto">
<a href="https://github.com/Sosokker/Inventory-Management-System"><i class="fas fa-laugh-wink"></i> Inventory Management System 2023</a>
</div>
</div>
</footer>
<!-- End of Footer -->
</div>
<!-- End of Content Wrapper -->
@ -320,42 +146,7 @@
<i class="fas fa-angle-up"></i>
</a>
<!-- Logout Modal-->
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Ready to Leave?</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a>
</div>
</div>
</div>
</div>
<!-- Bootstrap core JavaScript-->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Custom scripts for all pages-->
<script src="js/sb-admin-2.min.js"></script>
<!-- Page level plugins -->
<script src="vendor/chart.js/Chart.min.js"></script>
<!-- Page level custom scripts -->
<script src="js/demo/chart-area-demo.js"></script>
<script src="js/demo/chart-pie-demo.js"></script>
{% include "footer.html" %}
</body>
{% endblock content %}

View File

@ -0,0 +1,86 @@
{% extends "base.html" %}
{% block content %}
<body id="page-top">
<!-- Page Wrapper -->
<div id="wrapper">
{% include "nav.html" %}
<!-- Content Wrapper -->
<div id="content-wrapper" class="d-flex flex-column">
<!-- Main Content -->
<div id="content">
<!-- Begin Page Content -->
<div class="container-fluid">
<!-- Page Heading -->
<h1 class="h3 mb-2 text-gray-800">Warehouse Tables</h1>
<p class="mb-4">Warehouse Table</p>
<!-- DataTales Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Warehouse</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Name</th>
<th>Address</th>
<th>Number of Inventory</th>
<th>Have Freezer</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Name</th>
<th>Address</th>
<th>Number of Inventory</th>
<th>Have Freezer</th>
</tr>
</tfoot>
<tbody>
{% for warehouse in warehouse_list %}
<tr>
<td>{{ warehouse.name }}</td>
<td>{{ warehouse.address }}</td>
<td>{{ warehouse.inventory_count }}</td>
<td>{{ warehouse.have_freeze }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<!-- End of Main Content -->
</div>
<!-- End of Content Wrapper -->
</div>
<!-- End of Page Wrapper -->
<!-- Scroll to Top Button-->
<a class="scroll-to-top rounded" href="#page-top">
<i class="fas fa-angle-up"></i>
</a>
{% include "footer.html" %}
</body>
{% endblock content %}

165
templates/nav.html Normal file
View File

@ -0,0 +1,165 @@
<!-- Sidebar -->
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">
<!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.html">
<div class="sidebar-brand-icon rotate-n-15">
<i class="fas fa-archive"></i>
</div>
<div class="sidebar-brand-text mx-3">InvTrack<sup>Pro</sup></div>
</a>
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Nav Item - Dashboard -->
<li class="nav-item active">
<a class="nav-link" href={% url 'overview' %}>
<i class="fas fa-fw fa-tachometer-alt"></i>
<span>Overview</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
Storage
</div>
<!-- Nav Item - Warehouse -->
<li class="nav-item">
<a class="nav-link" href={% url "warehouse" %}>
<i class="fas fa-fw fa-cog"></i>
<span>Warehouse</span>
</a>
</li>
<!-- Nav Item - Inventory -->
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-fw fa-wrench"></i>
<span>Inventory</span>
</a>
</li>
<!-- Divider -->
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
Manage
</div>
<!-- Nav Item - Customer -->
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-fw fa-folder"></i>
<span>Customer</span>
</a>
</li>
<!-- Nav Item - Order -->
<li class="nav-item">
<a class="nav-link" href="charts.html">
<i class="fas fa-fw fa-chart-area"></i>
<span>Order</span></a>
</li>
<!-- Nav Item - Transfer -->
<li class="nav-item">
<a class="nav-link" href="tables.html">
<i class="fas fa-fw fa-table"></i>
<span>Transfer</span></a>
</li>
<!-- Nav Item - Supply -->
<li class="nav-item">
<a class="nav-link" href="tables.html">
<i class="fas fa-fw fa-table"></i>
<span>Supply</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
</ul>
<!-- End of Sidebar -->
<!-- Content Wrapper -->
<div id="content-wrapper" class="d-flex flex-column">
<!-- Main Content -->
<div id="content">
<!-- Topbar -->
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
<!-- Sidebar Toggle (Topbar) -->
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
<i class="fa fa-bars"></i>
</button>
<!-- Topbar Search -->
<form
class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search">
<div class="input-group">
<input type="text" class="form-control bg-light border-0 small" placeholder="Search for..."
aria-label="Search" aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-primary" type="button">
<i class="fas fa-search fa-sm"></i>
</button>
</div>
</div>
</form>
<!-- Topbar Navbar -->
<ul class="navbar-nav ml-auto">
<!-- Nav Item - Search Dropdown (Visible Only XS) -->
<li class="nav-item dropdown no-arrow d-sm-none">
<a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-search fa-fw"></i>
</a>
<!-- Dropdown - Messages -->
<div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in"
aria-labelledby="searchDropdown">
<form class="form-inline mr-auto w-100 navbar-search">
<div class="input-group">
<input type="text" class="form-control bg-light border-0 small"
placeholder="Search for..." aria-label="Search"
aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-primary" type="button">
<i class="fas fa-search fa-sm"></i>
</button>
</div>
</div>
</form>
</div>
</li>
<!-- Logout -->
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" id="userDropdown" role="button" href={% url "logout" %}
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="mr-2 d-none d-lg-inline font-weight-bold text-gray-800">Logout</span>
</a>
</li>
<div class="topbar-divider d-none d-sm-block"></div>
<!-- Nav Item - User Information -->
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" id="userDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="mr-2 d-none d-lg-inline font-weight-bold text-gray-800">Hi {{ user.username }}!</span>
</a>
</li>
</ul>
</nav>
<!-- End of Topbar -->