Spaces:
Runtime error
Runtime error
File size: 5,294 Bytes
6a171e0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
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
|