Commit 8e5544d5 authored by Ilham Maulana's avatar Ilham Maulana 💻

fix: sifting dashboard data from view to context processors

parent e9888012
......@@ -90,6 +90,7 @@ TEMPLATES = [
"django.contrib.messages.context_processors.messages",
# local
"users.utils.context_processors.user_context",
"dashboard.utils.context_processors.dashboard_context",
],
},
},
......
from django.utils import timezone
from users.models import LibrarianLoginHistory, Member
from book.models import Category, Book
from loans.models import BookLoan
def dashboard_context(request):
login_history = LibrarianLoginHistory.objects.order_by("-date")[:10]
book_loans = BookLoan.objects.all()
total_book = Book.objects.count()
total_category = Category.objects.count()
total_member = Member.objects.count()
total_book_loans = book_loans.count()
now = timezone.now()
overdue_loans = book_loans.filter(due_date__lte=now, return_date=None).order_by(
"-due_date"
)[:10]
due_date_treshold = now + timezone.timedelta(days=3)
upcoming_loans = (
book_loans.filter(due_date__lte=due_date_treshold, return_date=None)
.filter(due_date__gte=now)
.order_by("-due_date")[:10]
)
data = {
"login_histories": login_history,
"total_book": total_book,
"total_category": total_category,
"total_member": total_member,
"total_book_loans": total_book_loans,
"total_overdue": overdue_loans.count(),
"total_upcoming": upcoming_loans.count(),
"overdue_loans": overdue_loans,
"upcoming_loans": upcoming_loans,
}
return data
from django.utils import timezone
from django.db.models import Q
from django.views.generic import ListView, TemplateView
from users.models import LibrarianLoginHistory, Member
from book.models import Category, Book
from loans.models import BookLoan
......@@ -79,37 +76,3 @@ class HomePage(TemplateView):
class DashboardView(TemplateView):
template_name = "dashboard/index.html"
login_history = LibrarianLoginHistory.objects.order_by("-date")[:10]
book_loans = BookLoan.objects.all()
total_book = Book.objects.count()
total_category = Category.objects.count()
total_member = Member.objects.count()
total_book_loans = book_loans.count()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
now = timezone.now()
overdue_loans = self.book_loans.filter(
due_date__lte=now, return_date=None
).order_by("-due_date")[:10]
due_date_treshold = now + timezone.timedelta(days=3)
upcoming_loans = (
self.book_loans.filter(due_date__lte=due_date_treshold, return_date=None)
.filter(due_date__gte=now)
.order_by("-due_date")[:10]
)
context["login_histories"] = self.login_history
context["total_book"] = self.total_book
context["total_category"] = self.total_category
context["total_member"] = self.total_member
context["total_book_loans"] = self.total_book_loans
context["total_overdue"] = overdue_loans.count()
context["total_upcoming"] = upcoming_loans.count()
context["overdue_loans"] = overdue_loans
context["upcoming_loans"] = upcoming_loans
return 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