First pass at tying the premium selected and the pledge amount
parent
dc700b1125
commit
b44379e6cd
|
@ -10,9 +10,14 @@ from decimal import Decimal as D
|
|||
from selectable.forms import AutoCompleteSelectMultipleWidget,AutoCompleteSelectMultipleField
|
||||
from selectable.forms import AutoCompleteSelectWidget,AutoCompleteSelectField
|
||||
|
||||
from regluit.core.models import UserProfile, RightsHolder, Claim, Campaign
|
||||
from regluit.core.models import UserProfile, RightsHolder, Claim, Campaign, Premium
|
||||
from regluit.core.lookups import OwnerLookup
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def UserClaimForm ( user_instance, *args, **kwargs ):
|
||||
class ClaimForm(forms.ModelForm):
|
||||
i_agree=forms.BooleanField()
|
||||
|
@ -143,6 +148,44 @@ class CampaignPledgeForm(forms.Form):
|
|||
label="Pledge Amount",
|
||||
)
|
||||
anonymous = forms.BooleanField(required=False, label=_("Don't display my username in the supporters list"))
|
||||
|
||||
premium_id = forms.IntegerField(required=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# might want to create the premiums regardless of whether premiums being passed in.
|
||||
# pull out any premiums keyword
|
||||
|
||||
try:
|
||||
premiums = kwargs.get('premiums', None)
|
||||
del kwargs["premiums"]
|
||||
except:
|
||||
premiums = None
|
||||
|
||||
super(CampaignPledgeForm,self).__init__(*args, **kwargs)
|
||||
|
||||
# right now we're rendering the premiums in HTML in the template. Might want to create a custom widget
|
||||
|
||||
if premiums is not None:
|
||||
premium_choices = tuple( [(p.id, "%s (%s)" % (p.description, p.amount)) for p in premiums] )
|
||||
self.fields["premium_id"] = forms.ChoiceField(choices=premium_choices, required=False, widget=forms.RadioSelect)
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = self.cleaned_data
|
||||
logger.info("cleaned_data: %s " ,cleaned_data)
|
||||
# check on whether the preapproval amount is < amount for premium tier. If so, put an error message
|
||||
try:
|
||||
preapproval_amount = cleaned_data.get("preapproval_amount")
|
||||
premium_id = int(cleaned_data.get("premium_id"))
|
||||
premium_amount = Premium.objects.get(id=premium_id).amount
|
||||
logger.info("amount, id, premium_amount: %s %s %s", preapproval_amount, premium_id, premium_amount )
|
||||
if preapproval_amount < premium_amount:
|
||||
raise forms.ValidationError(_("Sorry, you must pledge at least %s to select that premium." % (premium_amount)))
|
||||
except Exception, e:
|
||||
if isinstance(e, forms.ValidationError):
|
||||
raise e
|
||||
|
||||
return cleaned_data
|
||||
|
||||
|
||||
class GoodreadsShelfLoadingForm(forms.Form):
|
||||
goodreads_shelf_name_number = forms.CharField(widget=forms.Select(choices=(
|
||||
|
|
|
@ -36,19 +36,22 @@
|
|||
Campaign in Progress: ${{ work.last_campaign.current_total }}/${{ work.last_campaign.target }}
|
||||
</div>
|
||||
|
||||
<!-- Change this to submit to pledge page, not campaign page -->
|
||||
|
||||
<div class="jsmod-content">
|
||||
|
||||
<form method="POST" action="{% url pledge work_id=work.id %}">
|
||||
{% csrf_token %}
|
||||
{{form.as_p}}
|
||||
{{ form.non_field_errors }}
|
||||
{{ form.preapproval_amount.errors }}
|
||||
{{ form.preapproval_amount.label_tag }}: {{ form.preapproval_amount }}
|
||||
{{ form.anonymous.errors }}
|
||||
{{ form.anonymous.label_tag }}: {{ form.anonymous }}
|
||||
<input type="submit" value="Pledge" />
|
||||
</form>
|
||||
|
||||
<div class="jsmod-content">
|
||||
<form action="#">
|
||||
<ul class="support menu">
|
||||
{% for premium in premiums %}
|
||||
<li class="{% if forloop.first %}first{% else %}{% if forloop.last %}last{% endif %}{% endif %}">
|
||||
<input type="radio" name="premium_radio" value="{{premium.id}}" {% ifequal request.GET.premium_id premium.id|stringformat:"s" %}checked="checked"{% endifequal %}" />
|
||||
<input type="radio" name="premium_id" value="{{premium.id}}" {% ifequal request.GET.premium_id premium.id|stringformat:"s" %}checked="checked"{% endifequal %}" />
|
||||
<span class="menu-item-price">${{ premium.amount }}</span>
|
||||
<span class="menu-item-desc">{{ premium.description }}</span>
|
||||
</a></li>
|
||||
|
|
|
@ -2,6 +2,7 @@ import logging
|
|||
import datetime
|
||||
from decimal import Decimal as D
|
||||
|
||||
from django import forms
|
||||
from django.db.models import Q, Count
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -146,23 +147,26 @@ class PledgeView(FormView):
|
|||
work = get_object_or_404(models.Work, id=self.kwargs["work_id"])
|
||||
|
||||
campaign = work.last_campaign()
|
||||
|
||||
if campaign:
|
||||
premiums = campaign.premiums.all()
|
||||
if premiums.count() == 0:
|
||||
premiums = models.Premium.objects.filter(campaign__isnull=True)
|
||||
|
||||
premium_id = self.request.GET.get('premium_id', None)
|
||||
preapproval_amount = self.request.POST.get('preapproval_amount', None)
|
||||
premium_id = self.request.REQUEST.get('premium_id', None)
|
||||
preapproval_amount = self.request.REQUEST.get('preapproval_amount', None)
|
||||
|
||||
if premium_id is not None:
|
||||
if premium_id is not None and preapproval_amount is None:
|
||||
try:
|
||||
preapproval_amount = D(models.Premium.objects.get(id=premium_id).amount)
|
||||
except:
|
||||
preapproval_amount = None
|
||||
|
||||
data = {'preapproval_amount':preapproval_amount}
|
||||
form = CampaignPledgeForm(data)
|
||||
logger.info("preapproval_amount, premium_id: %s %s ", preapproval_amount, premium_id)
|
||||
data = {'preapproval_amount':preapproval_amount, 'premium_id':premium_id}
|
||||
|
||||
form = CampaignPledgeForm(data, premiums=premiums)
|
||||
|
||||
context.update({'work':work,'campaign':campaign, 'premiums':premiums, 'form':form})
|
||||
return context
|
||||
|
||||
|
|
Loading…
Reference in New Issue