Commit 74298e50 authored by impfundev's avatar impfundev

feat: overdue book loan and near overdue book loan

parent 1ad162ef
......@@ -2,6 +2,12 @@
<div style="max-width: 80vw" class="w-100 p-4">
<h1 class="h2">Reports</h1>
<div class="row container pt-5">{% include "dashboard/summary.html" %}</div>
<div class="row container pt-5">
{% include "dashboard/overdue_loan.html" %}
</div>
<div class="row container pt-5">
{% include "dashboard/near_overdue_loan.html" %}
</div>
<div class="row container pt-5">
{% include "dashboard/login_history.html" %}
</div>
......
<table class="table">
<legend class="h3">Near Overdue Book Loan</legend>
<thead>
<tr>
<th scope="col">Book Title</th>
<th scope="col">Due Date</th>
<th scope="col">Loan Date</th>
</tr>
</thead>
<tbody>
{% for loan in near_overdue_loans %}
<tr>
<td>{{ loan.book.title }}</td>
<td>{{ loan.due_date }}</td>
<td>{{ loan.loan_date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<table class="table">
<legend class="h3">Overdue Book Loan</legend>
<thead>
<tr>
<th scope="col">Book Title</th>
<th scope="col">Due Date</th>
</tr>
</thead>
<tbody>
{% for loan in overdue_loans %}
<tr>
<td>{{ loan.book.title }}</td>
<td>{{ loan.due_date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<h3 class="h3">At a Glance</h3>
<div class="row container text-center">
<div class="col">
<div class="card h-100 d-flex flex-column">
......@@ -31,9 +32,18 @@
<div class="card h-100">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-calendar-week"></i> Total Book Loan
<i class="bi bi-calendar-week"></i> Book Loan
</h5>
<p class="h1">{{ total_book_loans }}</p>
<div class="d-flex justify-content-center">
<div class="card">
<div class="card-header">Total</div>
<p class="h1">{{ total_book_loans }}</p>
</div>
<div class="card">
<div class="card-header">Overdue</div>
<p class="h1">{{ total_overdue }}</p>
</div>
</div>
</div>
<div class="card-footer">
<a href="/dashboard/book-loans/" class="w-100 btn btn-primary"
......
from datetime import datetime, timedelta
from django.shortcuts import render
from librarians.models import LoginHistory
from members.models import Members
......@@ -9,15 +10,30 @@ def home(request):
def index(request):
latest_login_history = LoginHistory.objects.order_by("login_at")[:10]
latest_login_history = LoginHistory.objects.order_by("-login_at")[:10]
total_book = Book.objects.count()
total_member = Members.objects.count()
total_book_loans = BookLoans.objects.count()
now = datetime.now()
overdue_loans = BookLoans.objects.filter(due_date__lte=now)
for loan in BookLoans.objects.all():
near_overdue_window = loan.due_date - timedelta(days=7)
due_date = loan.due_date
near_overdue_loans = BookLoans.objects.filter(
due_date__range=(near_overdue_window, due_date)
)
context = {
"login_histories": latest_login_history,
"total_book": total_book,
"total_member": total_member,
"total_book_loans": total_book_loans,
"total_overdue": overdue_loans.count(),
"overdue_loans": overdue_loans,
"near_overdue_loans": near_overdue_loans,
}
return render(request, "dashboard/index.html", context)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment