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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
-
-