Skip to content

Commit 54a620b

Browse files
committed
Add Action: Calculate Imported Discount-Code Usages
1 parent 6e98673 commit 54a620b

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

Diff for: backend/payment/admin.py

+57
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,14 @@ def get_urls(self):
5151

5252
admin.site.register(PaymentDiscount, PaymentDiscountAdmin)
5353

54+
class DiscountCodesImportForm(forms.Form):
55+
file = forms.FileField()
56+
5457
class PaymentRequestAdmin(admin.ModelAdmin, ExportCSVMixin):
5558
list_display = ('participant', 'timestamp', 'paid', 'discount_code', 'order_id', 'base_price', 'paid_price')
5659
list_filter = ('paid', 'discount__code')
5760
actions = ["export_as_csv", "calculate_discount_usage"]
61+
change_list_template = "payment_request_changelist.html"
5862

5963
def base_price(self, obj):
6064
return obj.get_price()[0]
@@ -102,4 +106,57 @@ def calculate_discount_usage(self, request, queryset):
102106

103107
calculate_discount_usage.short_description = "Calculate Discount Code Usage"
104108

109+
def import_discount_codes(self, request):
110+
if request.method == 'POST':
111+
file = request.FILES["file"]
112+
content = file.read().decode('utf-8')
113+
discount_codes = [code.strip() for code in content.split('\n') if code.strip()]
114+
115+
response = HttpResponse(content_type='text/csv')
116+
response['Content-Disposition'] = 'attachment; filename=discount_usage_report.csv'
117+
writer = csv.writer(response)
118+
119+
headers = [
120+
'Discount Code',
121+
'Event',
122+
'Total Usage',
123+
'Successful Payments'
124+
]
125+
writer.writerow(headers)
126+
127+
for code in discount_codes:
128+
try:
129+
discount = PaymentDiscount.objects.get(code=code)
130+
total_usage = PaymentRequest.objects.filter(discount=discount).count()
131+
successful_payments = PaymentRequest.objects.filter(
132+
discount=discount,
133+
paid=True
134+
).count()
135+
136+
row = [
137+
discount.code,
138+
str(discount.event) if discount.event else 'No Event',
139+
total_usage,
140+
successful_payments
141+
]
142+
writer.writerow(row)
143+
except PaymentDiscount.DoesNotExist:
144+
row = [code, 'Not Found', 0, 0]
145+
writer.writerow(row)
146+
147+
return response
148+
149+
form = DiscountCodesImportForm()
150+
payload = {"form": form}
151+
return render(
152+
request, "csv_form.html", payload
153+
)
154+
155+
def get_urls(self):
156+
urls = super().get_urls()
157+
my_urls = [
158+
path('import-discount-codes/', self.import_discount_codes),
159+
]
160+
return my_urls + urls
161+
105162
admin.site.register(PaymentRequest, PaymentRequestAdmin)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% extends 'admin/change_list.html' %}
2+
3+
{% block object-tools %}
4+
<a href="import-discount-codes/">Calculate Imported Discount-Code Usages</a>
5+
<br />
6+
{{ block.super }}
7+
{% endblock %}

0 commit comments

Comments
 (0)