", db="db", charset='utf8')
+ db = MySQLdb.connect(host="127.0.0.1", user="user", passwd="password", db="db", charset='utf8')
cursor = db.cursor()
result = dict()
- result['groups'] = load_groups(cursor=cursor)
+ result = load_groups(cursor=cursor)
db.close()
f = open('dump.json', 'w')
f.write(dumps(result, ensure_ascii=False))
diff --git a/djing/utils/save_from_nodeny.py b/djing/utils/save_from_nodeny.py
index a1f1acd..060a43e 100755
--- a/djing/utils/save_from_nodeny.py
+++ b/djing/utils/save_from_nodeny.py
@@ -4,13 +4,53 @@
import os
from json import load
import django
+from django.utils import timezone
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
django.setup()
-from abonapp.models import Abon, AbonGroup, AbonRawPassword, AbonStreet
+from abonapp.models import Abon, AbonGroup, AbonRawPassword, AbonStreet, AbonTariff
from ip_pool.models import IpPoolItem
+from tariff_app.models import Tariff
+class DumpService(object):
+ price = 0.0
+ speedIn = 0.0
+ speedOut = 0.0
+
+ def __init__(self, obj=None):
+ if obj is None: return
+ self.title = obj['title']
+ self.price = obj['price']
+ self.description = obj['description']
+ self.speedIn = int(obj['param']['speed_in1']) / 1000000
+ self.speedOut = int(obj['param']['speed_out1']) / 1000000
+
+ @staticmethod
+ def build_from_db(obj):
+ self = DumpService()
+ self.title = obj.title
+ self.price = obj.amount
+ self.description = obj.descr
+ self.speedIn = obj.speedIn
+ self.speedOut = obj.speedOut
+ return self
+
+ def __eq__(self, other):
+ assert isinstance(other, DumpService)
+ print('DBG:', type(other.price), other.price, type(self.price), self.price)
+ r = self.price == other.price
+ r = r and self.speedIn == other.speedIn
+ r = r and self.speedOut == other.speedOut
+ return r
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __str__(self):
+ return "%s; '%.2f', %f %f" % (self.title, self.price, self.speedIn, self.speedOut)
+
+
class DumpAbon(object):
def __init__(self, obj=None):
@@ -22,9 +62,13 @@ class DumpAbon(object):
self.house = obj['house']
self.birth = obj['birth']
self.grp = obj['grp']
- self.ip = obj['ip']
+ self.ip = obj['ip'] if obj['ip'] != '' else None
self.balance = obj['balance']
self.passw = obj['passw']
+ if obj['service'] is not None:
+ self.service = DumpService(obj['service'])
+ else:
+ self.service = None
@staticmethod
def build_from_django(obj):
@@ -36,14 +80,25 @@ class DumpAbon(object):
self.street = obj.street
self.house = obj.house
self.birth = obj.birth_day
- self.grp = obj.group.pk
- self.ip = obj.ip_address
+ if obj.group is None:
+ self.grp = None
+ else:
+ self.grp = obj.group.pk
+ if obj.ip_address is None:
+ self.ip = None
+ else:
+ self.ip = obj.ip_address
self.balance = obj.ballance
try:
raw_passw = AbonRawPassword.objects.get(account=obj)
except AbonRawPassword.DoesNotExist:
raw_passw = ''
self.passw = raw_passw
+ srv = obj.active_tariff()
+ if srv is not None:
+ self.service = DumpService.build_from_db(srv)
+ else:
+ self.service = None
return self
def __eq__(self, other):
@@ -64,7 +119,25 @@ class DumpAbon(object):
return not self.__eq__(other)
+def add_service_if_not_exist(service):
+ assert isinstance(service, DumpService)
+ try:
+ obj = Tariff.objects.get(speedIn=service.speedIn, speedOut=service.speedOut, amount=service.price)
+ except Tariff.DoesNotExist:
+ obj = Tariff.objects.create(
+ title=service.title,
+ descr=service.description,
+ speedIn=service.speedIn,
+ speedOut=service.speedOut,
+ amount=service.price,
+ calc_type='Dp'
+ )
+ return obj
+
+
def load_users(obj, group):
+ if len(obj) < 1:
+ return
for usr in obj:
# абонент из дампа
dump_abon = DumpAbon(usr)
@@ -77,7 +150,22 @@ def load_users(obj, group):
update_user(abon, dump_abon, group)
except Abon.DoesNotExist:
# добавляем абонента
- add_user(dump_abon, group)
+ abon = add_user(dump_abon, group)
+
+ abon_service_from_dump = dump_abon.service
+ if abon_service_from_dump is None:
+ continue
+ abon_service = add_service_if_not_exist(abon_service_from_dump)
+ try:
+ AbonTariff.objects.get(abon=abon, tariff=abon_service)
+ except AbonTariff.DoesNotExist:
+ calc_obj = abon_service.get_calc_type()(abon_service)
+ AbonTariff.objects.create(
+ abon=abon,
+ tariff=abon_service,
+ time_start=timezone.now(),
+ deadline=calc_obj.calc_deadline()
+ )
def add_user(obj, user_group):
@@ -85,14 +173,16 @@ def add_user(obj, user_group):
street = None
ip = None
try:
- ip = IpPoolItem.objects.get(ip=obj.ip)
- street = AbonStreet.objects.get(name=obj.street)
+ if obj.ip is not None:
+ ip = IpPoolItem.objects.get(ip=obj.ip)
+ street = AbonStreet.objects.get(name=obj.street, group=user_group)
except IpPoolItem.DoesNotExist:
- ip = IpPoolItem.objects.create(ip=obj.ip)
+ if obj.ip is not None:
+ ip = IpPoolItem.objects.create(ip=obj.ip)
except AbonStreet.DoesNotExist:
street = AbonStreet.objects.create(name=obj.street, group=user_group)
- Abon.objects.create(
+ return Abon.objects.create(
username=obj.name,
fio=obj.fio,
telephone=obj.tel,
@@ -111,10 +201,11 @@ def update_user(db_abon, obj, user_group):
street = None
ip = None
try:
- ip = IpPoolItem.objects.get(ip=obj.ip)
+ if obj.ip is not None:
+ ip = IpPoolItem.objects.get(ip=obj.ip)
street = AbonStreet.objects.get(name=obj.street, group=user_group)
except IpPoolItem.DoesNotExist:
- if obj.ip:
+ if obj.ip is not None:
ip = IpPoolItem.objects.create(ip=obj.ip)
except AbonStreet.DoesNotExist:
street = AbonStreet.objects.create(name=obj.street, group=user_group)
@@ -129,13 +220,12 @@ def update_user(db_abon, obj, user_group):
db_abon.save()
-
if __name__ == "__main__":
with open('dump.json', 'r') as f:
dat = load(f)
- for grp in dat['groups']:
+ for grp in dat:
try:
abgrp=AbonGroup.objects.get(title=grp['gname'])
except AbonGroup.DoesNotExist:
diff --git a/mydefs.py b/mydefs.py
index 51e7256..5dd7ff6 100644
--- a/mydefs.py
+++ b/mydefs.py
@@ -197,3 +197,11 @@ def require_ssl(view):
return HttpResponseRedirect(target_url)
return view(request, *args, **kwargs)
return wrapper
+
+
+class MultipleException(Exception):
+
+ def __init__(self, err_list):
+ if not isinstance(err_list, list):
+ raise TypeError
+ self.err_list = err_list
diff --git a/requirements.txt b/requirements.txt
index c81232b..0c626de 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
Django==1.9
Pillow
-mysqlclient
telepot
-easysnmp
# for testing required xmltodict
xmltodict
+mysqlclient
+easysnmp
diff --git a/tariff_app/templates/tariff_app/tarifs.html b/tariff_app/templates/tariff_app/tarifs.html
index 16006e4..213fead 100644
--- a/tariff_app/templates/tariff_app/tarifs.html
+++ b/tariff_app/templates/tariff_app/tarifs.html
@@ -62,7 +62,7 @@
| {{ tar.speedOut }} |
{{ tar.amount }} руб |
{{ tar.time_of_action }} дней |
- {{ tar.calc_type }} |
+ {{ tar.get_calc_type_display }} |
{% if perms.tariff_app.delete_tariff %}
diff --git a/taskapp/models.py b/taskapp/models.py
index c58530f..649ad70 100644
--- a/taskapp/models.py
+++ b/taskapp/models.py
@@ -6,7 +6,8 @@ from django.conf import settings
from django.utils import timezone
from django.utils.translation import ugettext as _
from abonapp.models import Abon
-from .handle import handle as task_handle
+from .handle import handle as task_handle, TaskException
+from mydefs import MultipleException
TASK_PRIORITIES = (
@@ -117,11 +118,17 @@ def task_handler(sender, instance, **kwargs):
act_type='e',
who=instance.author
)
+ errors = []
for recipient in instance.recipients.all():
- task_handle(
- instance, instance.author,
- recipient, group
- )
+ try:
+ task_handle(
+ instance, instance.author,
+ recipient, group
+ )
+ except TaskException as e:
+ errors.append(e)
+ if len(errors) > 0:
+ raise MultipleException(errors)
#def task_delete(sender, instance, **kwargs):
@@ -134,4 +141,3 @@ def task_handler(sender, instance, **kwargs):
models.signals.post_save.connect(task_handler, sender=Task)
#models.signals.post_delete.connect(task_delete, sender=Task)
-
diff --git a/taskapp/views.py b/taskapp/views.py
index aafbf8d..8200cf5 100644
--- a/taskapp/views.py
+++ b/taskapp/views.py
@@ -6,11 +6,9 @@ from django.contrib import messages
from abonapp.models import Abon
from django.utils.translation import ugettext as _
from datetime import date
-from chatbot.models import TelegramBot
from .models import Task
-from mydefs import pag_mn, only_admins, safe_int
+from mydefs import pag_mn, only_admins, safe_int, MultipleException
from .forms import TaskFrm
-from .handle import TaskException
@login_required
@@ -149,12 +147,11 @@ def task_add_edit(request, task_id=0):
messages.error(request, _('Error in the form fields'))
elif uid:
selected_abon = Abon.objects.get(username=str(uid))
- except TelegramBot.DoesNotExist:
- messages.error(request, _('Employee has not yet signed up for notifications'))
except Abon.DoesNotExist:
messages.warning(request, _("User '%s' does not exist") % str(uid))
- except TaskException as e:
- messages.error(request, e)
+ except MultipleException as errs:
+ for err in errs.err_list:
+ messages.add_message(request, messages.constants.ERROR, err)
return render(request, 'taskapp/add_edit_task.html', {
'form': frm,
@@ -169,8 +166,9 @@ def task_finish(request, task_id):
try:
task = get_object_or_404(Task, id=task_id)
task.finish(request.user)
- except TaskException as e:
- messages.error(request, e)
+ except MultipleException as errs:
+ for err in errs.err_list:
+ messages.add_message(request, messages.constants.ERROR, err)
return redirect('taskapp:home')
@@ -185,6 +183,10 @@ def task_begin(request, task_id):
@login_required
@permission_required('taskapp.can_remind')
def remind(request, task_id):
- task = get_object_or_404(Task, id=task_id)
- task.save(update_fields=['state'])
+ try:
+ task = get_object_or_404(Task, id=task_id)
+ task.save(update_fields=['state'])
+ except MultipleException as errs:
+ for err in errs.err_list:
+ messages.add_message(request, messages.constants.ERROR, err)
return redirect('taskapp:home')
|