new update

This commit is contained in:
2025-08-28 12:22:27 +02:00
parent 16fd76ff5a
commit 70e055d20b
12 changed files with 970 additions and 591 deletions

View File

@@ -1,20 +1,51 @@
from django.shortcuts import render
from django.http import JsonResponse
from django.db.models import Q
from decimal import Decimal, InvalidOperation
from django.apps import apps
from datetime import date
from .models import Client
from datetime import date, datetime
from django.utils import timezone
from .models import Client, SecondTableEntry
from django.db.models import Sum
# Clients Page (Main)
def clients_list(request):
clients = Client.objects.all().order_by('id')
return render(request, 'clients_table.html', {'clients': clients})
# Annual summary data
current_year = int(request.GET.get('year', datetime.now().year))
clients = Client.objects.all()
monthly_data = []
for client in clients:
monthly_totals = []
for month in range(1, 13):
total = SecondTableEntry.objects.filter(
client=client,
date__year=current_year,
date__month=month
).aggregate(total=Sum('lhe_output'))['total'] or 0
monthly_totals.append(total)
monthly_data.append({
'client': client,
'monthly_totals': monthly_totals,
'year_total': sum(monthly_totals)
})
available_years = SecondTableEntry.objects.dates('date', 'year').distinct()
return render(request, 'clients_table.html', {
'monthly_data': monthly_data,
'current_year': current_year,
'available_years': [y.year for y in available_years],
'months': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
})
# Table One View (ExcelEntry)
def table_one_view(request):
ExcelEntry = apps.get_model('sheets', 'ExcelEntry')
entries_table1 = ExcelEntry.objects.all()
entries_table1 = ExcelEntry.objects.all().select_related('client')
clients = Client.objects.all()
return render(request, 'table_one.html', {
'entries_table1': entries_table1,
@@ -24,13 +55,23 @@ def table_one_view(request):
# Table Two View (SecondTableEntry)
def table_two_view(request):
SecondTableEntry = apps.get_model('sheets', 'SecondTableEntry')
entries_table2 = SecondTableEntry.objects.all()
clients = Client.objects.all()
return render(request, 'table_two.html', {
'entries_table2': entries_table2,
'clients': clients,
})
try:
SecondTableEntry = apps.get_model('sheets', 'SecondTableEntry')
entries = SecondTableEntry.objects.all().order_by('-date')
clients = Client.objects.all()
return render(request, 'table_two.html', {
'entries_table2': entries,
'clients': clients,
})
except Exception as e:
return render(request, 'table_two.html', {
'error_message': f"Failed to load data: {str(e)}",
'entries_table2': [],
'clients': Client.objects.all()
})
# Add Entry (Generic)
@@ -38,43 +79,75 @@ def add_entry(request, model_name):
if request.method == 'POST':
try:
model = apps.get_model('sheets', model_name)
common_data = {
'client': Client.objects.get(id=request.POST.get('client_id')),
'date': request.POST.get('date'),
'notes': request.POST.get('notes', '')
}
if model_name == 'SecondTableEntry':
# Handle Helium Output (Table Two)
lhe_output = request.POST.get('lhe_output')
entry = model.objects.create(
**common_data,
is_warm=request.POST.get('is_warm') == 'true',
lhe_delivery=request.POST.get('lhe_delivery', ''),
lhe_output=Decimal(lhe_output) if lhe_output else None
)
if model_name.lower() == 'client':
name = request.POST.get('name', 'New Name')
address = request.POST.get('address', '')
entry = model.objects.create(name=name, address=address)
return JsonResponse({
'status': 'success',
'id': entry.id,
'name': entry.name,
'address': entry.address,
'client_name': entry.client.name,
'date': entry.date.strftime('%Y-%m-%d') if entry.date else '',
'is_warm': entry.is_warm,
'lhe_delivery': entry.lhe_delivery,
'lhe_output': str(entry.lhe_output) if entry.lhe_output else '',
'notes': entry.notes
})
client_id = request.POST.get('client_id')
client = Client.objects.get(id=client_id)
age = int(request.POST.get('age', 0))
email = request.POST.get('email', 'example@email.com')
elif model_name == 'ExcelEntry':
# Parse the date string into a date object
date_str = request.POST.get('date')
try:
date_obj = datetime.strptime(date_str, '%Y-%m-%d').date() if date_str else None
except (ValueError, TypeError):
date_obj = None
# Create the entry
entry = model.objects.create(
client=Client.objects.get(id=request.POST.get('client_id')),
date=date_obj,
pressure=Decimal(request.POST.get('pressure', 0)),
purity=Decimal(request.POST.get('purity', 0)),
notes=request.POST.get('notes', '')
)
entry = model.objects.create(
client=client,
age=age,
email=email,
date_joined=date.today()
)
# Prepare the response
response_data = {
'status': 'success',
'id': entry.id,
'client_name': entry.client.name,
'pressure': str(entry.pressure),
'purity': str(entry.purity),
'notes': entry.notes
}
# Only add date if it exists
if entry.date:
response_data['date'] = entry.date.strftime('%Y-%m-%d')
else:
response_data['date'] = None
return JsonResponse(response_data)
return JsonResponse({
'id': entry.id,
'client_name': client.name,
'age': entry.age,
'email': entry.email,
'date_joined': entry.date_joined.strftime('%Y-%m-%d'),
})
# Keep your existing SecondTableEntry code here...
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
# Update Entry (Generic)
def update_entry(request, model_name):
if request.method == 'POST':
@@ -83,44 +156,60 @@ def update_entry(request, model_name):
entry_id = int(request.POST.get('id'))
entry = model.objects.get(id=entry_id)
if model_name.lower() == 'client':
entry.name = request.POST.get('name')
entry.address = request.POST.get('address', '')
# Common updates for both models
entry.client = Client.objects.get(id=request.POST.get('client_id'))
entry.date = request.POST.get('date')
entry.notes = request.POST.get('notes', '')
if model_name == 'SecondTableEntry':
# Handle Helium Output (Table Two)
lhe_output = request.POST.get('lhe_output')
entry.is_warm = request.POST.get('is_warm') == 'true'
entry.lhe_delivery = request.POST.get('lhe_delivery', '')
entry.lhe_output = Decimal(lhe_output) if lhe_output else None
entry.save()
return JsonResponse({
'status': 'success',
'id': entry.id,
'name': entry.name,
'address': entry.address,
'client_name': entry.client.name,
'date': entry.date.strftime('%Y-%m-%d') if entry.date else '',
'is_warm': entry.is_warm,
'lhe_delivery': entry.lhe_delivery,
'lhe_output': str(entry.lhe_output) if entry.lhe_output else '',
'notes': entry.notes
})
client_id = request.POST.get('client_id')
client = Client.objects.get(id=client_id)
age = int(request.POST.get('age'))
email = request.POST.get('email')
elif model_name == 'ExcelEntry':
# Handle Helium Input (Table One)
date_str = request.POST.get('date')
try:
date_obj = datetime.strptime(date_str, '%Y-%m-%d').date() if date_str else None
except (ValueError, TypeError):
date_obj = None
entry.client = client
entry.age = age
entry.email = email
entry.save()
return JsonResponse({
'status': 'success',
'id': entry.id,
'name': client.name,
'age': entry.age,
'email': entry.email,
'date_joined': entry.date_joined.strftime('%Y-%m-%d'),
})
entry.client = Client.objects.get(id=request.POST.get('client_id'))
entry.date = date_obj
entry.pressure = Decimal(request.POST.get('pressure', 0))
entry.purity = Decimal(request.POST.get('purity', 0))
entry.notes = request.POST.get('notes', '')
entry.save()
return JsonResponse({
'status': 'success',
'id': entry.id,
'client_name': entry.client.name,
'pressure': str(entry.pressure),
'purity': str(entry.purity),
'date': entry.date.strftime('%Y-%m-%d') if entry.date else '',
'notes': entry.notes
})
except model.DoesNotExist:
return JsonResponse({'status': 'error', 'message': 'Entry not found'}, status=404)
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
# Delete Entry (Generic)
def delete_entry(request, model_name):
if request.method == 'POST':
@@ -136,4 +225,4 @@ def delete_entry(request, model_name):
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)