Merge pull request #114 from danieldupriest/finalize_report_api
Finalize report api
This commit is contained in:
commit
5e8836f18c
4 changed files with 33 additions and 21 deletions
|
@ -1,4 +1,4 @@
|
||||||
EMAIL_HOST_USER=accountemail@youremail.com
|
EMAIL_HOST_USER=accountemail@yourmail.com
|
||||||
EMAIL_HOST_PASSWORD=yourpassword
|
EMAIL_HOST_PASSWORD=accountpasswordhere
|
||||||
SUBMIT_REPORT_DESTINATION_EMAIL=administratoremail@yourmail.com
|
SUBMIT_REPORT_DESTINATION_EMAIL=to-address@yourmail.com
|
||||||
SUBMIT_REPORT_FROM_EMAIL=from-address@yourmail.com
|
SUBMIT_REPORT_FROM_EMAIL=from-address@yourmail.com
|
|
@ -5,9 +5,10 @@ from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('report', views.report),
|
path('report', views.create_report),
|
||||||
path('reports', views.reports),
|
path('reports', views.reports),
|
||||||
path('report/<int:report_pk>', views.report_detail),
|
path('report/<int:report_pk>', views.report_detail),
|
||||||
|
path('report/<int:report_pk>/final', views.finalize_report),
|
||||||
path('report/<int:report_pk>/section/<int:section_pk>', views.section),
|
path('report/<int:report_pk>/section/<int:section_pk>', views.section),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,6 @@ from django.http import JsonResponse
|
||||||
from .models import *
|
from .models import *
|
||||||
from .policy import pol
|
from .policy import pol
|
||||||
import os
|
import os
|
||||||
from rest_framework.exceptions import ParseError
|
|
||||||
from rest_framework.parsers import FileUploadParser, MultiPartParser
|
|
||||||
from django.core.mail import EmailMultiAlternatives
|
from django.core.mail import EmailMultiAlternatives
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from decouple import config
|
from decouple import config
|
||||||
|
@ -99,7 +97,6 @@ def get_fields(s_id):
|
||||||
|
|
||||||
return field_set
|
return field_set
|
||||||
|
|
||||||
|
|
||||||
def generate_named_fields_for_section(fields):
|
def generate_named_fields_for_section(fields):
|
||||||
"""
|
"""
|
||||||
Prepares a dictionary of key-value pairs based on the raw fields
|
Prepares a dictionary of key-value pairs based on the raw fields
|
||||||
|
@ -115,7 +112,7 @@ def generate_named_fields_for_section(fields):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@api_view(['POST'])
|
@api_view(['POST'])
|
||||||
def report(request):
|
def create_report(request):
|
||||||
"""
|
"""
|
||||||
Generates a new empty report for the current user and returns it
|
Generates a new empty report for the current user and returns it
|
||||||
in json format. The title of the report should be provided as
|
in json format. The title of the report should be provided as
|
||||||
|
@ -205,17 +202,11 @@ def report_detail(request, report_pk):
|
||||||
return JsonResponse(data)
|
return JsonResponse(data)
|
||||||
|
|
||||||
# PUT: Submits a report to the administrator for review,
|
# PUT: Submits a report to the administrator for review,
|
||||||
# and marks it as "submitted", after which changes may
|
# but is still allowed to make further changes
|
||||||
# not be made.
|
|
||||||
elif request.method == 'PUT':
|
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()
|
|
||||||
# Send email
|
# Send email
|
||||||
send_report_to_admin(request, report_pk)
|
send_report_to_admin(request, report_pk, status="REVIEW")
|
||||||
return JsonResponse({"message": "Report submitted."})
|
return JsonResponse({"message": "Request for review is submitted."})
|
||||||
|
|
||||||
# DELETE: Deletes a report from the user's account.
|
# DELETE: Deletes a report from the user's account.
|
||||||
elif request.method == 'DELETE':
|
elif request.method == 'DELETE':
|
||||||
|
@ -237,6 +228,26 @@ def report_detail(request, report_pk):
|
||||||
r.delete()
|
r.delete()
|
||||||
return JsonResponse({"message": "Deleted report: {0}.".format(title)})
|
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, status="FINAL")
|
||||||
|
return JsonResponse({"message": "Final report submitted."})
|
||||||
|
|
||||||
|
|
||||||
def user_owns_section(user, section):
|
def user_owns_section(user, section):
|
||||||
"""
|
"""
|
||||||
Returns true if the specified user is owner of the section.
|
Returns true if the specified user is owner of the section.
|
||||||
|
@ -383,7 +394,7 @@ def section_complete(section_pk):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def send_report_to_admin(request, report_pk):
|
def send_report_to_admin(request, report_pk, status):
|
||||||
"""
|
"""
|
||||||
Sends an email message to admin with html/txt version of report,
|
Sends an email message to admin with html/txt version of report,
|
||||||
along with file attachments. Cc sent to user.
|
along with file attachments. Cc sent to user.
|
||||||
|
@ -400,7 +411,7 @@ def send_report_to_admin(request, report_pk):
|
||||||
message = None
|
message = None
|
||||||
if params['reference_number'] == '':
|
if params['reference_number'] == '':
|
||||||
message = EmailMultiAlternatives(
|
message = EmailMultiAlternatives(
|
||||||
"{}".format(params['title']),
|
"{} ({})".format(params['title'], status),
|
||||||
msg_plain,
|
msg_plain,
|
||||||
from_email,
|
from_email,
|
||||||
[to_email],
|
[to_email],
|
||||||
|
@ -408,7 +419,7 @@ def send_report_to_admin(request, report_pk):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
message = EmailMultiAlternatives(
|
message = EmailMultiAlternatives(
|
||||||
"[RT - Request Tracker #{}] {}".format(params['reference_number'], params['title']),
|
"[Reimbursinator #{}] {} ({})".format(params['reference_number'], params['title'], status),
|
||||||
msg_plain,
|
msg_plain,
|
||||||
from_email,
|
from_email,
|
||||||
[to_email],
|
[to_email],
|
||||||
|
|
BIN
back/db.sqlite3
BIN
back/db.sqlite3
Binary file not shown.
Loading…
Reference in a new issue