license: refactored views; also replaced lots of magic numbers

remotes/origin/license
Andrey 9 years ago
parent 42a2c5a207
commit cb1794e01d
  1. 118
      project/customer/views/license.py

@ -2,20 +2,21 @@
import json import json
import hashlib import hashlib
from django.shortcuts import render, redirect from django.shortcuts import render, redirect, get_object_or_404
from django.http import Http404, HttpResponseRedirect, HttpResponseForbidden, HttpResponse from django.http import Http404, HttpResponseRedirect, HttpResponseForbidden, HttpResponse
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.utils.http import urlquote from django.utils.http import urlquote
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.views.decorators.csrf import csrf_protect from django.views.decorators.csrf import csrf_protect
from django.conf import settings
from yandex_money.models import Payment from yandex_money.models import Payment
from project.customer import consts
from ..models import License, LicensePrice from ..models import License, LicensePrice
from ..consts import PAYFORMS
from ..forms import LicenseForm, YaForm from ..forms import LicenseForm, YaForm
from ..utils import raise_if_no_profile from ..utils import raise_if_no_profile
@ -24,13 +25,15 @@ from ..utils import raise_if_no_profile
@csrf_protect @csrf_protect
def yandex_pay(request, payment_id): def yandex_pay(request, payment_id):
template_name = 'customer/profile/yandex.html' template_name = 'customer/profile/yandex.html'
payment = Payment.objects.get(id=payment_id)
payment = Payment.objects.get(pk=payment_id)
if payment.user != request.user: if payment.user != request.user:
raise Exception(u'[yandex_pay error] Different users! | payment.user_id = %d ; request.user_id = %d' % (payment.user_id, request.user.pk,)) raise Exception(u'[yandex_pay error] Different users! | payment.user_id = %d ; request.user_id = %d' % (payment.user_id, request.user.pk,))
form = YaForm(instance=payment) form = YaForm(instance=payment)
return render(request, template_name, {'form': form,
'ya_url': settings.YANDEX_MONEY_PAYMENT_URL}) return render(request, template_name, {'form': form, 'ya_url': settings.YANDEX_MONEY_PAYMENT_URL})
@login_required @login_required
@ -41,34 +44,50 @@ def order_license(request):
raise_if_no_profile(request) raise_if_no_profile(request)
template_name = 'customer/profile/license.html' template_name = 'customer/profile/license.html'
form = LicenseForm(request.POST or None,
initial = {'term': LicensePrice.objects.all()[1], 'payform': 0}) # срок лицензии. по умолчанию, 6 месяцев
dictionary = { # TODO don't use the magic index `1`. maybe add field to LicensePrice model to mark the default record via admin
'form': form, term_default = LicensePrice.objects.all()[1]
}
form = LicenseForm(
request.POST or None,
initial = {
'term': term_default,
'payform': consts.PAYFORM_BEZNAL,
}
)
if form.is_valid(): if form.is_valid():
new_license = License(company=request.user.profile, _payform = int(form.cleaned_data['payform'])
term=form.cleaned_data['term'].term,
payform=form.cleaned_data['payform'], new_license = License(
pay_sum=form.cleaned_data['term'].price, company = request.user.profile,
) term = form.cleaned_data['term'].term,
payform = _payform,
pay_sum = form.cleaned_data['term'].price,
)
new_license.save() new_license.save()
if form.cleaned_data['payform'] == '1':
payment, _ = Payment.objects.get_or_create(order_amount=form.cleaned_data['term'].price, if _payform == consts.PAYFORM_CARD:
payment_type=Payment.PAYMENT_TYPE.AC, payment, _ = Payment.objects.get_or_create(
order_number=new_license.id, order_amount = form.cleaned_data['term'].price,
) payment_type = Payment.PAYMENT_TYPE.AC,
payment.user=request.user order_number = new_license.pk,
# payment.cps_email=request.user.email )
payment.customer_number=request.user.email
# payment.customer_number=request.user.profile.get_company_name().strip() payment.user = request.user
# payment.cps_email = request.user.email
payment.customer_number = request.user.email
# payment.customer_number = request.user.profile.get_company_name().strip()
payment.save() payment.save()
return redirect(reverse('yamoney_confirm', kwargs={'payment_id': payment.id}))
return redirect(reverse('yamoney_confirm', kwargs={'payment_id': payment.pk}))
return redirect(reverse('customer_license_list')) return redirect(reverse('customer_license_list'))
return render(request, template_name, dictionary) return render(request, template_name, {'form': form})
@login_required @login_required
def license_list(request): def license_list(request):
@ -77,11 +96,11 @@ def license_list(request):
raise_if_no_profile(request) raise_if_no_profile(request)
template_name = 'customer/profile/license_list.html' template_name = 'customer/profile/license_list.html'
licenses = License.objects.filter(company=request.user.profile, deleted=False, status__gt=-1).order_by('-id')
dictionary = { # TODO maybe explicitly list license statuses?
'licenses': licenses, licenses = License.objects.filter(company=request.user.profile, status__gt=consts.LICENSE_TEST_PERIOD, deleted=False).order_by('-id')
}
return render(request, template_name, dictionary) return render(request, template_name, {'licenses': licenses})
@login_required @login_required
@ -91,12 +110,20 @@ def paid_list(request):
raise_if_no_profile(request) raise_if_no_profile(request)
template_name = 'customer/profile/paid_list.html' template_name = 'customer/profile/paid_list.html'
licenses = License.objects.filter(company=request.user.profile,
status__in=[-1, 1, 2, 3, 4], deleted=False).order_by('-id') licenses = License.objects.filter(
dictionary = { company=request.user.profile,
'licenses': licenses, status__in = [
} consts.LICENSE_TEST_PERIOD,
return render(request, template_name, dictionary) consts.LICENSE_PAID,
consts.LICENSE_ACTIVE,
consts.LICENSE_EXPIRED,
consts.LICENSE_SUSPENDED,
],
deleted=False
).order_by('-id')
return render(request, template_name, {'licenses': licenses})
@login_required @login_required
@ -107,7 +134,7 @@ def delete_license(request, pk):
raise_if_no_profile(request) raise_if_no_profile(request)
try: try:
license = License.objects.get(pk=pk, status=0, company=request.user.profile) license = License.objects.get(pk=pk, status=consts.LICENSE_UNPAID, company=request.user.profile)
if request.method == 'POST': if request.method == 'POST':
license.deleted = True license.deleted = True
license.save() license.save()
@ -143,19 +170,12 @@ def delete_license(request, pk):
@csrf_exempt @csrf_exempt
def payment_success(request): def payment_success(request):
nInvId = request.GET.get('orderNumber') nInvId = request.GET.get('orderNumber')
order = License.objects.get(pk=nInvId) order = get_object_or_404(License, pk=nInvId)
context = {'success': True, 'order_num': nInvId} context = {'success': True, 'order_num': nInvId}
return TemplateResponse(request, 'customer/profile/end_order.html', context) return TemplateResponse(request, 'customer/profile/end_order.html', context)
@csrf_exempt @csrf_exempt
def payment_fail(request): def payment_fail(request):
try: message = u"Возникла проблема. Ваш Заказ не оплачен. Попробуйте оформить заявку снова, или позвоните по номеру."
nInvId = request.GET.get('') return TemplateResponse(request, 'customer/profile/end_order.html', {'message': message, 'success': False})
message = u"Возникла проблема. Ваш Заказ не оплачен. Попробуйте оформить заявку снова, или позвоните по номеру."
return TemplateResponse(request, 'customer/profile/end_order.html', {'message': message, 'success': False})
except Order.DoesNotExist:
return HttpResponseForbidden()

Loading…
Cancel
Save