イベントにpublicや対応クラスなどを追加
This commit is contained in:
@ -289,13 +289,21 @@ class NewEvent2(models.Model):
|
||||
end_datetime = models.DateTimeField()
|
||||
deadlineDateTime = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
#// Added @2024-10-21
|
||||
public = models.BooleanField(default=False)
|
||||
hour_3 = models.BooleanField(default=False)
|
||||
hour_5 = models.BooleanField(default=True)
|
||||
class_general = models.BooleanField(default=True)
|
||||
class_family = models.BooleanField(default=True)
|
||||
class_solo_male = models.BooleanField(default=True)
|
||||
class_solo_female = models.BooleanField(default=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.event_name} - From:{self.start_datetime} To:{self.end_datetime}"
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.deadlineDateTime:
|
||||
self.deadlineDateTime = self.end_datetime - timedelta(days=7)
|
||||
self.deadlineDateTime = self.end_datetime #- timedelta(days=7)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class NewEvent(models.Model):
|
||||
@ -386,22 +394,24 @@ class Entry(models.Model):
|
||||
owner = models.ForeignKey(CustomUser, on_delete=models.CASCADE,blank=True, null=True) # Akira 2024-7-24
|
||||
zekken_number = models.IntegerField(default=0)
|
||||
is_active = models.BooleanField(default=True) # 新しく追加
|
||||
hasParticipated = models.BooleanField(default=False) # 新しく追加
|
||||
hasGoaled = models.BooleanField(default=False) # 新しく追加
|
||||
|
||||
|
||||
class Meta:
|
||||
unique_together = ('zekken_number', 'event', 'date')
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.team.zekken_number} - {self.team_name} - {self.event.event_name} - {self.date}"
|
||||
return f"{self.zekken_number} - {self.team.team_name} - {self.event.event_name} - {self.date}"
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.event and self.category and self.date:
|
||||
start = self.event.start_datetime
|
||||
end = self.event.end_datetime - self.category.duration
|
||||
if not (start <= self.date <= end):
|
||||
end = self.event.end_datetime #- self.category.duration
|
||||
if not (start.date() <= self.date.date() <= end.date()):
|
||||
raise ValidationError({
|
||||
'date': f'日時は{start}から{end}の間である必要があります。'
|
||||
'date': f'日時{self.date}は{start.date()}から{end.date()}の間である必要があります。'
|
||||
})
|
||||
|
||||
# メンバーの年齢と性別をチェック
|
||||
|
||||
@ -344,7 +344,7 @@ class NewCategorySerializer(serializers.ModelSerializer):
|
||||
class NewEvent2Serializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = NewEvent2
|
||||
fields = ['id','event_name', 'start_datetime', 'end_datetime']
|
||||
fields = ['id','event_name', 'start_datetime', 'end_datetime', 'deadlineDateTime', 'public', 'hour_3', 'hour_5', 'class_general','class_family','class_solo_male','class_solo_female']
|
||||
|
||||
class NewEventSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
@ -448,7 +448,7 @@ class EntrySerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Entry
|
||||
fields = ['id','team', 'event', 'category', 'date','zekken_number','owner']
|
||||
fields = ['id','team', 'event', 'category', 'date','zekken_number','owner','is_active', 'hasParticipated', 'hasGoaled']
|
||||
read_only_fields = ['id','owner']
|
||||
|
||||
def validate_date(self, value):
|
||||
@ -494,18 +494,24 @@ class EntrySerializer(serializers.ModelSerializer):
|
||||
elif isinstance(entry_date, str):
|
||||
entry_date = datetime.strptime(entry_date, "%Y-%m-%d").date()
|
||||
|
||||
logger.debug(f"==== entry_date : {entry_date} ====")
|
||||
logger.debug("test-0")
|
||||
logger.debug(f"==== start:{event.start_datetime.date()} <= entry_date : {entry_date} <= end:{event.end_datetime.date()} ?? ====")
|
||||
|
||||
if entry_date < event.start_datetime.date() or entry_date > event.end_datetime.date():
|
||||
raise serializers.ValidationError(f"日付は{event.start_datetime.date()}から{event.end_datetime.date()}の間である必要があります。")
|
||||
|
||||
logger.debug("test-1")
|
||||
|
||||
owner = self.context['request'].user
|
||||
zekken_number = data.get('zekken_number')
|
||||
try:
|
||||
logger.debug(f"Parsed data: team={team}, event={event}, category={category}, ")
|
||||
|
||||
logger.debug(f"Parsed data: team={team}, event={event}, category={category}, "
|
||||
f"entry_date={entry_date}, owner={owner}, zekken_number={zekken_number}")
|
||||
owner = self.context['request'].user
|
||||
zekken_number = data.get('zekken_number')
|
||||
|
||||
logger.debug(f"entry_date={entry_date}, owner={owner}, zekken_number={zekken_number}")
|
||||
|
||||
except Exception:
|
||||
raise serializers.ValidationError(f"何らかのエラーが発生しました")
|
||||
|
||||
# Check if team, event, and category exist
|
||||
if not Team.objects.filter(id=team.id).exists():
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
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
|
||||
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 django.urls import path, include
|
||||
from knox import views as knox_views
|
||||
|
||||
@ -108,4 +108,6 @@ urlpatterns += [
|
||||
#path('admin/newevent2/csv-upload/', NewEvent2Admin.as_view({'get': 'csv_upload_view', 'post': 'csv_upload_view'}), name='rog_newevent2_csv-upload'),
|
||||
#path('admin/', admin.site.urls),
|
||||
|
||||
path('entries/<int:entry_id>/update-status/', update_entry_status, name='update-entry-status'),
|
||||
|
||||
]
|
||||
|
||||
31
rog/views.py
31
rog/views.py
@ -87,6 +87,31 @@ from django.core.exceptions import ValidationError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@api_view(['PATCH'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def update_entry_status(request, entry_id):
|
||||
try:
|
||||
entry = Entry.objects.get(id=entry_id)
|
||||
except Entry.DoesNotExist:
|
||||
return Response({"error": "Entry not found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# エントリーの所有者またはチームのメンバーのみが更新可能
|
||||
if entry.owner != request.user and not entry.team.members.filter(user=request.user).exists():
|
||||
return Response({"error": "You don't have permission to update this entry"}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
hasParticipated = request.data.get('hasParticipated')
|
||||
hasGoaled = request.data.get('hasGoaled')
|
||||
|
||||
if hasParticipated is not None:
|
||||
entry.hasParticipated = hasParticipated
|
||||
if hasGoaled is not None:
|
||||
entry.hasGoaled = hasGoaled
|
||||
|
||||
entry.save()
|
||||
serializer = EntrySerializer(entry)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
def process_csv_upload(csv_file, event):
|
||||
decoded_file = csv_file.read().decode('utf-8')
|
||||
io_string = io.StringIO(decoded_file)
|
||||
@ -109,7 +134,7 @@ class CSVUploadForm(forms.Form):
|
||||
csv_file = forms.FileField()
|
||||
|
||||
class NewEvent2Admin(admin.ModelAdmin):
|
||||
list_display = ['event_name', 'start_datetime', 'end_datetime']
|
||||
list_display = ['event_name', 'start_datetime', 'end_datetime', 'deadlineDateTime','public']
|
||||
|
||||
def get_urls(self):
|
||||
urls = super().get_urls()
|
||||
@ -1219,9 +1244,9 @@ class TeamViewSet(viewsets.ModelViewSet):
|
||||
api_url = f"{settings.FRONTEND_URL}/gifuroge/update_team_name"
|
||||
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
||||
data = {
|
||||
"zekken_number": zekken_number,
|
||||
#"zekken_number": zekken_number,
|
||||
"new_team_name": team_name,
|
||||
"event_code": event_code,
|
||||
#"event_code": event_code,
|
||||
}
|
||||
try:
|
||||
response = requests.post(api_url, headers=headers, data=data)
|
||||
|
||||
Reference in New Issue
Block a user