mirror of
https://github.com/Lyxminxx/jast.git
synced 2026-10-11 12:51:51 +02:00
redesign, added user system, added api endpoints
This commit is contained in:
1 parent
2c76e1df78
commit
72b8e569aa
17 files changed
+782
-99
No files matched your search
+27
-23
@@ -1,30 +1,41 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.db.models import Sum
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from django.contrib.auth import login
|
||||
from .models import Transaction
|
||||
from .forms import TransactionForm
|
||||
from .forms import TransactionForm, CustomUserCreationForm
|
||||
import json
|
||||
from datetime import timedelta
|
||||
from django.utils import timezone
|
||||
from django.db.models import Sum
|
||||
|
||||
def register(request):
|
||||
if request.method == 'POST':
|
||||
form = CustomUserCreationForm(request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
login(request, user)
|
||||
return redirect('home')
|
||||
else:
|
||||
form = CustomUserCreationForm()
|
||||
|
||||
return render(request, 'registration/register.html', {'form': form})
|
||||
|
||||
@login_required
|
||||
def home(request):
|
||||
# 1. Handle form submission
|
||||
if request.method == 'POST':
|
||||
form = TransactionForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('home') # Refresh the page
|
||||
transaction = form.save(commit=False)
|
||||
transaction.user = request.user
|
||||
transaction.save()
|
||||
return redirect('home')
|
||||
else:
|
||||
form = TransactionForm()
|
||||
|
||||
# 2. Fetch data for the table
|
||||
transactions = Transaction.objects.all()
|
||||
|
||||
# Calculate total balance (returns 0 if database is empty)
|
||||
transactions = Transaction.objects.filter(user=request.user)
|
||||
total_balance = transactions.aggregate(Sum('amount'))['amount__sum'] or 0
|
||||
|
||||
# 3. Send data to the template
|
||||
context = {
|
||||
'form': form,
|
||||
'transactions': transactions,
|
||||
@@ -32,9 +43,9 @@ def home(request):
|
||||
}
|
||||
return render(request, 'home.html', context)
|
||||
|
||||
@login_required
|
||||
def edit_transaction(request, pk):
|
||||
transaction = get_object_or_404(Transaction, pk=pk)
|
||||
|
||||
transaction = get_object_or_404(Transaction, pk=pk, user=request.user)
|
||||
if request.method == 'POST':
|
||||
form = TransactionForm(request.POST, instance=transaction)
|
||||
if form.is_valid():
|
||||
@@ -42,24 +53,22 @@ def edit_transaction(request, pk):
|
||||
return redirect('home')
|
||||
else:
|
||||
form = TransactionForm(instance=transaction)
|
||||
|
||||
return render(request, 'edit.html', {'form': form, 'transaction': transaction})
|
||||
|
||||
@login_required
|
||||
def delete_transaction(request, pk):
|
||||
transaction = get_object_or_404(Transaction, pk=pk)
|
||||
transaction = get_object_or_404(Transaction, pk=pk, user=request.user)
|
||||
if request.method == 'POST':
|
||||
transaction.delete()
|
||||
return redirect('home')
|
||||
|
||||
@login_required
|
||||
def stats(request):
|
||||
# 1. Figure out what time period we are looking at
|
||||
time_filter = request.GET.get('filter', 'all')
|
||||
now = timezone.now().date()
|
||||
|
||||
# Start with only expenses (numbers less than 0)
|
||||
expenses = Transaction.objects.filter(amount__lt=0)
|
||||
expenses = Transaction.objects.filter(user=request.user, amount__lt=0)
|
||||
|
||||
# 2. Filter by date based on the button clicked
|
||||
if time_filter == 'week':
|
||||
expenses = expenses.filter(date__gte=now - timedelta(days=7))
|
||||
elif time_filter == 'month':
|
||||
@@ -67,18 +76,13 @@ def stats(request):
|
||||
elif time_filter == 'year':
|
||||
expenses = expenses.filter(date__gte=now - timedelta(days=365))
|
||||
|
||||
# 3. Group by category and sum the amounts
|
||||
category_data = expenses.values('category__name').annotate(total=Sum('amount'))
|
||||
|
||||
# 4. Format data for Chart.js
|
||||
labels = []
|
||||
data = []
|
||||
|
||||
for item in category_data:
|
||||
# If category is null, call it 'Uncategorized'
|
||||
cat_name = item['category__name'] or 'Uncategorized'
|
||||
labels.append(cat_name)
|
||||
# Make the number positive for the chart (so it draws correctly)
|
||||
data.append(abs(float(item['total'])))
|
||||
|
||||
context = {
|
||||
|
||||
Reference in new issue
Block a user