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 %}
+
+
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):