Compare commits

...

3 commits

3 changed files with 58 additions and 5 deletions

View file

@ -24,7 +24,8 @@ class DocumentRequestCreationSerializer(serializers.ModelSerializer):
documents = DocumentRequestUnitCreationSerializer(many=True, required=True)
college = serializers.CharField(max_length=64)
purpose = serializers.CharField(max_length=512)
type = serializers.ChoiceField(choices=DocumentRequest.TYPE_CHOICES, required=True)
type = serializers.ChoiceField(
choices=DocumentRequest.TYPE_CHOICES, required=True)
class Meta:
model = DocumentRequest
@ -58,8 +59,8 @@ class DocumentRequestUnitSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentRequestUnit
fields = ["document", "copies"]
read_only_fields = ["document", "copies"]
fields = ["id", "document", "copies"]
read_only_fields = ["id", "document", "copies"]
class DocumentRequestUnitWithFileSerializer(serializers.ModelSerializer):
@ -67,12 +68,15 @@ class DocumentRequestUnitWithFileSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentRequestUnit
fields = ["document", "copies"]
read_only_fields = ["document", "copies"]
fields = ["id", "document", "copies"]
read_only_fields = ["id", "document", "copies"]
class DocumentRequestSerializer(serializers.ModelSerializer):
documents = serializers.SerializerMethodField()
requester = serializers.SlugRelatedField(
many=False, slug_field="email", queryset=CustomUser.objects.all(), required=False
)
purpose = serializers.CharField(max_length=512)
date_requested = serializers.DateTimeField(
format="%m-%d-%Y %I:%M %p", read_only=True
@ -109,6 +113,40 @@ class DocumentRequestSerializer(serializers.ModelSerializer):
return serializer_class(obj.documents, many=True).data
class FullDocumentRequestSerializer(serializers.ModelSerializer):
documents = DocumentRequestUnitWithFileSerializer()
requester = serializers.SlugRelatedField(
many=False, slug_field="email", queryset=CustomUser.objects.all(), required=False
)
purpose = serializers.CharField(max_length=512)
date_requested = serializers.DateTimeField(
format="%m-%d-%Y %I:%M %p", read_only=True
)
class Meta:
model = DocumentRequest
fields = [
"id",
"requester",
"college",
"type",
"purpose",
"date_requested",
"documents",
"status",
]
read_only_fields = [
"id",
"requester",
"college",
"type",
"purpose",
"date_requested",
"documents",
"status",
]
class DocumentRequestUpdateSerializer(serializers.ModelSerializer):
status = serializers.ChoiceField(
choices=DocumentRequest.STATUS_CHOICES, required=True

View file

@ -3,10 +3,12 @@ from .views import (
DocumentRequestCreateView,
DocumentRequestListView,
DocumentRequestUpdateView,
DocumentRequestFullListView
)
urlpatterns = [
path("create/", DocumentRequestCreateView.as_view()),
path("list/", DocumentRequestListView.as_view()),
path("list/head/", DocumentRequestFullListView.as_view()),
path("update/<int:pk>/", DocumentRequestUpdateView.as_view()),
]

View file

@ -42,6 +42,19 @@ class DocumentRequestListView(generics.ListAPIView):
return queryset
class DocumentRequestFullListView(generics.ListAPIView):
"""
Returns document requests. Always returns the link to download the document.
Head is able to view all document requests here. Staff and clients have no access
"""
http_method_names = ["get"]
serializer_class = DocumentRequestSerializer
pagination_class = PageNumberPagination
permission_classes = [IsAuthenticated, IsHead]
queryset = DocumentRequest.objects.all()
class DocumentRequestUpdateView(generics.UpdateAPIView):
"""
Used by head approve or deny document requests.