From 1e54e2d7bcc413dbc9af15e15b56e37dd216d6ba Mon Sep 17 00:00:00 2001 From: bashmak Date: Sat, 15 Apr 2017 15:05:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D1=8F=D0=B7=D0=BA=D1=83=20=D1=83=D1=81?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0=20=D0=BA=20=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abonapp/locale/ru/LC_MESSAGES/django.po | 24 ++++++++++ abonapp/models.py | 20 +++++++-- abonapp/templates/abonapp/editAbon.html | 17 +++++++ abonapp/templates/abonapp/modal_dev.html | 37 +++++++++++++++ abonapp/urls_abon.py | 3 ++ abonapp/views.py | 57 +++++++++++++++++++++++- 6 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 abonapp/templates/abonapp/modal_dev.html diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index b8ec190..9ff16db 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -732,3 +732,27 @@ msgstr "Для абонента не найдены паспортные дан msgid "currency" msgstr "руб" + +msgid "Coupling" +msgstr "Муфта" + +msgid "User device was not found" +msgstr "Пользовательское устройство не найдено" + +msgid "Add clutch" +msgstr "Добавить муфту" + +msgid "Remove clutch" +msgstr "Удалить муфту" + +msgid "Select a device" +msgstr "Выберите устройство" + +msgid "Device your selected already does not exist" +msgstr "Устройство, выбранное вами, уже не существует" + +msgid "Device has successfully attached" +msgstr "Устройство успешно прикреплено" + +msgid "Device has successfully unattached" +msgstr "Устройство успешно откреплено" diff --git a/abonapp/models.py b/abonapp/models.py index 011acf2..0c97d52 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -335,6 +335,18 @@ class Abon(UserProfile): return AbonStruct(self.pk, user_ip, agent_trf, bool(self.is_active)) +class AbonDevice(models.Model): + abon = models.OneToOneField(Abon) + device = models.OneToOneField('devapp.Device') + + def __str__(self): + return "%s - %s" % (self.abon, self.device) + + class Meta: + db_table = 'abon_device' + unique_together = (('abon', 'device'),) + + class PassportInfo(models.Model): series = models.CharField(max_length=4, validators=[validators.integer_validator]) number = models.CharField(max_length=6, validators=[validators.integer_validator]) @@ -476,8 +488,8 @@ def abontariff_del_signal(sender, instance, **kwargs): return True -models.signals.post_save.connect(abon_post_save, sender=Abon) -models.signals.post_delete.connect(abon_del_signal, sender=Abon) +#models.signals.post_save.connect(abon_post_save, sender=Abon) +#models.signals.post_delete.connect(abon_del_signal, sender=Abon) -models.signals.post_save.connect(abontariff_post_save, sender=AbonTariff) -models.signals.post_delete.connect(abontariff_del_signal, sender=AbonTariff) +#models.signals.post_save.connect(abontariff_post_save, sender=AbonTariff) +#models.signals.post_delete.connect(abontariff_del_signal, sender=AbonTariff) diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html index f4762cc..4af587f 100644 --- a/abonapp/templates/abonapp/editAbon.html +++ b/abonapp/templates/abonapp/editAbon.html @@ -106,6 +106,23 @@ +
+ +
+ diff --git a/abonapp/templates/abonapp/modal_dev.html b/abonapp/templates/abonapp/modal_dev.html new file mode 100644 index 0000000..4e67bbd --- /dev/null +++ b/abonapp/templates/abonapp/modal_dev.html @@ -0,0 +1,37 @@ +{% load i18n %} + +
{% csrf_token %} + + + {% include 'message_block.html' %} + + + +
diff --git a/abonapp/urls_abon.py b/abonapp/urls_abon.py index 99ac453..17330fc 100644 --- a/abonapp/urls_abon.py +++ b/abonapp/urls_abon.py @@ -24,5 +24,8 @@ urlpatterns = [ url(r'^(?P\d+)/unsubscribe_service(?P\d+)$', views.unsubscribe_service, name='unsubscribe_service'), + url(r'^(?P\d+)/dev/$', views.dev, name='dev'), + url(r'^(?P\d+)/clear_dev/$', views.clear_dev, name='clear_dev'), + url(r'^(?P\d+)/task_log$', views.task_log, name='task_log') ] diff --git a/abonapp/views.py b/abonapp/views.py index 69c3dcf..6e85a43 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -17,6 +17,7 @@ from . import forms from . import models from ip_pool.models import IpPoolItem import mydefs +from devapp.models import Device @login_required @@ -245,7 +246,9 @@ def abon_services(request, gid, uid): def abonhome(request, gid, uid): abon = get_object_or_404(models.Abon, pk=uid) abon_group = get_object_or_404(models.AbonGroup, pk=gid) - frm, passw = None, None + frm = None + passw = None + abon_device = None try: if request.method == 'POST': if not request.user.has_perm('abonapp.change_abon'): @@ -272,6 +275,7 @@ def abonhome(request, gid, uid): else: passw = models.AbonRawPassword.objects.get(account=abon).passw_text frm = forms.AbonForm(instance=abon, initial={'password': passw}) + abon_device = models.AbonDevice.objects.get(abon=abon) except IntegrityError as e: messages.error(request, _('Ip address already exist. %s') % e) frm = forms.AbonForm(instance=abon, initial={'password': passw}) @@ -282,6 +286,8 @@ def abonhome(request, gid, uid): messages.error(request, _('Ip address not found')) except models.AbonRawPassword.DoesNotExist: messages.warning(request, _('User has not have password, and cannot login')) + except models.AbonDevice.DoesNotExist: + messages.warning(request, _('User device was not found')) except mydefs.MultipleException as errs: for err in errs.err_list: messages.add_message(request, messages.constants.ERROR, err) @@ -292,7 +298,8 @@ def abonhome(request, gid, uid): 'abon': abon, 'abon_group': abon_group, 'ip': abon.ip_address, - 'tech_form': forms.Opt82Form(instance=abon.opt82) + 'tech_form': forms.Opt82Form(instance=abon.opt82), + 'device': abon_device.device if abon_device is not None else None }) else: return render(request, 'abonapp/viewAbon.html', { @@ -644,6 +651,52 @@ def chgroup_tariff(request, gid): }) +@login_required +@mydefs.only_admins +def dev(request, gid, uid): + abon_dev = None + try: + if request.method == 'POST': + dev = Device.objects.get(pk=request.POST.get('dev')) + abon = models.Abon.objects.get(pk=uid) + try: + abdev = models.AbonDevice.objects.get(device=dev) + abdev.abon = abon + abdev.save(update_fields=['abon']) + except models.AbonDevice.DoesNotExist: + models.AbonDevice.objects.create(abon=abon, device=dev) + messages.success(request, _('Device has successfully attached')) + return redirect('abonapp:abon_home', gid=gid, uid=uid) + else: + abon_dev = models.AbonDevice.objects.get(abon=uid).device + except Device.DoesNotExist: + messages.warning(request, _('Device your selected already does not exist')) + except models.Abon.DoesNotExist: + messages.error(request, _('Abon does not exist')) + return redirect('abonapp:people_list', gid=gid) + except models.AbonDevice.DoesNotExist: + messages.warning(request, _('User device was not found')) + return render(request, 'abonapp/modal_dev.html', { + 'devices': Device.objects.filter(user_group=gid), + 'dev': abon_dev, + 'gid': gid, 'uid': uid + }) + + +@login_required +@mydefs.only_admins +def clear_dev(request, gid, uid): + try: + abon = models.Abon.objects.get(pk=uid) + abdev = models.AbonDevice.objects.get(abon=abon) + abdev.delete() + messages.success(request, _('Device has successfully unattached')) + except models.Abon.DoesNotExist: + messages.error(request, _('Abon does not exist')) + return redirect('abonapp:people_list', gid=gid) + return redirect('abonapp:abon_home', gid=gid, uid=uid) + + # API's def abons(request):