Adds working deposit and purchases.
- Switch to bootstrap. - Still no balance checking or form feedback messages.
This commit is contained in:
1 parent
ce8190c870
commit
fc400dffd4
36 files changed
+9233
-812
No files matched your search
+14
-13
@@ -2,17 +2,18 @@ from django import forms
|
||||
|
||||
from models import *
|
||||
|
||||
class OrderForm(forms.Form):
|
||||
pass
|
||||
class OrderForm(forms.ModelForm):
|
||||
# TODO : validate that the customer can afford the order
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ('customer',)
|
||||
|
||||
class OrderLineForm(forms.ModelForm):
|
||||
#product = forms.CharField(required=True, widget=forms.HiddenInput)
|
||||
#amount = forms.IntegerField(required=True)
|
||||
class Meta:
|
||||
model = OrderLine
|
||||
fields = ('amount','product')
|
||||
widgets = {
|
||||
'product': forms.HiddenInput(),
|
||||
'amount': forms.TextInput(attrs={'size': '2'}),
|
||||
}
|
||||
# TODO : Validation
|
||||
class OrderLineForm(forms.Form):
|
||||
product = forms.IntegerField(required=True)
|
||||
amount = forms.IntegerField(required=True)
|
||||
unit_price = forms.FloatField(required=True)
|
||||
|
||||
class DepositForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Transaction
|
||||
+2
-2
@@ -21,12 +21,12 @@ class Product(models.Model):
|
||||
updated = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Order(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
customer = models.ForeignKey(User)
|
||||
order_sum = models.FloatField(db_column='sum')
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return "{0}: {1} kr".format(self.user, self.order_sum)
|
||||
return "{0}: {1} kr".format(self.customer, self.order_sum)
|
||||
|
||||
class OrderLine(models.Model):
|
||||
order = models.ForeignKey(Order)
|
||||
|
||||
@@ -2,4 +2,5 @@ from django.conf.urls.defaults import patterns, include, url
|
||||
|
||||
urlpatterns = patterns('main.views',
|
||||
url(r'^register/$', 'register', name='register'),
|
||||
url(r'^deposit/$', 'deposit', name='deposit'),
|
||||
)
|
||||
+54
-12
@@ -26,22 +26,64 @@ def home(request):
|
||||
form = AuthenticationForm(request)
|
||||
return render_to_response('home.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def register(request):
|
||||
if request.method == "POST":
|
||||
# TODO: Form processing is not working at all
|
||||
form = OrderLineForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect( reverse('main.views.register') )
|
||||
products = Product.objects.all()
|
||||
users = User.objects.all()
|
||||
# Formset for orderlines
|
||||
# FIXME: Like this?
|
||||
#OrderLineFormSet = formset_factory(OrderLineForm, extra=products.count())
|
||||
#formset = OrderLineFormSet()
|
||||
users = User.objects.filter(userprofile__balance__gt=0)
|
||||
users_js = "[{0}]".format(
|
||||
",".join(['"'+user+'"' for user in users.values_list('username', flat=True)]))
|
||||
|
||||
# multiple orderlines (one per product)
|
||||
OrderLineFormSet = formset_factory(OrderLineForm)
|
||||
if request.method == "POST":
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
if formset.is_valid() and orderform.is_valid():
|
||||
order_sum = sum([orderline['amount'] * orderline['unit_price'] for orderline in formset.cleaned_data])
|
||||
order = orderform.save(commit=False)
|
||||
order.order_sum = order_sum
|
||||
order.save()
|
||||
|
||||
profile = order.customer.get_profile()
|
||||
profile.balance -= order.order_sum
|
||||
profile.save()
|
||||
|
||||
for ol in formset.cleaned_data:
|
||||
if ol['amount'] > 0:
|
||||
product = Product.objects.get(pk=ol['product'])
|
||||
OrderLine.objects.create(
|
||||
order=order,
|
||||
product=product,
|
||||
amount=ol['amount'],
|
||||
unit_price=ol['unit_price'])
|
||||
|
||||
return HttpResponseRedirect( reverse('main.views.register') )
|
||||
else:
|
||||
# errors
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
else:
|
||||
orderform = OrderForm()
|
||||
formset = OrderLineFormSet()
|
||||
return render_to_response('register.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
def deposit(request):
|
||||
users = User.objects.all()
|
||||
|
||||
if request.method == "POST":
|
||||
form = DepositForm(request.POST)
|
||||
if form.is_valid():
|
||||
transaction = form.save()
|
||||
profile = transaction.user.get_profile()
|
||||
profile.balance += transaction.amount
|
||||
profile.save()
|
||||
return HttpResponseRedirect( reverse('main.views.deposit') )
|
||||
else:
|
||||
form = DepositForm(request.POST)
|
||||
else:
|
||||
form = DepositForm()
|
||||
|
||||
return render_to_response('deposit.html', locals(), context_instance=RequestContext(request))
|
||||
|
||||
def logout(request):
|
||||
auth_logout(request)
|
||||
return render_to_response('registration/logout.html', locals(), context_instance=RequestContext(request))
|
||||
Reference in new issue
Block a user