Skip to content

Commit dd15419

Browse files
committed
Add donor events to recurrence upgrade process
1 parent 981f62f commit dd15419

4 files changed

Lines changed: 48 additions & 5 deletions

File tree

fragdenstaat_de/fds_donation/cms_plugins.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
DonationGiftFormCMSPlugin,
2020
DonationProgressBarCMSPlugin,
2121
Donor,
22+
DonorEvent,
2223
EmailDonationButtonCMSPlugin,
2324
RemoteDonationFormCMSPlugin,
2425
UpgradeRecurrenceFormCMSPlugin,
@@ -74,10 +75,21 @@ def render(self, context, instance, placeholder):
7475
context["next_url"] = instance.next_url or "/"
7576

7677
if context["donor"]:
78+
DonorEvent.objects.create(
79+
donor=context["donor"],
80+
reference=context["request"].GET.get("pk_campaign", ""),
81+
kind=DonorEvent.Kind.PROMPT_UPGRADE_RECURRENCE,
82+
)
7783
active_recurrence = context["donor"].get_current_recurrence()
78-
if active_recurrence:
84+
if active_recurrence and active_recurrence.should_upgrade(
85+
instance.days_since
86+
):
7987
context["form"] = RecurrenceUpgradeForm(
80-
recurrence=active_recurrence, choice_count=instance.choice_count
88+
recurrence=active_recurrence,
89+
choice_count=instance.choice_count,
90+
initial={
91+
"reference": context["request"].GET.get("pk_campaign", "")
92+
},
8193
)
8294

8395
return context

fragdenstaat_de/fds_donation/forms.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.conf import settings
88
from django.contrib.admin.widgets import ForeignKeyRawIdWidget
99
from django.core.validators import MinValueValidator
10+
from django.utils import timezone
1011
from django.utils.html import format_html
1112
from django.utils.translation import gettext_lazy as _
1213

@@ -969,6 +970,8 @@ def send_login_link(self):
969970

970971

971972
class RecurrenceUpgradeForm(forms.Form):
973+
reference = forms.CharField(widget=forms.HiddenInput, required=False)
974+
972975
def __init__(self, recurrence=None, choice_count=3, *args, **kwargs):
973976
self.recurrence: Recurrence | None = recurrence
974977
super().__init__(*args, **kwargs)
@@ -1038,5 +1041,5 @@ def modify_subscription(self, subscription):
10381041
interval=subscription.plan.interval,
10391042
)
10401043
if result:
1041-
self.recurrence.update_from_subscription()
1044+
self.recurrence.update_from_subscription(last_upgrade=timezone.now())
10421045
return result

fragdenstaat_de/fds_donation/templates/fds_donation/cms_plugins/upgrade_recurrence.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
class="ajaxified ajax-parent">
1212
{% csrf_token %}
1313
<input type="hidden" name="next" value="{{ next_url }}" />
14+
{{ form.reference }}
1415
{{ form.recurrence }}
1516
<label class="fw-bold" for="{{ form.upgrade_amount.auto_id }}">{{ form.upgrade_amount.label }}</label>
1617
<div class="row">
@@ -21,4 +22,11 @@
2122
</div>
2223
</form>
2324
</div>
25+
{% elif request.toolbar.edit_mode_active %}
26+
<div style="outline: 1px solid red; min-height: 2rem">
27+
{% for plugin in instance.child_plugin_instances %}
28+
{% render_plugin plugin %}
29+
{% endfor %}
30+
<p>{{ instance }}</p>
31+
</div>
2432
{% endif %}

fragdenstaat_de/fds_donation/views.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
RecurrenceUpgradeForm,
3131
SimpleDonationForm,
3232
)
33-
from .models import DonationFormViewCount, Donor
33+
from .models import DonationFormViewCount, Donor, DonorEvent
3434
from .services import confirm_donor_email
3535
from .utils import (
3636
DONOR_SESSION_KEY,
@@ -114,7 +114,27 @@ def handle_upgrade(request) -> bool | None:
114114
form = RecurrenceUpgradeForm(recurrence=recurrence, data=request.POST)
115115
if not form.is_valid():
116116
return
117-
return form.save()
117+
previous_amount = recurrence.amount
118+
previous_amount_per_month = recurrence.amount_per_month
119+
result = form.save()
120+
if result:
121+
DonorEvent.objects.create(
122+
donor=donor,
123+
kind=DonorEvent.Kind.UPGRADE_RECURRENCE,
124+
reference=form.cleaned_data["reference"],
125+
context={
126+
"previous_amount": float(previous_amount),
127+
"previous_amount_decimal": str(previous_amount),
128+
"previous_amount_per_month": float(previous_amount_per_month),
129+
"previous_amount_per_month_decimal": str(previous_amount_per_month),
130+
"new_amount": float(recurrence.amount),
131+
"new_amount_decimal": str(recurrence.amount),
132+
"new_amount_per_month": float(recurrence.amount_per_month),
133+
"new_amount_per_month_decimal": str(recurrence.amount_per_month),
134+
"request": dict(request.GET),
135+
},
136+
)
137+
return result
118138

119139

120140
class DonationView(FormView):

0 commit comments

Comments
 (0)