Browse Source

first steps in porting cashonly to Django 1.11

master
nobody 7 years ago
parent
commit
d7e67243f5
  1. 2
      cashonly/admin.py
  2. 2
      cashonly/templates/cashonly/base.html
  3. 2
      cashonly/templates/cashonly/login.html
  4. 1
      cashonly/templates/cashonly/usersettings_saved.html
  5. 18
      cashonly/urls.py
  6. 197
      cashonly/views.py

2
cashonly/admin.py

@ -87,7 +87,7 @@ class AccountAdmin(admin.ModelAdmin): @@ -87,7 +87,7 @@ class AccountAdmin(admin.ModelAdmin):
'last': request.user.last_name}
if comment is not None and len(comment) > 0:
desc += ' (%s)' % (comment)
obj.change_credit(aount, subject, desc)
obj.change_credit(amount, subject, desc)
# Make sure the object is saved in any case
obj.save()

2
cashonly/templates/cashonly/base.html

@ -76,7 +76,7 @@ @@ -76,7 +76,7 @@
(<span {% if user.account.credit < 0 %} style="color: red"{% endif %}>{{ user.account.credit|floatformat:2 }}€</span>)
</p>
</li>
<li><a href="{% url 'django.contrib.auth.views.logout_then_login' %}">{% trans "Logout" %}</a></li>
<li><a href="{% url 'logout_then_login' %}">{% trans "Logout" %}</a></li>
</ul>
</div>
</div>

2
cashonly/templates/cashonly/login.html

@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
<div class="container">
<form class="form-signin" method="post" action="{% url 'django.contrib.auth.views.login' %}">
<form class="form-signin" method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<h2 class="form-signin-heading">{% trans "Please sign in" %}</h2>

1
cashonly/templates/cashonly/usersettings_saved.html

@ -1,5 +1,4 @@ @@ -1,5 +1,4 @@
{% extends "cashonly/base.html" %}
{% load url from future %}
{% load i18n %}
{% block content %}

18
cashonly/urls.py

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
from django.conf.urls import patterns, url
from django.conf.urls import url
from cashonly import views
urlpatterns = patterns('',
url(r'^/?$', 'cashonly.views.overview', name='overview'),
urlpatterns = [
url(r'^$', views.overview, name='overview'),
url(r'^product/(?P<pk>\d+)/$', views.ProductView.as_view(), name='product'),
@ -15,16 +15,16 @@ urlpatterns = patterns('', @@ -15,16 +15,16 @@ urlpatterns = patterns('',
url(r'products/((?P<category_id>\d+)/)?$', views.products, name='products'),
url(r'buy/(?P<product_id>\d+)/$', 'cashonly.views.buy', name='buy'),
url(r'buy/(?P<product_id>\d+)/$', views.buy, name='buy'),
url(r'buy/(?P<product_id>\d+)/really/$', 'cashonly.views.buy',
url(r'buy/(?P<product_id>\d+)/really/$', views.buy,
{'confirm': True}, name='buy_really'),
url(r'buy/thanks/$', 'cashonly.views.buy_thanks', name='buy_thanks'),
url(r'buy/thanks/$', views.buy_thanks, name='buy_thanks'),
url(r'buy/error/$', 'cashonly.views.buy_error', name='buy_error'),
url(r'buy/error/$', views.buy_error, name='buy_error'),
url(r'usersettings(/(?P<submit>\w+))?/$', 'cashonly.views.usersettings',
url(r'usersettings(/(?P<submit>\w+))?/$', views.usersettings,
name='usersettings'),
)
]

197
cashonly/views.py

@ -1,8 +1,7 @@ @@ -1,8 +1,7 @@
from django.views import generic
from django import forms
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.core import paginator
from cashonly.models import *
from django.utils.translation import ugettext as _
@ -11,153 +10,135 @@ import cashonly.version @@ -11,153 +10,135 @@ import cashonly.version
import datetime
def version_number_context_processor(request):
return {'version_number': cashonly.version.CASHONLY_VERSION}
return {'version_number': cashonly.version.CASHONLY_VERSION}
@login_required
def overview(request):
a = request.user.account
time = datetime.datetime.now() - datetime.timedelta(hours=12)
transactions = Transaction.objects.filter(account=a).filter(timestamp__gte=time).order_by('-timestamp')
a = request.user.account
time = datetime.datetime.now() - datetime.timedelta(hours=12)
transactions = Transaction.objects.filter(account=a).filter(timestamp__gte=time).order_by('-timestamp')
# FIXME: distinct doesn't work as expected, so fetch 20 rows and hope that there are 3 distinct products
purchases = Product.objects.filter(saleslogentry__account=a).order_by('-saleslogentry__timestamp').distinct()[:20]
# FIXME: distinct doesn't work as expected, so fetch 20 rows and hope that there are 3 distinct products
purchases = Product.objects.filter(saleslogentry__account=a).order_by('-saleslogentry__timestamp').distinct()[:20]
products = []
# Find 3 products
for p in purchases:
if not p in products:
products.append(p)
products = []
# Find 3 products
for p in purchases:
if not p in products:
products.append(p)
if len(products) == 3:
break
if len(products) == 3:
break
context = RequestContext(request, { 'latest_transactions': transactions,
'latest_purchases': products})
return render_to_response('cashonly/index.html',
context_instance=context)
return render(request, 'cashonly/index.html',
{'latest_transactions': transactions,
'latest_purchases': products})
class ProductView(generic.DetailView):
model = Product
model = Product
@login_required
def transactions(request, detailed, page):
a = request.user.account
transactions = Transaction.objects.filter(account=a).order_by('-timestamp')
if page is None:
page = 1
a = request.user.account
transactions = Transaction.objects.filter(account=a).order_by('-timestamp')
pagi = paginator.Paginator(transactions, 10)
try:
transaction_list = pagi.page(page)
except paginator.EmptyPage:
transaction_list = paginator.page(paginator.num_pages)
if page is None:
page = 1
context = RequestContext(request, { 'transaction_list': transaction_list,
'detailed': detailed })
pagi = paginator.Paginator(transactions, 10)
try:
transaction_list = pagi.page(page)
except paginator.EmptyPage:
transaction_list = paginator.page(paginator.num_pages)
return render_to_response('cashonly/transaction_list.html',
context_instance=context)
return render(request, 'cashonly/transaction_list.html', { 'transaction_list': transaction_list,
'detailed': detailed })
def products(request, category_id=None):
if category_id is None:
category = None
products = Product.objects.filter(active=True)
else:
category = get_object_or_404(ProductCategory, id=category_id)
products = Product.objects.filter(active=True).filter(category=category)
if category_id is None:
category = None
products = Product.objects.filter(active=True)
else:
category = get_object_or_404(ProductCategory, id=category_id)
products = Product.objects.filter(active=True).filter(category=category)
categories = ProductCategory.objects.all()
categories = ProductCategory.objects.all()
context = RequestContext(request, { 'product_list': products,
'category': category,
'categories': categories })
return render_to_response('cashonly/product_list.html',
context_instance=context)
return render(request, 'cashonly/product_list.html', { 'product_list': products,
'category': category,
'categories': categories })
@login_required
def buy(request, product_id, confirm=False):
product = get_object_or_404(Product, id=product_id)
if confirm:
if request.user.account.buy_product(product, 1):
return redirect('buy_thanks')
else:
return redirect('buy_error')
else:
context = RequestContext(request, {'product': product})
return render_to_response('cashonly/buy_confirm.html',
context_instance=context)
product = get_object_or_404(Product, id=product_id)
if confirm:
if request.user.account.buy_product(product, 1):
return redirect('buy_thanks')
else:
return redirect('buy_error')
else:
return render(request, 'cashonly/buy_confirm.html', {'product': product})
@login_required
def buy_thanks(request):
context = RequestContext(request)
return render_to_response('cashonly/buy_thanks.html', context_instance=context)
return render(request, 'cashonly/buy_thanks.html')
@login_required
def buy_error(request):
context = RequestContext(request)
return render_to_response('cashonly/buy_error.html', context_instance=context)
return render(request, 'cashonly/buy_error.html')
class UserSettingsForm(forms.Form):
daily_digest = forms.BooleanField(required=False,
label=ugettext_lazy('daily digest'))
daily_digest = forms.BooleanField(required=False,
label=ugettext_lazy('daily digest'))
class UserPinForm(forms.Form):
pin = forms.CharField(max_length=32, widget=forms.PasswordInput,
label=ugettext_lazy('PIN'), required=False)
pin_confirm = forms.CharField(max_length=32, widget=forms.PasswordInput,
label=ugettext_lazy('PIN (confirmation)'),
required=False)
pin = forms.CharField(max_length=32, widget=forms.PasswordInput,
label=ugettext_lazy('PIN'), required=False)
pin_confirm = forms.CharField(max_length=32, widget=forms.PasswordInput,
label=ugettext_lazy('PIN (confirmation)'),
required=False)
def clean(self):
cleaned_data = super(UserPinForm, self).clean()
def clean(self):
cleaned_data = super(UserPinForm, self).clean()
if not (cleaned_data.has_key('pin') or
cleaned_data.has_key('pin_confirm')):
return cleaned_data
if cleaned_data['pin'] != cleaned_data['pin_confirm']:
raise forms.ValidationError(_('PINs do not match.'))
if not (cleaned_data.has_key('pin') or
cleaned_data.has_key('pin_confirm')):
return cleaned_data
if cleaned_data['pin'] != cleaned_data['pin_confirm']:
raise forms.ValidationError(_('PINs do not match.'))
return cleaned_data
return cleaned_data
@login_required
def usersettings(request, submit=None):
daily_digest = request.user.account.daily_digest
settings_form = UserSettingsForm({'daily_digest': daily_digest})
pin_form = UserPinForm()
if request.method == 'POST':
if submit == 'pin':
pin_form = UserPinForm(request.POST)
if pin_form.is_valid():
pin = pin_form.cleaned_data['pin']
request.user.account.pin = pin
request.user.account.save()
context = RequestContext(request)
return render_to_response('cashonly/usersettings_saved.html',
context_instance=context)
elif submit == 'settings':
settings_form = UserSettingsForm(request.POST)
if settings_form.is_valid():
daily_digest = settings_form.cleaned_data['daily_digest']
request.user.account.daily_digest = daily_digest
request.user.account.save()
context = RequestContext(request)
return render_to_response('cashonly/usersettings_saved.html',
context_instance=context)
context = RequestContext(request, { 'settings_form': settings_form,
daily_digest = request.user.account.daily_digest
settings_form = UserSettingsForm({'daily_digest': daily_digest})
pin_form = UserPinForm()
if request.method == 'POST':
if submit == 'pin':
pin_form = UserPinForm(request.POST)
if pin_form.is_valid():
pin = pin_form.cleaned_data['pin']
request.user.account.pin = pin
request.user.account.save()
return render(request, 'cashonly/usersettings_saved.html')
elif submit == 'settings':
settings_form = UserSettingsForm(request.POST)
if settings_form.is_valid():
daily_digest = settings_form.cleaned_data['daily_digest']
request.user.account.daily_digest = daily_digest
request.user.account.save()
return render(request, 'cashonly/usersettings_saved.html')
return render(request, 'cashonly/usersettings.html', { 'settings_form': settings_form,
'pin_form': pin_form})
return render_to_response('cashonly/usersettings.html',
context_instance=context)

Loading…
Cancel
Save