initialize supervisor...still has bugs

This commit is contained in:
hayano
2024-10-28 02:20:28 +00:00
parent 051916f9f6
commit 2913a435c1
10 changed files with 842 additions and 16 deletions

View File

@ -1,7 +1,8 @@
from sys import prefix
from rest_framework import urlpatterns
from rest_framework.routers import DefaultRouter
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView,ResendInvitationEmailView,update_user_info,update_user_detail,ActivateMemberView, ActivateNewMemberView, PasswordResetRequestView, PasswordResetConfirmView, NewCategoryViewSet,LocationInBound2,UserLastGoalTimeView,TeamEntriesView,update_entry_status
from .views import LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView,ResendInvitationEmailView,update_user_info,update_user_detail,ActivateMemberView, ActivateNewMemberView, PasswordResetRequestView, PasswordResetConfirmView, NewCategoryViewSet,LocationInBound2,UserLastGoalTimeView,TeamEntriesView,update_entry_status,get_events,get_zekken_numbers,get_team_info,get_checkins,update_checkins,export_excel
from django.urls import path, include
from knox import views as knox_views
@ -110,4 +111,13 @@ urlpatterns += [
path('entries/<int:entry_id>/update-status/', update_entry_status, name='update-entry-status'),
# for Supervisor Web app
path('api/events/', get_events, name='get_events'),
path('api/zekken_numbers/<str:event_code>/', get_zekken_numbers, name='get_zekken_numbers'),
path('api/team_info/<int:zekken_number>/', get_team_info, name='get_team_info'),
path('api/checkins/<int:zekken_number>/', get_checkins, name='get_checkins'),
path('api/update_checkins/', update_checkins, name='update_checkins'),
path('api/export_excel/<int:zekken_number>/', export_excel, name='export_excel'),
# for Supervisor Web app
]

View File

@ -85,6 +85,9 @@ from django.conf import settings
from django.db import transaction
from django.core.exceptions import ValidationError
import xlsxwriter
from io import BytesIO
logger = logging.getLogger(__name__)
@api_view(['PATCH'])
@ -2309,3 +2312,110 @@ class UserLastGoalTimeView(APIView):
'message': 'User not found'
}, status=status.HTTP_404_NOT_FOUND)
# ----- for Supervisor -----
@api_view(['GET'])
def get_events(request):
events = NewEvent2.objects.filter(public=True)
return Response([{
'code': event.event_name,
'name': event.event_name
} for event in events])
@api_view(['GET'])
def get_zekken_numbers(request, event_code):
entries = Entry.objects.filter(
event__event_name=event_code,
is_active=True
).order_by('zekken_number')
return Response([entry.zekken_number for entry in entries])
@api_view(['GET'])
def get_team_info(request, zekken_number):
entry = Entry.objects.select_related('team').get(zekken_number=zekken_number)
members = Member.objects.filter(team=entry.team)
return Response({
'team_name': entry.team.team_name,
'members': ', '.join([f"{m.lastname} {m.firstname}" for m in members]),
'start_time': entry.start_time.strftime('%Y-%m-%d %H:%M:%S') if entry.start_time else None,
'goal_time': entry.goal_time.strftime('%Y-%m-%d %H:%M:%S') if entry.goal_time else None,
'late_points': entry.late_point or 0
})
@api_view(['GET'])
def get_checkins(request, zekken_number):
checkins = GpsCheckin.objects.filter(
zekken_number=zekken_number
).order_by('path_order')
return Response([{
'id': c.id,
'path_order': c.path_order,
'cp_number': c.cp_number,
'create_at': c.create_at,
'validate_location': c.validate_location,
'points': c.points,
'buy_flag': c.buy_flag
} for c in checkins])
@api_view(['POST'])
def update_checkins(request):
with transaction.atomic():
for update in request.data:
checkin = GpsCheckin.objects.get(id=update['id'])
checkin.path_order = update['path_order']
checkin.validate_location = update['validate_location']
checkin.save()
return Response({'status': 'success'})
@api_view(['GET'])
def export_excel(request, zekken_number):
# エントリー情報の取得
entry = Entry.objects.select_related('team').get(zekken_number=zekken_number)
checkins = GpsCheckin.objects.filter(zekken_number=zekken_number).order_by('path_order')
# Excelファイルの生成
output = BytesIO()
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet('通過証明書')
# スタイルの定義
header_format = workbook.add_format({
'bold': True,
'bg_color': '#CCCCCC',
'border': 1
})
# ヘッダー情報の書き込み
worksheet.write('A1', 'チーム名', header_format)
worksheet.write('B1', entry.team.team_name)
worksheet.write('A2', 'ゼッケン番号', header_format)
worksheet.write('B2', zekken_number)
# チェックインデータの書き込み
headers = ['順序', 'CP番号', 'チェックイン時刻', '検証', 'ポイント']
for col, header in enumerate(headers):
worksheet.write(3, col, header, header_format)
for row, checkin in enumerate(checkins, start=4):
worksheet.write(row, 0, checkin.path_order)
worksheet.write(row, 1, checkin.cp_number)
worksheet.write(row, 2, checkin.create_at.strftime('%Y-%m-%d %H:%M:%S'))
worksheet.write(row, 3, '' if checkin.validate_location else '')
worksheet.write(row, 4, checkin.points)
workbook.close()
# レスポンスの生成
output.seek(0)
response = HttpResponse(
output.read(),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = f'attachment; filename=通過証明書_{zekken_number}.xlsx'
return response
# ----- for Supervisor -----