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

12
abonapp/models.py

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

32
abonapp/templates/abonapp/buy_tariff.html

@ -5,8 +5,8 @@
<ol class="breadcrumb"> <ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li> <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: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> <li class="active">{% trans 'Pick a service' %}</li>
</ol> </ol>
@ -15,23 +15,43 @@
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">{% trans 'Pick a service for' %} <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> </h3>
</div> </div>
<div class="panel-body"> <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 %} method="post">{% csrf_token %}
<div class="form-group"> <div class="form-group">
<label for="id_tariff">{% trans 'Pick a service' %}</label> <label for="id_tariff">{% trans 'Pick a service' %}</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-bullhorn"></span></span> <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 %} {% 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 %} {% endfor %}
</select> </select>
</div> </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>
<div class="btn-group"> <div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary"> <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 'Sum' %}</th>
<th>{% trans 'Input speed' %}</th> <th>{% trans 'Input speed' %}</th>
<th>{% trans 'Output speed' %}</th> <th>{% trans 'Output speed' %}</th>
<th>{% trans 'Edit' %}</th>
<th>{% trans 'Works until' %}</th>
<th>{% trans 'Do' %}</th>
</tr> </tr>
</thead> </thead>
@ -33,6 +34,7 @@
<td>{{ trf.tariff.amount }}</td> <td>{{ trf.tariff.amount }}</td>
<td>{{ trf.tariff.speedIn }}</td> <td>{{ trf.tariff.speedIn }}</td>
<td>{{ trf.tariff.speedOut }}</td> <td>{{ trf.tariff.speedOut }}</td>
<td>{{ trf.deadline|date:"d E Y, l" }}</td>
{% if trf.id != active_abontariff_id %} {% if trf.id != active_abontariff_id %}
<td class="btn-group"> <td class="btn-group">
@ -74,7 +76,7 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <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 %} {% if perms.abonapp.can_buy_tariff %}
<a href="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}" class="lgtbx">{% trans 'Buy' %}</a> <a href="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}" class="lgtbx">{% trans 'Buy' %}</a>
{% endif %} {% endif %}
@ -85,7 +87,7 @@
{% if perms.abonapp.can_buy_tariff %} {% if perms.abonapp.can_buy_tariff %}
<tfoot> <tfoot>
<tr> <tr>
<th colspan="6">
<th colspan="7">
<a href="{% url 'abonapp:pick_tariff' abon_group.id abon.id %}" class="btn btn-sm btn-success"> <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' %} <span class="glyphicon glyphicon-plus"></span> {% trans 'Buy service' %}
</a> </a>

10
abonapp/views.py

@ -18,6 +18,7 @@ from . import models
from ip_pool.models import IpPoolItem from ip_pool.models import IpPoolItem
import mydefs import mydefs
from devapp.models import Device from devapp.models import Device
from datetime import datetime
@login_required @login_required
@ -397,7 +398,12 @@ def pick_tariff(request, gid, uid):
try: try:
if request.method == 'POST': if request.method == 'POST':
trf = Tariff.objects.get(pk=request.POST.get('tariff')) 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')) messages.success(request, _('Tariff has been picked'))
return redirect('abonapp:abon_services', gid=gid, uid=abon.id) return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
except (models.LogicError, NasFailedResult) as e: except (models.LogicError, NasFailedResult) as e:
@ -410,6 +416,8 @@ def pick_tariff(request, gid, uid):
except mydefs.MultipleException as errs: except mydefs.MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err) 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', { return render(request, 'abonapp/buy_tariff.html', {
'tariffs': tariffs, 'tariffs': tariffs,

5
tariff_app/models.py

@ -30,5 +30,10 @@ class Tariff(models.Model):
assert issubclass(res_type, TariffBase) assert issubclass(res_type, TariffBase)
return res_type 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): def __str__(self):
return "%s (%.2f)" % (self.title, self.amount) return "%s (%.2f)" % (self.title, self.amount)
Loading…
Cancel
Save