2019-04-02 06:17:57 +00:00
|
|
|
from django.contrib import messages
|
2019-03-26 06:19:11 +00:00
|
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
|
|
from django.http import HttpResponse
|
2019-04-02 06:17:57 +00:00
|
|
|
from django.shortcuts import redirect, render, reverse
|
2019-03-26 06:19:11 +00:00
|
|
|
|
2019-04-02 06:17:57 +00:00
|
|
|
from todo.operations.csv_importer import CSVImporter
|
2019-03-26 06:19:11 +00:00
|
|
|
from todo.utils import staff_check
|
|
|
|
|
2019-04-02 06:17:57 +00:00
|
|
|
|
2019-03-26 06:19:11 +00:00
|
|
|
@login_required
|
|
|
|
@user_passes_test(staff_check)
|
|
|
|
def import_csv(request) -> HttpResponse:
|
|
|
|
"""Import a specifically formatted CSV into stored tasks.
|
|
|
|
"""
|
|
|
|
|
2019-04-02 06:48:54 +00:00
|
|
|
ctx = {"results": None}
|
2019-03-26 06:19:11 +00:00
|
|
|
|
|
|
|
if request.method == "POST":
|
2019-04-02 06:17:57 +00:00
|
|
|
filepath = request.FILES.get("csvfile")
|
|
|
|
|
|
|
|
if not filepath:
|
|
|
|
messages.error(request, "You must supply a CSV file to import.")
|
|
|
|
return redirect(reverse("todo:import_csv"))
|
|
|
|
|
2019-03-26 06:19:11 +00:00
|
|
|
importer = CSVImporter()
|
|
|
|
results = importer.upsert(filepath)
|
2019-04-02 06:41:04 +00:00
|
|
|
|
|
|
|
if results:
|
|
|
|
ctx["results"] = results
|
|
|
|
else:
|
|
|
|
messages.error(request, "Could not parse provided CSV file.")
|
|
|
|
return redirect(reverse("todo:import_csv"))
|
2019-03-26 06:19:11 +00:00
|
|
|
|
|
|
|
return render(request, "todo/import_csv.html", context=ctx)
|