autoilux/main/views.py

70 lines
2.3 KiB
Python

from calendar import monthrange
from datetime import date, timedelta
from django.db.models import Avg, Max, Min, Sum
from django.http import HttpResponse
from django.shortcuts import render
from django.urls import reverse_lazy
from django.utils import timezone
from django.views.generic import CreateView, ListView
from .forms import FuelPurchaseForm
from .models import FuelPurchase
class FuelPurchaseMonthlyListView(ListView):
model = FuelPurchase
template_name = "fuelpurchase_list.html"
context_object_name = "purchases"
def get_queryset(self):
year = int(self.kwargs.get("year", timezone.now().year))
month = int(self.kwargs.get("month", timezone.now().month))
self.current_year = year
self.current_month = month
start_date = date(year, month, 1)
end_date = date(year, month, monthrange(year, month)[1])
return FuelPurchase.objects.filter(
purchase_date__range=(start_date, end_date)
).order_by("-purchase_date")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
qs = self.object_list
summary = qs.aggregate(
total_cost_sum=Sum("total_cost"),
total_litres_sum=Sum("amount_litres"),
avg_price=Avg("price_per_litre"),
min_price=Min("price_per_litre"),
max_price=Max("price_per_litre"),
)
context["summary"] = summary
context["current_year"] = self.current_year
context["current_month"] = self.current_month
# Kuukausinavigointi
current_date = date(self.current_year, self.current_month, 1)
prev_month = current_date - timedelta(days=1)
next_month = (current_date.replace(day=28) + timedelta(days=4)).replace(day=1)
context["prev_year"] = prev_month.year
context["prev_month"] = prev_month.month
context["next_year"] = next_month.year
context["next_month"] = next_month.month
# Kaikki kuukaudet alasvetovalikkoon
all_dates = FuelPurchase.objects.dates("purchase_date", "month", order="DESC")
context["available_months"] = all_dates
return context
class FuelPurchaseCreateView(CreateView):
model = FuelPurchase
form_class = FuelPurchaseForm
template_name = "main/fuelpurchase_add.html"
success_url = "/"