diff --git a/stripe_checkout/stripe_checkout/management_views.py b/stripe_checkout/stripe_checkout/management_views.py index c5abfc9e9f08e0d8e84af5896259951c8a7ea823..5d68fcbc4f48f02a2ea71ada5dfac62c11f355e4 100644 --- a/stripe_checkout/stripe_checkout/management_views.py +++ b/stripe_checkout/stripe_checkout/management_views.py @@ -2,7 +2,7 @@ from typing import Sequence from django.shortcuts import redirect, render from django.contrib.auth.decorators import login_required -from stripe_checkout.stripe_checkout.models import ItemKind, PricedItem +from stripe_checkout.stripe_checkout.models import ItemKind, Order, PricedItem from . import visit from django.views.decorators.http import require_GET, require_POST @@ -47,12 +47,13 @@ def update_visitor(request, visitor_id): data = request.POST all_answers = {} for extra in all_extras: - question = extra.visit_checkout_question_id - answer = extra.visit_checkout_answer_id - all_answers.setdefault(question, set()) - if data.get(f"{question}:{answer}"): - all_answers[question].add(answer) - + for question, answer in [ + (extra.visit_checkout_question_id, extra.visit_checkout_answer_id), + (extra.visit_paid_question_id, extra.visit_paid_answer_id), + ]: + all_answers.setdefault(question, set()) + if data.get(f"{question}:{answer}"): + all_answers[question].add(answer) for question, answers in all_answers.items(): visitor.set_answers(question, answers) if registration_type := data.get("registration_type"): @@ -60,3 +61,10 @@ def update_visitor(request, visitor_id): visitor.paid = data.get("paid") api.update_visitor(visitor) return redirect("stripe_checkout:list-visitors") + + +@login_required +@require_POST +def delete_orders(request, visitor_id): + Order.objects.filter(visitor_id=visitor_id).delete() + return redirect("stripe_checkout:list-visitors") diff --git a/stripe_checkout/stripe_checkout/templates/visitors.html b/stripe_checkout/stripe_checkout/templates/visitors.html index aa73570f6a1a045f3e323097be48f5751fa9656d..2376d6a6d1fb4f013b858646cbc104a57799257d 100644 --- a/stripe_checkout/stripe_checkout/templates/visitors.html +++ b/stripe_checkout/stripe_checkout/templates/visitors.html @@ -6,6 +6,7 @@ {% block body %} <div> <h1>Manage visitors</h1> + <h2 style="color: red">Warning: Be careful, you may break things here</h2> <table> <thead> <tr> @@ -51,7 +52,7 @@ <span>(paid <span> <input type="checkbox" form="{{ visitor.id }}_checkout_update_form" - name="{{ item.visit_checkout_question_id }}:{{ item.visit_checkout_answer_id }}:paid" + name="{{ item.visit_paid_question_id }}:{{ item.visit_paid_answer_id }}" autocomplete="off" {% if visitor|has_paid:item %}checked{% endif %}> </span>)</span> @@ -65,6 +66,14 @@ <button>Update</button> </form> </td> + <td> + <form id="{{ visitor.id }}_delete_orders" + method="post" + action="{% url 'stripe_checkout:delete-orders' visitor_id=visitor.id %}"> + {% csrf_token %} + <button>Delete orders</button> + </form> + </td> </tr> {% endfor %} </tbody> diff --git a/stripe_checkout/stripe_checkout/urls.py b/stripe_checkout/stripe_checkout/urls.py index 24b8482a4bfebf627db435684b0b3a77c0f5a257..087feb74134c707321b218270e2e033fa75468fc 100644 --- a/stripe_checkout/stripe_checkout/urls.py +++ b/stripe_checkout/stripe_checkout/urls.py @@ -1,6 +1,6 @@ from django.urls import include, path, re_path -from .management_views import update_visitor, list_visitors, index +from .management_views import delete_orders, update_visitor, list_visitors, index from .visit_views import stripe_event, checkout, checkout_success visitor_id = r"(?P<visitor_id>[a-z0-9]+)" @@ -11,6 +11,7 @@ urlpatterns = [ "visitors/", include( [ + re_path(f"{visitor_id}/delete_orders/", delete_orders, name="delete-orders"), re_path(f"{visitor_id}/", update_visitor, name="update-visitor"), path("", list_visitors, name="list-visitors"), ]