feat: add user timezone field to appointment request and update related serializers and views
This commit is contained in:
parent
dbde93f444
commit
5f4ab934cb
@ -54,9 +54,9 @@ class AdminWeeklyAvailabilityAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(AppointmentRequest)
|
@admin.register(AppointmentRequest)
|
||||||
class AppointmentRequestAdmin(admin.ModelAdmin):
|
class AppointmentRequestAdmin(admin.ModelAdmin):
|
||||||
list_display = ['id','full_name', 'email', 'status', 'formatted_created_at', 'formatted_scheduled_datetime']
|
list_display = ['id','full_name', 'email', 'status', 'formatted_created_at', 'formatted_scheduled_datetime', 'user_timezone']
|
||||||
list_filter = ['status', 'created_at', 'scheduled_datetime']
|
list_filter = ['status', 'created_at', 'scheduled_datetime', 'user_timezone']
|
||||||
search_fields = ['first_name', 'last_name', 'email']
|
search_fields = ['first_name', 'last_name', 'email', 'phone', 'reason']
|
||||||
readonly_fields = ['id', 'created_at', 'updated_at', 'formatted_created_at', 'formatted_scheduled_datetime']
|
readonly_fields = ['id', 'created_at', 'updated_at', 'formatted_created_at', 'formatted_scheduled_datetime']
|
||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
|
|||||||
@ -334,7 +334,7 @@ class AppointmentRequestCreateSerializer(serializers.ModelSerializer):
|
|||||||
appointment.save(update_fields=['user_timezone'])
|
appointment.save(update_fields=['user_timezone'])
|
||||||
|
|
||||||
return appointment
|
return appointment
|
||||||
|
|
||||||
class AppointmentScheduleSerializer(serializers.Serializer):
|
class AppointmentScheduleSerializer(serializers.Serializer):
|
||||||
scheduled_datetime = serializers.DateTimeField()
|
scheduled_datetime = serializers.DateTimeField()
|
||||||
scheduled_duration = serializers.IntegerField(default=60, min_value=30, max_value=240)
|
scheduled_duration = serializers.IntegerField(default=60, min_value=30, max_value=240)
|
||||||
@ -342,6 +342,7 @@ class AppointmentScheduleSerializer(serializers.Serializer):
|
|||||||
time_slot = serializers.CharField(required=False, write_only=True)
|
time_slot = serializers.CharField(required=False, write_only=True)
|
||||||
create_jitsi_meeting = serializers.BooleanField(default=True)
|
create_jitsi_meeting = serializers.BooleanField(default=True)
|
||||||
jitsi_custom_config = serializers.JSONField(required=False, default=dict)
|
jitsi_custom_config = serializers.JSONField(required=False, default=dict)
|
||||||
|
timezone = serializers.CharField(required=False, default='UTC')
|
||||||
|
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
scheduled_datetime = data.get('scheduled_datetime')
|
scheduled_datetime = data.get('scheduled_datetime')
|
||||||
@ -428,7 +429,6 @@ class AppointmentScheduleSerializer(serializers.Serializer):
|
|||||||
'scheduled_datetime': instance.scheduled_datetime,
|
'scheduled_datetime': instance.scheduled_datetime,
|
||||||
'scheduled_duration': instance.scheduled_duration,
|
'scheduled_duration': instance.scheduled_duration,
|
||||||
'jitsi_meeting_created': instance.jitsi_meeting_created,
|
'jitsi_meeting_created': instance.jitsi_meeting_created,
|
||||||
'user_timezone': instance.user_timezone,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if instance.has_jitsi_meeting:
|
if instance.has_jitsi_meeting:
|
||||||
|
|||||||
@ -76,7 +76,6 @@ class AppointmentRequestCreateView(generics.CreateAPIView):
|
|||||||
EmailService.send_admin_notification(appointment, availability_mismatch=True)
|
EmailService.send_admin_notification(appointment, availability_mismatch=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AppointmentRequestDetailView(generics.RetrieveAPIView):
|
class AppointmentRequestDetailView(generics.RetrieveAPIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
queryset = AppointmentRequest.objects.all()
|
queryset = AppointmentRequest.objects.all()
|
||||||
@ -104,6 +103,9 @@ class ScheduleAppointmentView(generics.GenericAPIView):
|
|||||||
|
|
||||||
create_jitsi_meeting = serializer.validated_data.get('create_jitsi_meeting', True)
|
create_jitsi_meeting = serializer.validated_data.get('create_jitsi_meeting', True)
|
||||||
jitsi_custom_config = serializer.validated_data.get('jitsi_custom_config', {})
|
jitsi_custom_config = serializer.validated_data.get('jitsi_custom_config', {})
|
||||||
|
user_timezone = serializer.validated_data.get('timezone', 'UTC')
|
||||||
|
|
||||||
|
appointment.user_timezone = user_timezone
|
||||||
|
|
||||||
admin_user = request.user
|
admin_user = request.user
|
||||||
|
|
||||||
@ -151,7 +153,7 @@ class ScheduleAppointmentView(generics.GenericAPIView):
|
|||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
class RejectAppointmentView(generics.GenericAPIView):
|
class RejectAppointmentView(generics.GenericAPIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
serializer_class = AppointmentRejectSerializer
|
serializer_class = AppointmentRejectSerializer
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user