new update
This commit is contained in:
217
sheets/views.py
217
sheets/views.py
@@ -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)
|
Reference in New Issue
Block a user