Browse Source

Добавил привязку усройства к абоненту

devel
bashmak 9 years ago
parent
commit
1e54e2d7bc
  1. 24
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 20
      abonapp/models.py
  3. 17
      abonapp/templates/abonapp/editAbon.html
  4. 37
      abonapp/templates/abonapp/modal_dev.html
  5. 3
      abonapp/urls_abon.py
  6. 57
      abonapp/views.py

24
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 "Устройство успешно откреплено"

20
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)

17
abonapp/templates/abonapp/editAbon.html

@ -106,6 +106,23 @@
</div>
</div>
<div class="form-group-sm">
<div class="col-sm-offset-4 col-sm-8 btn-group btn-group-sm">
{% if device %}
<a href="{% url 'devapp:view' abon_group.pk device.pk %}" target="_blank" class="btn btn-sm btn-default" title="{{ device.ip_address }}">
<span class="glyphicon glyphicon-hdd"></span> {% trans 'Coupling' %} {{ device.ip_address }}
</a>
<a href="{% url 'abonapp:clear_dev' abon_group.pk abon.pk %}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span> {% trans 'Remove clutch' %}
</a>
{% else %}
<a href="{% url 'abonapp:dev' abon_group.pk abon.pk %}" class="btn btn-success btn-sm btn-modal">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add clutch' %}
</a>
{% endif %}
</div>
</div>
</form>
</div>
</div>

37
abonapp/templates/abonapp/modal_dev.html

@ -0,0 +1,37 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:dev' gid uid %}" method="post"> {% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-plus"></span>{% trans 'Add clutch' %}</h4>
</div>
{% include 'message_block.html' %}
<div class="modal-body">
<div class="form-group-sm">
<label for="id_dev">{% trans 'Select a device' %}</label>
<div class="input-group">
<select name="dev" id="id_dev" class="form-control">
{% for device in devices %}
<option value="{{ device.pk }}">{{ device }}</option>
{% empty %}
<option value="0">---</option>
{% endfor %}
</select>
</div>
</div>
<div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary">
<span class="glyphicon glyphicon-save"></span> {% trans 'Save' %}
</button>
<button type="reset" class="btn btn-sm btn-default">
<span class="glyphicon glyphicon-remove-circle"></span> {% trans 'Reset' %}
</button>
</div>
</div>
</form>

3
abonapp/urls_abon.py

@ -24,5 +24,8 @@ urlpatterns = [
url(r'^(?P<uid>\d+)/unsubscribe_service(?P<srvid>\d+)$', views.unsubscribe_service,
name='unsubscribe_service'),
url(r'^(?P<uid>\d+)/dev/$', views.dev, name='dev'),
url(r'^(?P<uid>\d+)/clear_dev/$', views.clear_dev, name='clear_dev'),
url(r'^(?P<uid>\d+)/task_log$', views.task_log, name='task_log')
]

57
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):

Loading…
Cancel
Save