thejagstudio's picture
Upload 85 files
6a171e0 verified
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Game, Registration
from django.db.models import Q
import json
import pandas as pd # Import pandas for Excel file creation
from django.utils import timezone
@csrf_exempt
def get_games(request):
"""
API to fetch games based on gender, including common games.
"""
gender = request.GET.get('gender') # Get gender from query params
games = Game.objects.filter(Q(gender=gender) | Q(gender='common')).values('id', 'name')
return JsonResponse(list(games), safe=False)
@csrf_exempt
def register(request, game_name):
"""
API to handle registration using game name and gender from form data.
"""
if request.method == 'POST':
try:
# Parse JSON data from the request body
data = json.loads(request.body)
gender = data.get('gender') # Get gender from the request body
# Construct the full game name with gender suffix
full_game_name = f"{game_name}_{gender}"
# Fetch the game by full name
game = Game.objects.get(name=full_game_name)
# Create a new registration
registration = Registration.objects.create(
name=data.get('name'),
email=data.get('email'),
enrollment=data.get('enrollment'),
age=data.get('age'),
gender=gender,
department=data.get('department'),
semester=data.get('semester'),
game=game # Associate the registration with the selected game
)
# Return success response
return JsonResponse({
'status': 'success',
'message': 'Registration successful!',
'game': game.name,
'gender': game.get_gender_display()
}, status=201)
except Game.DoesNotExist:
return JsonResponse({
'status': 'error',
'message': f'Game "{full_game_name}" not found!'
}, status=404)
except Exception as e:
return JsonResponse({
'status': 'error',
'message': str(e)
}, status=400)
return JsonResponse({
'status': 'error',
'message': 'Invalid request method. Only POST is allowed.'
}, status=405)
@csrf_exempt
def get_filtered_registrations(request):
"""
API to fetch filtered registrations based on department, game, gender, and division.
"""
# Get filter parameters from the request
department = request.GET.get('department')
game_name = request.GET.get('game_name') # Changed from game_id to game_name
gender = request.GET.get('gender')
division = request.GET.get('division') # Add this field if needed
# Build the query using Q objects
query = Q()
if department:
query &= Q(department=department)
if game_name:
# Check for both male and female versions of the game
game_name_male = f"{game_name}_Male"
game_name_female = f"{game_name}_Female"
query &= Q(game__name__in=[game_name_male, game_name_female])
if gender:
query &= Q(gender=gender)
if division:
query &= Q(division=division) # Add this field if needed
# Fetch filtered registrations
registrations = Registration.objects.filter(query).values(
'name', 'email', 'enrollment', 'age', 'gender', 'department', 'semester', 'game__name', 'registration_date'
)
return JsonResponse(list(registrations), safe=False)
def download_excel(request):
"""
API to download filtered registrations as an Excel file.
"""
# Get filter parameters from the request
department = request.GET.get('department')
game_name = request.GET.get('game_name') # Filter by game name
gender = request.GET.get('gender')
# Build the query using Q objects
query = Q()
if department:
query &= Q(department=department)
if game_name: # Filter by game name
query &= Q(game__name__icontains=game_name) # case-insensitive match on game name
if gender:
query &= Q(gender=gender)
# Fetch filtered registrations
registrations = Registration.objects.filter(query).values(
'name', 'email', 'enrollment', 'age', 'gender', 'department', 'semester', 'game__name', 'registration_date'
)
# Convert queryset to DataFrame
df = pd.DataFrame(list(registrations))
# Remove the registration date column
df = df.drop(columns=['registration_date'])
# Replace game names (e.g., "football_Female" => "Football")
df['game__name'] = df['game__name'].str.replace('_', ' ').str.replace(r'(.*)(Male|Female)$', r'\1', regex=True).str.title()
# Create Excel file in memory
excel_file = HttpResponse(content_type='application/vnd.ms-excel')
excel_file['Content-Disposition'] = 'attachment; filename=registrations.xlsx'
df.to_excel(excel_file, index=False)
return excel_file