self.referer = referer
super().__init__(*args, **kwargs)
club = models.Club.objects.first()
+ if self.instance.is_custom_amount():
+ self.fields['custom_amount'].initial = int(self.instance.amount)
if club is not None:
self.fields['custom_amount'].widget.attrs['min'] = club.min_amount
return state
def save(self, *args, **kwargs):
- self.instance.source = self.referer
+ if self.referer is not None:
+ self.instance.source = self.referer
return super().save(*args, **kwargs)
club = Club.objects.first()
return club.get_description_for_amount(self.amount, self.monthly)
+ def is_custom_amount(self):
+ club = Club.objects.first()
+ if not self.amount:
+ return False
+ if self.monthly:
+ return not club.monthlyamount_set.filter(amount=self.amount).exists()
+ else:
+ return not club.singleamount_set.filter(amount=self.amount).exists()
+
def initiate_payment(self, request):
return self.get_payment_method().initiate(request, self)
--- /dev/null
+<div class="checkout-infobar" style="background: yellow; padding:20px; border: 1px solid yellow; border-radius: 10px; margin: 0 0 20px;">
+ <div class="if-monthly">
+ Dziękujemy za wybranie comiesięcznej wpłaty.
+ </div>
+ <div class="if-not-monthly">
+ Czy na pewno nie comiesięczna? <a class="donation-mod-monthly" data-url="{% url 'donation_set_monthly' schedule.key %}" href="{% url 'donation_step1' schedule.key %}">Zmień na comiesięczną wpłatę.</a>
+ </div>
+</div>
{% load static %}
{% load i18n %}
-<form method="post" action="{% url 'club_join' %}">
+<form method="post" action="{% if schedule %}{% url 'donation_step1' key=schedule.key %}{% else %}{% url 'club_join' %}{% endif %}">
{% csrf_token %}
{{ form.errors }}
<input type="radio" name="switch" id="switch-once" value="single" class="toggle-input" {% if schedule and not schedule.monthly %}checked{% endif %}>
{% for amount in amounts.single %}
<div class="l-checkout__payments__box once{% if not schedule.monthly and schedule.amount == amount.amount or not schedule and club.default_single_amount == amount.amount %} is-active{% endif %}{% if amount.wide %} l-checkout__payments__box--special{% endif %} l-checkout__payments__box--{{ amount.box_variant }}">
- <h3>{{ amount.amount }} zł</h3>
<div class="l-checkout__payments__box__btn-wrp">
{% if amount.description %}
<p>{{ amount.description|safe }}</p>
{% endif %}
- <button name="single_amount" value="{{ amount.amount }}">{% trans "Wybierz" %}</button>
+ <button name="single_amount" value="{{ amount.amount }}">{{ amount.amount }} zł</button>
</div>
</div>
{% endfor %}
<div class="l-checkout__payments payments-recurring wide-spot-{{ amounts.monthly_wide_spot }}">
{% for amount in amounts.monthly %}
<div class="l-checkout__payments__box{% if schedule.monthly and schedule.amount == amount.amount or not schedule and amount.amount == club.default_monthly_amount %} is-active{% endif %}{% if amount.wide %} l-checkout__payments__box--special{% endif %} l-checkout__payments__box--{{ amount.box_variant }}">
- <h3>{{ amount.amount }} zł <span>{% trans "/mies." context "kwota na miesiąc" %}</span></h3>
<div class="l-checkout__payments__box__btn-wrp">
{% if amount.description %}
<p>{{ amount.description|safe }}</p>
{% endif %}
- <button name="monthly_amount" value="{{ amount.amount }}">{% trans "Wybierz" %}</button>
+ <button name="monthly_amount" value="{{ amount.amount }}">{{ amount.amount }} zł <span> /mies.</span></button>
</div>
</div>
{% endfor %}
<div class="l-checkout__amount">
<div class="l-checkout__input">
- <label for="kwota">{% trans "Inna kwota" %}</label>
+ <label for="id_custom_amount">{% trans "Inna kwota" %}</label>
{{ form.custom_amount }}
</div>
<button>{% trans "Dalej" %}</button>
{% block donation-step-content %}
- <div class="l-checkout__cols">
+ <div class="l-checkout__cols q-is-monthly {% if schedule.monthly %}is-monthly{% endif %}">
<div class="l-checkout__col">
<div class="l-checkout__payments__box is-active">
<h3>
{{ schedule.amount|floatformat }} zł
- {% if schedule.monthly %}
- <span>{% trans "/mies." context "kwota na miesiąc" %}</span>
- {% endif %}
+ <span class="if-monthly">{% trans "/mies." context "kwota na miesiąc" %}</span>
</h3>
<img src="{% static '2022/images/checkout-img-3.jpg' %}" alt="">
+ {% if schedule.get_description %}
<p>{{ schedule.get_description }}</p>
+ {% endif %}
</div>
</div>
<div class="l-checkout__col">
+ {% include "club/donation_infobox.html" %}
+
<form method='post'>
{% csrf_token %}
{{ form.errors }}
- {{ form.amount }}
- {{ form.monthly }}
<div class="l-checkout__form">
<div class="l-checkout__form__row">
<div class="l-checkout__input">
{% block donation-step-content %}
- <div class="l-checkout__cols">
+ <div class="l-checkout__cols q-reload-is-monthly {% if schedule.monthly %}is-monthly{% endif %}">
<div class="l-checkout__col">
<div class="l-checkout__payments__box is-active">
<h3>
</div>
</div>
<div class="l-checkout__col">
+ {% include "club/donation_infobox.html" %}
+
+ {% if schedule.monthly %}
+ <h3>Comiesięczna darowizna będzie pobierana automatycznie</h3>
+ <p>Możesz z niej zrezygnować w dowolnej chwili, korzystając z linku który dostaniesz mailem.</p>
+ {% endif %}
+
<div class="l-checkout__form">
<div class="l-checkout__form__row full">
- <div class="iframe">
+
+
+ <div class="iframe">
+
{% for method in schedule.get_payment_methods %}
{% invite_payment method schedule %}
{% endfor %}
{% endif %}
<div class="{% if view.step == 1 %}is-current{% else %}is-completed{% endif %}">
<span>1</span>
- <p>{% trans "Rodzaj wsparcia" %}</p>
+ <p>{% trans "Kwota wsparcia" %}</p>
</div>
{% if view.step > 1 and view.step != 4 %}
</a>
{% load i18n static %}
-<h3>{% trans "Wolisz wpłacić przez PayPal?" %}</h3>
+<h3>
+ {% if schedule.monthly %}
+ {% trans "Wolisz ustawić comiesięczną darowiznę przez PayPal?" %}
+ {% else %}
+ {% trans "Wolisz wpłacić przez PayPal?" %}
+ {% endif %}
+</h3>
<a href="{% url 'paypal_init' schedule.key %}">
<div class="iframe">
<img src="{% static 'club/paypal.png' %}" alt="PayPal">
{% load i18n %}
-<h3>{% trans "Podaj dane karty płatniczej" %}</h3>
+<h3>{% trans "Podaj dane karty płatniczej do comiesięcznej darowizny" %}</h3>
<div class="iframe">
<form id="theform" method='POST' action='{% url "club_payu_rec_payment" schedule.key %}'>
{% csrf_token %}
path('plan/<key>/zestawienie/<int:year>/', banner_exempt(views.YearSummaryView.as_view()), name='club_year_summary'),
path('plan/<key>/rodzaj/', banner_exempt(views.DonationStep1.as_view()), name='donation_step1'),
path('plan/<key>/dane/', banner_exempt(views.DonationStep2.as_view()), name='donation_step2'),
+ path('plan/<key>/ustaw-miesiecznie/', views.set_monthly, name='donation_set_monthly'),
path('przylacz/<key>/', views.claim, name='club_claim'),
path('anuluj/<key>/', views.cancel, name='club_cancel'),
from django.conf import settings
from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import Sum
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.utils.decorators import method_decorator
return c
+def set_monthly(request, key):
+ schedule = get_object_or_404(models.Schedule, payed_at=None, key=key)
+ if request.POST:
+ schedule.monthly = True
+ schedule.save(update_fields=['monthly'])
+ return JsonResponse({
+ "amount": schedule.amount,
+ "monthly": schedule.monthly,
+ })
+
+
class JoinView(CreateView):
form_class = forms.DonationStep1Form
template_name = 'club/donation_step1.html'
}
}
button {
- height: 56px;
+ margin: 0;
+ font-family: "Source Sans Pro",sans-serif;
+ font-weight: bold;
+ font-size: 44px;
+ line-height: 130%;
+ letter-spacing: -0.01em;
+ height: 90px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all $ease-out 250ms;
+
background: #FFFFFF;
border: 1px solid #92BD39;
border-radius: 3px;
width: 100%;
outline: 0;
cursor: pointer;
- font-weight: 600;
- font-size: 16px;
- line-height: 24px;
- display: flex;
- align-items: center;
- justify-content: center;
text-align: center;
color: #083F4D;
- transition: background $ease-out 250ms;
- @include rwd($break-flow) {
- font-size: 20px;
- line-height: 25px;
+ span {
+ font-weight: 600;
+ font-size: 25px;
+ line-height: 200%;
+ letter-spacing: -0.01em;
+ color: #92BD39;
+ margin-left: 10px;
+ transition: opacity $ease-out 250ms;
}
&:hover {
&:hover {
background: #83AD2B;
}
+ span {
+ color: white;
+ }
}
}
}
}
}
+
+
+.if-monthly { display: none; }
+.is-monthly {
+ .if-monthly {
+ display: block;
+ }
+ .if-not-monthly {
+ display: none;
+ }
+}
$('input', container).val($(this).val());
$('.is-active', container).removeClass('is-active');
$(this).closest('.l-checkout__payments__box').addClass('is-active');
- $('#kwota').val('');
- return false;
+ $('#id_custom_amount').val('');
+ });
+
+ $('.donation-mod-monthly').on('click', function() {
+ $.ajax({
+ method: 'POST',
+ data: {
+ csrfmiddlewaretoken: $("[name=csrfmiddlewaretoken]").val(),
+ },
+ url: $(this).data('url'),
+ success: function(data) {
+ if ($(".q-reload-is-monthly").length) {
+ window.location.reload()
+ } else {
+ $(".q-is-monthly").toggleClass('is-monthly', data.monthly);
+ }
+ }
+ });
+ return false;
});
})();