Browse Source

Теперь можно выбирать дату окончания услуги при активации первой услуги

devel
bashmak 9 years ago
parent
commit
0071a5eb2c
  1. 10
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 12
      abonapp/models.py
  3. 32
      abonapp/templates/abonapp/buy_tariff.html
  4. 8
      abonapp/templates/abonapp/services.html
  5. 10
      abonapp/views.py
  6. 5
      tariff_app/models.py

10
abonapp/locale/ru/LC_MESSAGES/django.po

@ -515,10 +515,6 @@ msgstr "Входящая скорость"
msgid "Output speed"
msgstr "Исходящая скорость"
#: abonapp/templates/abonapp/services.html:15
msgid "Edit"
msgstr "Ред."
#: abonapp/templates/abonapp/services.html:52
msgid "Priority up"
msgstr "Повысить приоритет"
@ -745,3 +741,9 @@ msgstr "Устройство успешно прикреплено"
msgid "Device has successfully unattached"
msgstr "Устройство успешно откреплено"
msgid "Works until"
msgstr "Действует до"
msgid "Do"
msgstr "Действия"

12
abonapp/models.py

@ -112,7 +112,7 @@ class AbonTariff(models.Model):
return round(amount, 2)
# Активируем тариф
def activate(self, current_user):
def activate(self, current_user, deadline=None):
calc_obj = self.tariff.get_calc_type()(self)
amnt = self.tariff.amount
# если не хватает денег
@ -121,7 +121,10 @@ class AbonTariff(models.Model):
# считаем дату активации услуги
self.time_start = timezone.now()
# считаем дату завершения услуги
self.deadline = calc_obj.calc_deadline()
if deadline is None:
self.deadline = calc_obj.calc_deadline()
else:
self.deadline = deadline
# снимаем деньги за услугу
self.abon.make_pay(current_user, amnt)
self.save()
@ -225,7 +228,6 @@ class Abon(UserProfile):
return ats[0].tariff
else:
self._act_tar_cache = None
return
class Meta:
db_table = 'abonent'
@ -250,7 +252,7 @@ class Abon(UserProfile):
self.ballance += amount
# покупаем тариф
def pick_tariff(self, tariff, author, comment=None):
def pick_tariff(self, tariff, author, comment=None, deadline=None):
assert isinstance(tariff, Tariff)
# выбераем связь ТарифАбонент с самым низким приоритетом
@ -267,7 +269,7 @@ class Abon(UserProfile):
# Если это первая услуга в списке (фильтр по приоритету ничего не вернул)
if not abtrf:
# значит пробуем её активировать
new_abtar.activate(author)
new_abtar.activate(author, deadline)
else:
new_abtar.save()

32
abonapp/templates/abonapp/buy_tariff.html

@ -5,8 +5,8 @@
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'abonapp:group_list' %}">{% trans 'User groups' %}</a></li>
<li><a href="{% url 'abonapp:people_list' abon_group.id %}">{{ abon_group.title }}</a></li>
<li><a href="{% url 'abonapp:abon_home' abon_group.id abon.id %}">{{ abon.fio }}</a></li>
<li><a href="{% url 'abonapp:people_list' abon_group.pk %}">{{ abon_group.title }}</a></li>
<li><a href="{% url 'abonapp:abon_home' abon_group.pk abon.pk %}">{{ abon.fio }}</a></li>
<li class="active">{% trans 'Pick a service' %}</li>
</ol>
@ -15,23 +15,43 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Pick a service for' %}
<a href="{% url 'abonapp:abon_home' abon_group.id abon.id %}"><u>{% trans 'Sub' %}</u></a>
<a href="{% url 'abonapp:abon_home' abon_group.pk abon.pk %}"><u>{% trans 'Sub' %}</u></a>
</h3>
</div>
<div class="panel-body">
<form role="form" action="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}"
<form role="form" action="{% url 'abonapp:pick_tariff' abon_group.pk abon.pk %}"
method="post">{% csrf_token %}
<div class="form-group">
<label for="id_tariff">{% trans 'Pick a service' %}</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-bullhorn"></span></span>
<select class="form-control" name="tariff">
<select class="form-control" name="tariff" id="id_tariffs">
{% for trf in tariffs %}
<option value="{{ trf.pk }}">{{ trf.title }}. {{ trf.amount }}{% trans 'currency' %}</option>
<option value="{{ trf.pk }}" data-deadline="{{ trf.calc_deadline|date:"Y-m-d" }}">
{{ trf.title }}. {{ trf.amount }}{% trans 'currency' %}
</option>
{% endfor %}
</select>
</div>
{% if not abon.active_tariff %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
<input type="text" class="form-control" name="deadline" id="id_deadline" value="{{ tariffs.0.calc_deadline|date:"Y-m-d" }}">
<script type="text/javascript" src="/static/js/datetime_with_moment.min.js"></script>
<script type="text/javascript">
$(function () {
$('#id_deadline').datetimepicker({
format: 'YYYY-MM-DD'
});
$('#id_tariffs').on('change', function(){
var a = $(this).find('option:selected');
$('#id_deadline').val(a.attr('data-deadline'));
});
});
</script>
</div>
{% endif %}
</div>
<div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary">

8
abonapp/templates/abonapp/services.html

@ -11,7 +11,8 @@
<th>{% trans 'Sum' %}</th>
<th>{% trans 'Input speed' %}</th>
<th>{% trans 'Output speed' %}</th>
<th>{% trans 'Edit' %}</th>
<th>{% trans 'Works until' %}</th>
<th>{% trans 'Do' %}</th>
</tr>
</thead>
@ -33,6 +34,7 @@
<td>{{ trf.tariff.amount }}</td>
<td>{{ trf.tariff.speedIn }}</td>
<td>{{ trf.tariff.speedOut }}</td>
<td>{{ trf.deadline|date:"d E Y, l" }}</td>
{% if trf.id != active_abontariff_id %}
<td class="btn-group">
@ -74,7 +76,7 @@
</tr>
{% empty %}
<tr>
<td colspan="6">{% trans 'Services of subscribers not found' %}.
<td colspan="7">{% trans 'Services of subscribers not found' %}.
{% if perms.abonapp.can_buy_tariff %}
<a href="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}" class="lgtbx">{% trans 'Buy' %}</a>
{% endif %}
@ -85,7 +87,7 @@
{% if perms.abonapp.can_buy_tariff %}
<tfoot>
<tr>
<th colspan="6">
<th colspan="7">
<a href="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}" class="btn btn-sm btn-success">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Buy service' %}
</a>

10
abonapp/views.py

@ -18,6 +18,7 @@ from . import models
from ip_pool.models import IpPoolItem
import mydefs
from devapp.models import Device
from datetime import datetime
@login_required
@ -397,7 +398,12 @@ def pick_tariff(request, gid, uid):
try:
if request.method == 'POST':
trf = Tariff.objects.get(pk=request.POST.get('tariff'))
abon.pick_tariff(trf, request.user)
deadline = request.POST.get('deadline')
if deadline == '' or deadline is None:
abon.pick_tariff(trf, request.user)
else:
deadline = datetime.strptime(deadline, '%Y-%m-%d')
abon.pick_tariff(trf, request.user, deadline=deadline)
messages.success(request, _('Tariff has been picked'))
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
except (models.LogicError, NasFailedResult) as e:
@ -410,6 +416,8 @@ def pick_tariff(request, gid, uid):
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err)
except ValueError as e:
messages.error(request, "%s: %s" % (_('fix form errors'), e))
return render(request, 'abonapp/buy_tariff.html', {
'tariffs': tariffs,

5
tariff_app/models.py

@ -30,5 +30,10 @@ class Tariff(models.Model):
assert issubclass(res_type, TariffBase)
return res_type
def calc_deadline(self):
calc_type = self.get_calc_type()
calc_obj = calc_type(self)
return calc_obj.calc_deadline()
def __str__(self):
return "%s (%.2f)" % (self.title, self.amount)
Loading…
Cancel
Save