Browse Source

добавил функционал для кнопок заказа, отписки и активации услуг

devel
Dmitry 9 years ago
parent
commit
7bd7415941
  1. 4
      clientsideapp/urls.py
  2. 102
      clientsideapp/views.py
  3. 28
      templates/clientsideapp/modal_activate_service.html
  4. 32
      templates/clientsideapp/modal_complete_service.html
  5. 29
      templates/clientsideapp/modal_service_buy.html
  6. 26
      templates/clientsideapp/modal_unsubscribe_service.html
  7. 39
      templates/clientsideapp/services.html

4
clientsideapp/urls.py

@ -1,6 +1,5 @@
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
from django.conf.urls import url from django.conf.urls import url
from . import views from . import views
@ -9,6 +8,9 @@ urlpatterns = [
url(r'^pays$', views.pays, name='pays'), url(r'^pays$', views.pays, name='pays'),
url(r'^services$', views.services, name='services'), url(r'^services$', views.services, name='services'),
url(r'^services/(?P<srv_id>\d+)/buy$', views.buy_service, name='buy_service'), url(r'^services/(?P<srv_id>\d+)/buy$', views.buy_service, name='buy_service'),
url(r'^services/(?P<srv_id>\d+)/finish$', views.complete_service, name='complete_service'),
url(r'^services/(?P<srv_id>\d+)/unsubscribe$', views.unsubscribe_service, name='unsubscribe_service'),
url(r'^services/(?P<srv_id>\d+)/activate$', views.activate_service, name='activate_service'),
url(r'^debts$', views.debts_list, name='debts'), url(r'^debts$', views.debts_list, name='debts'),
url(r'^debts/(?P<d_id>\d+)$', views.debt_buy, name='debt_buy') url(r'^debts/(?P<d_id>\d+)$', views.debt_buy, name='debt_buy')
] ]

102
clientsideapp/views.py

@ -1,11 +1,13 @@
# coding=utf-8 # coding=utf-8
from django.contrib.auth.decorators import login_required 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.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages from django.contrib import messages
from django.utils import timezone
from abonapp.models import AbonLog, AbonTariff, InvoiceForPayment, Abon, LogicError from abonapp.models import AbonLog, AbonTariff, InvoiceForPayment, Abon, LogicError
from tariff_app.models import Tariff from tariff_app.models import Tariff
from mydefs import pag_mn
from mydefs import pag_mn, RuTimedelta
from agent import NasFailedResult, NasNetworkError from agent import NasFailedResult, NasNetworkError
@ -39,10 +41,102 @@ def services(request):
@login_required @login_required
def buy_service(request, srv_id): 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) 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 @login_required

28
templates/clientsideapp/modal_activate_service.html

@ -0,0 +1,28 @@
<form action="{% url 'client_side:activate_service' abtar.pk %}" method="post">{% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-question-sign"></span>Активировать услугу</h4>
</div>
<div class="modal-body">
<h3>Вы уверены что хотите активировать услугу?</h3>
<input type="hidden" name="finish_confirm" value="yes">
<h3>{{ service.title }}</h3>
<p>{{ service.descr }}</p>
<p>Входящая скорость: {{ service.speedIn }} MBit/s<br>
Исходящая скорость: {{ service.speedOut }} MBit/s</p>
<p>Вы уверены что хотите активировать эту услугу?<br>
Обратите внимание что с вашего счёта <b>снимутся деньги</b> и откроется доступ к ресурсам оплаченной
услуги.<br>
Стоимость услуги: {{ amount }}руб. На счету {{ abon.ballance }} руб, останется {{ diff }} руб.</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-sm btn-success">
<span class="glyphicon glyphicon-shopping-cart"></span> Активировать
</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
</div>
</form>

32
templates/clientsideapp/modal_complete_service.html

@ -0,0 +1,32 @@
<form action="{% url 'client_side:complete_service' abtar.pk %}" method="post">{% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-question-sign"></span>Завершить услугу</h4>
</div>
<div class="modal-body">
<h3>Вы уверены что хотите завершить услугу?</h3>
<input type="hidden" name="finish_confirm" value="yes">
<h3>{{ service.title }}</h3>
<p>{{ service.descr }}</p>
<p>Входящая скорость: {{ service.speedIn }} MBit/s<br>
Исходящая скорость: {{ service.speedOut }} MBit/s</p>
<p>Завершение услуги приведёт к прекращению действия услуги. Т.е. интернет отключится.<br>
Деньги за неиспользованные ресурсы возвращены не будут.<br>
Для возобновления обслуживания вы должны купить новую услугу.</p>
Услуга была подключена: {{ abtar.time_start|date:'d F Y, H:i:s' }}<br/>
Сегодня: {% now "d F Y, H:i:s" %}<br/>
Время использования: {{ time_use }}<br/>
Полная стоимость услуги: {{ service.amount }}<br/>
<b>Итоговая стоимость: {{ abtar.calc_amount_service }}</b>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-alert"></span> Завершить
</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
</div>
</form>

29
templates/clientsideapp/modal_service_buy.html

@ -0,0 +1,29 @@
<form action="{% url 'client_side:buy_service' service.pk %}" method="post">{% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-shopping-cart"></span>Заказать услугу</h4>
</div>
<div class="modal-body">
<h3>Вы уверены что хотите заказать услугу?</h3>
{% if current_service %}
<p>Ваша текущая услуга <a href="#dv">{{ current_service.title }}</a>
за <b>{{ current_service.amount }}</b> руб.</p>
{% else %}
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных ниже.<br>
А если уже заказали то просто активируйте услугу из списка заказанных.</p>
{% endif %}
<h3>{{ service.title }}</h3>
<p>{{ service.descr }}</p>
<p>Входящая скорость: {{ service.speedIn }} MBit/s<br>
Исходящая скорость: {{ service.speedOut }} MBit/s<br>
Стоимость: {{ service.amount }} руб.</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-sm btn-primary">
<span class="glyphicon glyphicon-save"></span> Сохранить
</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
</div>
</form>

26
templates/clientsideapp/modal_unsubscribe_service.html

@ -0,0 +1,26 @@
<form action="{% url 'client_side:unsubscribe_service' abtar.pk %}" method="post">{% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-question-sign"></span>Отписаться от услуги</h4>
</div>
<div class="modal-body">
<h3>Вы уверены что хотите отписаться от услуги?</h3>
<input type="hidden" name="finish_confirm" value="yes">
<h3>{{ service.title }}</h3>
<p>{{ service.descr }}</p>
<p>Входящая скорость: {{ service.speedIn }} MBit/s<br>
Исходящая скорость: {{ service.speedOut }} MBit/s</p>
<p>Когда вы отпишитесь от услуги, это просто уберёт её из очереди включений ваших услуг.<br>
Ваши средства не буду затронуты, деньги не уйдут.</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-sm btn-primary">
<span class="glyphicon glyphicon-alert"></span> Отписаться
</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
</div>
</form>

39
templates/clientsideapp/services.html

@ -20,17 +20,31 @@
{% for abon_tariff in own_abon_tariffs %} {% for abon_tariff in own_abon_tariffs %}
<li class="list-group-item"> <li class="list-group-item">
<div class="btn-group"> <div class="btn-group">
<a href="#sdf" class="btn btn-xs btn-success disabled" title="Активировать">
<span class="glyphicon glyphicon-fire"></span>
</a>
<a href="#del" class="btn btn-xs btn-danger disabled" title="Удалить услугу из списка">
<span class="glyphicon glyphicon-remove"></span>
</a>
{% if abon_tariff == current_service %}
<a href="{% url 'client_side:complete_service' abon_tariff.pk %}"
class="btn btn-xs btn-danger btn-modal" title="Завершить услугу досрочно">
<span class="glyphicon glyphicon-remove"></span>
</a>
{% else %}
{% if not current_service %}
<a href="{% url 'client_side:activate_service' abon_tariff.pk %}"
class="btn btn-xs btn-success btn-modal" title="Активировать">
<span class="glyphicon glyphicon-fire"></span>
</a>
{% endif %}
<a href="{% url 'client_side:unsubscribe_service' abon_tariff.pk %}"
class="btn btn-xs btn-danger btn-modal" title="Удалить услугу из списка">
<span class="glyphicon glyphicon-remove"></span>
</a>
{% endif %}
</div> </div>
<span class="badge">{{ abon_tariff.tariff.amount }}</span> <span class="badge">{{ abon_tariff.tariff.amount }}</span>
<a href="#sdv"> <a href="#sdv">
{% if abon_tariff.is_started %}<b>{{ abon_tariff.tariff.title }}</b>
{% else %}{{ abon_tariff.tariff.title }}{% endif %}
{% if abon_tariff.is_started %}
<b>{{ abon_tariff.tariff.title }}</b>
{% else %}
{{ abon_tariff.tariff.title }}
{% endif %}
</a> </a>
</li> </li>
{% empty %} {% empty %}
@ -53,8 +67,11 @@
Исходящая скорость: {{ tarif.speedOut }} MBit/s<br> Исходящая скорость: {{ tarif.speedOut }} MBit/s<br>
Стоимость: {{ tarif.amount }} руб.</p> Стоимость: {{ tarif.amount }} руб.</p>
<!-- { % url 'client_side:buy_service' tarif.id % } -->
<a href="#" class="btn btn-primary disabled">
{% if request.user.is_staff %}
<a href="#" class="btn btn-primary disabled">
{% else %}
<a href="{% url 'client_side:buy_service' tarif.id %}" class="btn btn-primary btn-modal">
{% endif %}
<span class="glyphicon glyphicon-shopping-cart"></span> Заказать <span class="glyphicon glyphicon-shopping-cart"></span> Заказать
</a> </a>
</div> </div>
@ -66,8 +83,6 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
Loading…
Cancel
Save