diff --git a/back/backend/urls.py b/back/backend/urls.py index 83f7279..ac68cb8 100644 --- a/back/backend/urls.py +++ b/back/backend/urls.py @@ -8,6 +8,7 @@ urlpatterns = [ path('report', views.report), path('reports', views.reports), path('report/', views.report_detail), + path('report//final', views.finalize_report), path('report//section/', views.section), ] diff --git a/back/backend/views.py b/back/backend/views.py index d31728f..6d28f4f 100644 --- a/back/backend/views.py +++ b/back/backend/views.py @@ -3,8 +3,6 @@ from django.http import JsonResponse from .models import * from .policy import pol import os -from rest_framework.exceptions import ParseError -from rest_framework.parsers import FileUploadParser, MultiPartParser from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string from decouple import config @@ -99,7 +97,6 @@ def get_fields(s_id): return field_set - def generate_named_fields_for_section(fields): """ Prepares a dictionary of key-value pairs based on the raw fields @@ -205,17 +202,17 @@ def report_detail(request, report_pk): return JsonResponse(data) # PUT: Submits a report to the administrator for review, - # and marks it as "submitted", after which changes may - # not be made. + # but is still allowed to make further changes elif request.method == 'PUT': - rep = Report.objects.get(id=report_pk) - if rep.submitted == True: - return JsonResponse({"message": "Cannot submit a report that has already been submitted."}, status=409) - rep.submitted = True; - rep.save() + # rep = Report.objects.get(id=report_pk) + # if rep.submitted: + # return JsonResponse({"message": "Cannot submit a report that has already been submitted."}, status=409) + # rep.submitted = True + # rep.save() + # Send email send_report_to_admin(request, report_pk) - return JsonResponse({"message": "Report submitted."}) + return JsonResponse({"message": "Report submitted for review."}) # DELETE: Deletes a report from the user's account. elif request.method == 'DELETE': @@ -237,6 +234,26 @@ def report_detail(request, report_pk): r.delete() return JsonResponse({"message": "Deleted report: {0}.".format(title)}) +@api_view(['PUT']) +def finalize_report(request, report_pk): + """ + This function serves as an API endpoint for submitting + the final report. + + :param request: incoming request packet + :param report_pk: report ID + :return: JSON response containing user message + """ + r = Report.objects.get(id=report_pk) + if r.submitted: + return JsonResponse({"message": "Cannot submit a report that has already been submitted."}, status=409) + r.submitted = True + r.save() + # Send email + send_report_to_admin(request, report_pk) + return JsonResponse({"message": "Final report submitted."}) + + def user_owns_section(user, section): """ Returns true if the specified user is owner of the section.