From 417cab14ce6d775a4794fc03603a597cedfc45a9 Mon Sep 17 00:00:00 2001
From: bashmak
Date: Wed, 1 Mar 2017 10:52:08 +0300
Subject: [PATCH] fix bug
---
abonapp/migrations/0012_auto_20170227_1718.py | 24 +++++++
abonapp/models.py | 62 ++++++++++---------
.../templates/abonapp/complete_service.html | 14 ++---
abonapp/templates/abonapp/editAbon.html | 23 ++++++-
abonapp/views.py | 21 ++++++-
.../locale/ru/LC_MESSAGES/django.po | 14 ++---
django_messages/signals.py | 0
django_messages/urls.py | 1 -
8 files changed, 111 insertions(+), 48 deletions(-)
create mode 100644 abonapp/migrations/0012_auto_20170227_1718.py
delete mode 100644 django_messages/signals.py
diff --git a/abonapp/migrations/0012_auto_20170227_1718.py b/abonapp/migrations/0012_auto_20170227_1718.py
new file mode 100644
index 0000000..5480ddf
--- /dev/null
+++ b/abonapp/migrations/0012_auto_20170227_1718.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9 on 2017-02-27 14:18
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('abonapp', '0011_auto_20170222_2224'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='extrafieldsmodel',
+ name='account',
+ ),
+ migrations.AddField(
+ model_name='abon',
+ name='extra_fields',
+ field=models.ManyToManyField(to='abonapp.ExtraFieldsModel'),
+ ),
+ ]
diff --git a/abonapp/models.py b/abonapp/models.py
index cd4c7dd..8b2a40a 100644
--- a/abonapp/models.py
+++ b/abonapp/models.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+from django.core.exceptions import ValidationError
from django.utils import timezone
from django.db import models
from django.core import validators
@@ -104,15 +105,13 @@ class AbonTariff(models.Model):
# Считает текущую стоимость услуг согласно выбранной для тарифа логики оплаты (см. в документации)
def calc_amount_service(self):
- calc_obj = self.tariff.get_calc_type()(self)
- # calc_obj - instance of tariff_app.custom_tariffs.TariffBase
- amount = calc_obj.calc_amount()
+ amount = self.tariff.amount
return round(amount, 2)
# Активируем тариф
def activate(self, current_user):
calc_obj = self.tariff.get_calc_type()(self)
- amnt = self.calc_amount_service()
+ amnt = self.tariff.amount
# если не хватает денег
if self.abon.ballance < amnt:
raise LogicError(_('not enough money'))
@@ -156,6 +155,36 @@ class AbonStreet(models.Model):
db_table = 'abon_street'
+class ExtraFieldsModel(models.Model):
+ DYNAMIC_FIELD_TYPES = (
+ ('int', _('Digital field')),
+ ('str', _('Text field')),
+ ('dbl', _('Floating field'))
+ )
+
+ field_type = models.CharField(max_length=3, choices=DYNAMIC_FIELD_TYPES)
+ data = models.CharField(max_length=64, null=True, blank=True)
+
+ def clean(self):
+ d = self.data
+ if self.field_type == 'int':
+ validators.validate_integer(d)
+ elif self.field_type == 'dbl':
+ try:
+ float(d)
+ except ValueError:
+ raise ValidationError(_('Double invalid value'), code='invalid')
+ elif self.field_type == 'str':
+ str_validator = validators.MaxLengthValidator(64)
+ str_validator(d)
+
+ def __str__(self):
+ return "%s: %s" % (self.get_field_type_display(), self.data)
+
+ class Meta:
+ db_table = 'abon_extra_fields'
+
+
class Abon(UserProfile):
current_tariffs = models.ManyToManyField(Tariff, through=AbonTariff)
group = models.ForeignKey(AbonGroup, models.SET_NULL, blank=True, null=True)
@@ -164,6 +193,7 @@ class Abon(UserProfile):
description = models.TextField(null=True, blank=True)
street = models.ForeignKey(AbonStreet, on_delete=models.SET_NULL, null=True, blank=True)
house = models.CharField(max_length=12, null=True, blank=True)
+ extra_fields = models.ManyToManyField(ExtraFieldsModel)
_act_tar_cache = None
@@ -352,30 +382,6 @@ class AbonRawPassword(models.Model):
db_table = 'abon_raw_password'
-class ExtraFieldsModel(models.Model):
- DYNAMIC_FIELD_TYPES = (
- ('int', _('Digital field')),
- ('str', _('Text field')),
- ('dbl', _('Floating field'))
- )
-
- field_type = models.CharField(max_length=3, choices=DYNAMIC_FIELD_TYPES)
- account = models.ForeignKey(Abon, on_delete=models.DO_NOTHING)
- data = models.CharField(max_length=64, null=True, blank=True)
-
- def clean(self):
- val = None
- if self.field_type == 'int':
- val = validators.integer_validator
- elif self.field_type == 'dbl':
- val = validators.DecimalValidator(9, 6)
- if val:
- self.validators.append(val)
-
- class Meta:
- db_table = 'abon_extra_fields'
-
-
def abon_post_save(sender, instance, **kwargs):
try:
tm = Transmitter()
diff --git a/abonapp/templates/abonapp/complete_service.html b/abonapp/templates/abonapp/complete_service.html
index 0d30ea5..d0939a2 100644
--- a/abonapp/templates/abonapp/complete_service.html
+++ b/abonapp/templates/abonapp/complete_service.html
@@ -36,20 +36,18 @@ You complete tariff{% endblocktrans %}
{% endif %}
{% now "d F Y, H: i: s" as today %}
- {% blocktrans with time_start=abtar.time_start|date:'d F Y, H: i: s' amount=abtar.tariff.amount tcost=abtar.calc_amount_service %}The service has been connected: {{ time_start }}
-Today: {{ today }}
-Time of use: {{ time_use }}
-The total cost of the service: {{ amount }}
-Total cost: {{ tcost }}{% endblocktrans %}
+ {% blocktrans with time_start=abtar.time_start|date:'d F Y, H: i: s' amount=abtar.tariff.amount %}The service has been connected: {{ time_start }}
+Today: {{ today }}
+Time of use: {{ time_use }}
+The total cost of the service: {{ amount }}
+Total cost: {{ tcost }}
+Cashback: {{ cashback }}{% endblocktrans %}
-
diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html
index 1c3ae50..ace9565 100644
--- a/abonapp/templates/abonapp/editAbon.html
+++ b/abonapp/templates/abonapp/editAbon.html
@@ -9,7 +9,7 @@
{% trans 'Change subscriber' %}
+
+
+
+
Доп поля
+
+
+
diff --git a/abonapp/views.py b/abonapp/views.py
index 3f59699..129f470 100644
--- a/abonapp/views.py
+++ b/abonapp/views.py
@@ -385,6 +385,12 @@ def chpriority(request, gid, uid):
@permission_required('abonapp.can_complete_service')
def complete_service(request, gid, uid, srvid):
abtar = get_object_or_404(models.AbonTariff, id=srvid)
+ abon = abtar.abon
+ # считаем не использованные ресурсы
+ calc_obj = abtar.tariff.get_calc_type()(abtar)
+ # получаем сколько использовано
+ res_amount = calc_obj.calc_amount()
+ cashback = abtar.tariff.amount - res_amount
if int(abtar.abon.pk) != int(uid) or int(abtar.abon.group.pk) != int(gid):
# если что-то написали в урле вручную, то вернём на путь истинный
@@ -394,6 +400,15 @@ def complete_service(request, gid, uid, srvid):
if request.method == 'POST':
# досрочно завершаем услугу
if request.POST.get('finish_confirm') == 'yes':
+ if cashback > 0.5:
+ # возвращаем деньги, которые абонент не использовал
+ abon.add_ballance(
+ request.user,
+ cashback,
+ _('Refunds for unused resources')
+ )
+ abon.save(update_fields=['ballance'])
+
# удаляем запись о текущей услуге.
abtar.delete()
messages.success(request, _('Service has been finished successfully'))
@@ -413,9 +428,11 @@ def complete_service(request, gid, uid, srvid):
return render(request, 'abonapp/complete_service.html', {
'abtar': abtar,
- 'abon': abtar.abon,
+ 'abon': abon,
'time_use': time_use,
- 'abon_group': get_object_or_404(models.AbonGroup, id=gid)
+ 'abon_group': get_object_or_404(models.AbonGroup, id=gid),
+ 'tcost': round(res_amount, 4),
+ 'cashback': round(cashback, 4)
})
diff --git a/django_messages/locale/ru/LC_MESSAGES/django.po b/django_messages/locale/ru/LC_MESSAGES/django.po
index a9460fc..e1f590c 100644
--- a/django_messages/locale/ru/LC_MESSAGES/django.po
+++ b/django_messages/locale/ru/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-02-20 17:32+0300\n"
+"POT-Creation-Date: 2017-02-28 12:46+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Dmitry Novikov nerosketch@gmail.com\n"
"Language: ru\n"
@@ -322,11 +322,11 @@ msgstr "Сообщение успешно удалено."
msgid "Message successfully recovered."
msgstr "Сообщение успешно восстановлено."
-msgid "The following usernames are incorrect: %(users)s"
-msgstr "Некорректные имена пользователей: %(users)s"
+#~ msgid "The following usernames are incorrect: %(users)s"
+#~ msgstr "Некорректные имена пользователей: %(users)s"
-msgid "New Message"
-msgstr "Новое сообщение"
+#~ msgid "New Message"
+#~ msgstr "Новое сообщение"
-msgid "Trash"
-msgstr "Удалённые"
+#~ msgid "Trash"
+#~ msgstr "Удалённые"
diff --git a/django_messages/signals.py b/django_messages/signals.py
deleted file mode 100644
index e69de29..0000000
diff --git a/django_messages/urls.py b/django_messages/urls.py
index f08522e..b736988 100644
--- a/django_messages/urls.py
+++ b/django_messages/urls.py
@@ -1,5 +1,4 @@
from django.conf.urls import url
-from django.views.generic import RedirectView
from django_messages.views import *