Update web/core/views.py

This commit is contained in:
Joshua Laymon 2025-08-22 00:44:18 +00:00
parent 3c282d86ec
commit 3a931926cf

View File

@ -427,59 +427,59 @@ def export_csv(request):
return response
@login_required
def stats_page(request):
total = Entry.objects.count()
today = date.today()
last30 = Entry.objects.filter(date_added__gte=today - timedelta(days=30)).count()
last365 = Entry.objects.filter(date_added__gte=today - timedelta(days=365)).count()
from collections import Counter
months = []
y = today.year
m = today.month
for i in range(12):
mm = m - i
yy = y
while mm <= 0:
mm += 12
yy -= 1
from datetime import date as _d
start = _d(yy, mm, 1)
end = _d(yy + 1, 1, 1) if mm == 12 else _d(yy, mm + 1, 1)
label = f"{yy}-{mm:02d}"
months.append((label, start, end))
months = list(reversed(months))
series = [
(label, Entry.objects.filter(date_added__gte=start, date_added__lt=end).count())
for label, start, end in months
]
peak = max((v for _, v in series), default=1)
heights = [
(label, value, 8 + int((value / peak) * 100) if peak else 8)
for label, value in series
]
counts = Counter()
for subj in Entry.objects.exclude(subject="").values_list("subject", flat=True):
for tag in [t.strip() for t in subj.split(",") if t.strip()]:
counts[tag.lower()] += 1
top_subjects = [{"name": n.title(), "count": c} for n, c in counts.most_common(20)]
return render(
request,
"stats.html",
{
"total": total,
"last30": last30,
"last365": last365,
"series": series,
"heights": heights,
"top_subjects": top_subjects,
},
)
#@login_required
#def stats_page(request):
# total = Entry.objects.count()
# today = date.today()
# last30 = Entry.objects.filter(date_added__gte=today - timedelta(days=30)).count()
# last365 = Entry.objects.filter(date_added__gte=today - timedelta(days=365)).count()
#
# from collections import Counter
#
# months = []
# y = today.year
# m = today.month
# for i in range(12):
# mm = m - i
# yy = y
# while mm <= 0:
# mm += 12
# yy -= 1
# from datetime import date as _d
# start = _d(yy, mm, 1)
# end = _d(yy + 1, 1, 1) if mm == 12 else _d(yy, mm + 1, 1)
# label = f"{yy}-{mm:02d}"
# months.append((label, start, end))
# months = list(reversed(months))
#
# series = [
# (label, Entry.objects.filter(date_added__gte=start, date_added__lt=end).count())
# for label, start, end in months
# ]
# peak = max((v for _, v in series), default=1)
# heights = [
# (label, value, 8 + int((value / peak) * 100) if peak else 8)
# for label, value in series
# ]
#
# counts = Counter()
# for subj in Entry.objects.exclude(subject="").values_list("subject", flat=True):
# for tag in [t.strip() for t in subj.split(",") if t.strip()]:
# counts[tag.lower()] += 1
# top_subjects = [{"name": n.title(), "count": c} for n, c in counts.most_common(20)]
#
# return render(
# request,
# "stats.html",
# {
# "total": total,
# "last30": last30,
# "last365": last365,
# "series": series,
# "heights": heights,
# "top_subjects": top_subjects,
# },
# )
# ========= Scripture Normalizer =========