Commit 25dbefd5 authored by impfundev's avatar impfundev

feat: upcoming loans and overdue loans page

parent 47b23a36
......@@ -15,7 +15,7 @@
<tr>
<td>{{ loan.book.title }}</td>
<td>{{ loan.member.name }}</td>
<td>{{ loan.librarians.name }}</td>
<td>{{ loan.librarian.name }}</td>
<td>{{ loan.loan_date }}</td>
<td>{{ loan.due_date }}</td>
<td>{{ loan.return_date }}</td>
......
......@@ -12,7 +12,7 @@
<a
href="/dashboard"
class="btn {% if request.path == '/dashboard/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-bar-chart-line-fill"></i> Reports</a
><i class="bi bi-columns-gap"></i> Dashboard</a
>
<a
href="/dashboard/books"
......@@ -24,15 +24,25 @@
class="btn {% if request.path == '/dashboard/members/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-person-vcard"></i> Members</a
>
<a
href="/dashboard/librarians"
class="btn {% if request.path == '/dashboard/librarians/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-person-fill-lock"></i> Librarian</a
>
<a
href="/dashboard/book-loans"
class="btn {% if request.path == '/dashboard/book-loans/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-calendar-week"></i> Book Loans</a
>
<a
href="/dashboard/librarians"
class="btn {% if request.path == '/dashboard/librarians/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-person-fill-lock"></i> Librarian</a
href="/dashboard/upcoming-loans/"
class="btn {% if request.path == '/dashboard/upcoming-loans/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-calendar2-event"></i> Upcoming Loans</a
>
<a
href="/dashboard/overdued-loans/"
class="btn {% if request.path == '/dashboard/overdued-loans/' %}btn-primary{% else %}btn-outline-primary border-white text-white{% endif %} text-start w-100"
><i class="bi bi-calendar2-x"></i> Overdued Loans</a
>
</div>
</div>
......
from django.urls import path, include
from dashboards.views import index
from dashboards.views import index, UpcomingLoanView, OverduedLoanView
urlpatterns = [
path("", index, name="dashboard"),
......@@ -7,4 +7,6 @@ urlpatterns = [
path("members/", include("members.urls")),
path("book-loans/", include("book_loans.urls")),
path("librarians/", include("librarians.urls")),
path("upcoming-loans/", UpcomingLoanView.as_view(), name="upcoming_loans"),
path("overdued-loans/", OverduedLoanView.as_view(), name="overdued_loans"),
]
from datetime import datetime, timedelta
from django.db.models import Q
from django.views.generic import ListView
from django.shortcuts import render
from datetime import datetime, timedelta
from librarians.models import LoginHistory
from members.models import Members
from book_loans.models import Book, BookLoans
class OverduedLoanView(ListView):
model = BookLoans
template_name = "loans.html"
paginate_by = 5
def get_queryset(self):
queryset = super().get_queryset()
keyword = self.request.GET.get("q")
order = self.request.GET.get("o")
now = datetime.now()
queryset = queryset.filter(due_date__lte=now, return_date=None).order_by(
"-updated_at"
)
if keyword:
queryset = queryset.filter(
Q(book__title__icontains=keyword)
| Q(member__name__icontains=keyword)
| Q(librarian__name__icontains=keyword)
).order_by("-created_at")
if order:
if order == "new":
queryset = queryset.order_by("-created_at")
elif order == "old":
queryset = queryset.order_by("created_at")
return queryset
class UpcomingLoanView(ListView):
model = BookLoans
template_name = "loans.html"
paginate_by = 5
def get_queryset(self):
queryset = super().get_queryset()
keyword = self.request.GET.get("q")
order = self.request.GET.get("o")
now = datetime.now()
due_date_treshold = now.today() + timedelta(days=3)
queryset = (
queryset.filter(due_date__lte=due_date_treshold, return_date=None)
.filter(due_date__gte=now.today())
.order_by("-updated_at")
)
if keyword:
queryset = queryset.filter(
Q(book__title__icontains=keyword)
| Q(member__name__icontains=keyword)
| Q(librarian__name__icontains=keyword)
).order_by("-created_at")
if order:
if order == "new":
queryset = queryset.order_by("-created_at")
elif order == "old":
queryset = queryset.order_by("created_at")
return queryset
def home(request):
return render(request, "homepage.html")
......
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