From 7bd741594152bb18343c623d23b540dd7b3c9790 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sun, 12 Feb 2017 18:45:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=B0,=20=D0=BE=D1=82=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=B8=20=D0=B8=20=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D1=86=D0=B8=D0=B8=20=D1=83=D1=81=D0=BB=D1=83=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clientsideapp/urls.py | 4 +- clientsideapp/views.py | 102 +++++++++++++++++- .../clientsideapp/modal_activate_service.html | 28 +++++ .../clientsideapp/modal_complete_service.html | 32 ++++++ .../clientsideapp/modal_service_buy.html | 29 +++++ .../modal_unsubscribe_service.html | 26 +++++ templates/clientsideapp/services.html | 39 ++++--- 7 files changed, 243 insertions(+), 17 deletions(-) create mode 100644 templates/clientsideapp/modal_activate_service.html create mode 100644 templates/clientsideapp/modal_complete_service.html create mode 100644 templates/clientsideapp/modal_service_buy.html create mode 100644 templates/clientsideapp/modal_unsubscribe_service.html diff --git a/clientsideapp/urls.py b/clientsideapp/urls.py index 49ee517..434bb73 100644 --- a/clientsideapp/urls.py +++ b/clientsideapp/urls.py @@ -1,6 +1,5 @@ # -*- coding:utf-8 -*- from django.conf.urls import url - from . import views @@ -9,6 +8,9 @@ urlpatterns = [ url(r'^pays$', views.pays, name='pays'), url(r'^services$', views.services, name='services'), url(r'^services/(?P\d+)/buy$', views.buy_service, name='buy_service'), + url(r'^services/(?P\d+)/finish$', views.complete_service, name='complete_service'), + url(r'^services/(?P\d+)/unsubscribe$', views.unsubscribe_service, name='unsubscribe_service'), + url(r'^services/(?P\d+)/activate$', views.activate_service, name='activate_service'), url(r'^debts$', views.debts_list, name='debts'), url(r'^debts/(?P\d+)$', views.debt_buy, name='debt_buy') ] diff --git a/clientsideapp/views.py b/clientsideapp/views.py index 41c0512..63e48bf 100644 --- a/clientsideapp/views.py +++ b/clientsideapp/views.py @@ -1,11 +1,13 @@ # coding=utf-8 from django.contrib.auth.decorators import login_required +from django.contrib.gis.shortcuts import render_to_text from django.shortcuts import render, get_object_or_404, redirect from django.contrib import messages +from django.utils import timezone from abonapp.models import AbonLog, AbonTariff, InvoiceForPayment, Abon, LogicError from tariff_app.models import Tariff -from mydefs import pag_mn +from mydefs import pag_mn, RuTimedelta from agent import NasFailedResult, NasNetworkError @@ -39,10 +41,102 @@ def services(request): @login_required def buy_service(request, srv_id): + abon = get_object_or_404(Abon, id=request.user.pk) service = get_object_or_404(Tariff, id=srv_id) - return render(request, 'clientsideapp/service_buy.html', { - 'service': service - }) + current_service = abon.active_tariff() + if request.method == 'POST': + abon.buy_tariff(service, request.user, 'Покупка тарифного плана через личный кабинет, тариф "%s"' + % service) + messages.success(request, 'Вы подписались на новую услугу. Она встала на очередь подключений. ' + 'Когда закончится ваша текущая услуга, то включится эта') + return redirect('client_side:services') + + return render_to_text('clientsideapp/modal_service_buy.html', { + 'service': service, + 'current_service': current_service + }, request=request) + + +@login_required +def complete_service(request, srv_id): + abtar = get_object_or_404(AbonTariff, id=srv_id) + service = abtar.tariff + + if request.method == 'POST': + # досрочно завершаем услугу + finish_confirm = request.POST.get('finish_confirm') + if finish_confirm == 'yes': + # удаляем запись о текущей услуге. + abtar.delete() + messages.success(request, 'Услуга "%s" успешно завершена' % service.title) + AbonLog.objects.create( + abon=abtar.abon, + amount=0.0, + author=abtar.abon, + comment='Досрочное завершение услуги "%s" из личного кабинета' % service.title + ) + else: + messages.error(request, 'Действие не подтверждено') + return redirect('client_side:services') + + time_use = RuTimedelta(timezone.now() - abtar.time_start) + + return render_to_text('clientsideapp/modal_complete_service.html', { + 'service': service, + 'abtar': abtar, + 'time_use': time_use + }, request=request) + + +@login_required +def unsubscribe_service(request, srv_id): + abtar = get_object_or_404(AbonTariff, id=srv_id) + service = abtar.tariff + try: + if request.method == 'POST': + # досрочно завершаем услугу + if request.POST.get('finish_confirm') == 'yes': + AbonTariff.objects.get(pk=srv_id).delete() + messages.success(request, 'Вы успешно отписались от услуги, "%s"' % service.title) + else: + messages.error(request, 'Действие не подтверждено') + else: + return render_to_text('clientsideapp/modal_unsubscribe_service.html', { + 'abtar': abtar, + 'service': service + }, request=request) + except AbonTariff.DoesNotExist: + messages.error(request, 'Указанная подписка на услугу не найдена') + return redirect('client_side:services') + + +@login_required +def activate_service(request, srv_id): + abtar = get_object_or_404(AbonTariff, id=srv_id) + service = abtar.tariff + amount = abtar.calc_amount_service() + try: + if request.method == 'POST': + # активируем услугу + if request.POST.get('finish_confirm') == 'yes': + abtar.activate(request.user) + messages.success(request, 'Услуга "%s" успешно активирована' % service.title) + else: + messages.error(request, 'Запрос не подтверждён') + return redirect('client_side:services') + except NasFailedResult as e: + messages.error(request, e) + except NasNetworkError as e: + messages.warning(request, e) + except LogicError as e: + messages.error(request, e) + return render_to_text('clientsideapp/modal_activate_service.html', { + 'abtar': abtar, + 'service': service, + 'amount': amount, + 'abon': abtar.abon, + 'diff': abtar.abon.ballance - amount + }, request=request) @login_required diff --git a/templates/clientsideapp/modal_activate_service.html b/templates/clientsideapp/modal_activate_service.html new file mode 100644 index 0000000..227c614 --- /dev/null +++ b/templates/clientsideapp/modal_activate_service.html @@ -0,0 +1,28 @@ +
{% csrf_token %} + + + +
diff --git a/templates/clientsideapp/modal_complete_service.html b/templates/clientsideapp/modal_complete_service.html new file mode 100644 index 0000000..cb4ca76 --- /dev/null +++ b/templates/clientsideapp/modal_complete_service.html @@ -0,0 +1,32 @@ +
{% csrf_token %} + + + +
diff --git a/templates/clientsideapp/modal_service_buy.html b/templates/clientsideapp/modal_service_buy.html new file mode 100644 index 0000000..28284e0 --- /dev/null +++ b/templates/clientsideapp/modal_service_buy.html @@ -0,0 +1,29 @@ +
{% csrf_token %} + + + +
diff --git a/templates/clientsideapp/modal_unsubscribe_service.html b/templates/clientsideapp/modal_unsubscribe_service.html new file mode 100644 index 0000000..4314d19 --- /dev/null +++ b/templates/clientsideapp/modal_unsubscribe_service.html @@ -0,0 +1,26 @@ +
{% csrf_token %} + + + +
diff --git a/templates/clientsideapp/services.html b/templates/clientsideapp/services.html index ba01ddc..1fb16df 100644 --- a/templates/clientsideapp/services.html +++ b/templates/clientsideapp/services.html @@ -20,17 +20,31 @@ {% for abon_tariff in own_abon_tariffs %}
  • - - - - - - + {% if abon_tariff == current_service %} + + + + {% else %} + {% if not current_service %} + + + + {% endif %} + + + + {% endif %}
    {{ abon_tariff.tariff.amount }} - {% if abon_tariff.is_started %}{{ abon_tariff.tariff.title }} - {% else %}{{ abon_tariff.tariff.title }}{% endif %} + {% if abon_tariff.is_started %} + {{ abon_tariff.tariff.title }} + {% else %} + {{ abon_tariff.tariff.title }} + {% endif %}
  • {% empty %} @@ -53,8 +67,11 @@ Исходящая скорость: {{ tarif.speedOut }} MBit/s
    Стоимость: {{ tarif.amount }} руб.

    - - + {% if request.user.is_staff %} + + {% else %} + + {% endif %} Заказать @@ -66,8 +83,6 @@ - -