Browse Source

Переделал работу с устройством абонента

devel
bashmak 9 years ago
parent
commit
127be3baaa
  1. 4
      abonapp/urls_abon.py
  2. 98
      abonapp/views.py

4
abonapp/urls_abon.py

@ -19,7 +19,6 @@ urlpatterns = [
url(r'^(?P<uid>\d+)/passport_view$', views.passport_view, name='passport_view'), url(r'^(?P<uid>\d+)/passport_view$', views.passport_view, name='passport_view'),
url(r'^(?P<uid>\d+)/complete_service(?P<srvid>\d+)$', views.complete_service, name='compl_srv'), url(r'^(?P<uid>\d+)/complete_service(?P<srvid>\d+)$', views.complete_service, name='compl_srv'),
url(r'^(?P<uid>\d+)/activate_service(?P<srvid>\d+)$', views.activate_service, name='activate_service'), url(r'^(?P<uid>\d+)/activate_service(?P<srvid>\d+)$', views.activate_service, name='activate_service'),
url(r'^(?P<uid>\d+)/opt82$', views.opt82, name='opt82'),
url(r'^(?P<uid>\d+)/chart$', views.charts, name='charts'), url(r'^(?P<uid>\d+)/chart$', views.charts, name='charts'),
url(r'^(?P<uid>\d+)/dials$', views.dials, name='dials'), url(r'^(?P<uid>\d+)/dials$', views.dials, name='dials'),
url(r'^(?P<uid>\d+)/extra_field$', views.make_extra_field, name='extra_field'), url(r'^(?P<uid>\d+)/extra_field$', views.make_extra_field, name='extra_field'),
@ -32,5 +31,6 @@ urlpatterns = [
url(r'^(?P<uid>\d+)/dev/$', views.dev, name='dev'), 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+)/clear_dev/$', views.clear_dev, name='clear_dev'),
url(r'^(?P<uid>\d+)/task_log$', views.task_log, name='task_log')
url(r'^(?P<uid>\d+)/task_log$', views.task_log, name='task_log'),
url(r'^(?P<uid>\d+)/user_dev$', views.save_user_dev_port, name='save_user_dev_port')
] ]

98
abonapp/views.py

@ -18,7 +18,7 @@ from agent import NasFailedResult, Transmitter, NasNetworkError
from . import forms from . import forms
from . import models from . import models
import mydefs import mydefs
from devapp.models import Device
from devapp.models import Device, Port as DevPort
from datetime import datetime, date from datetime import datetime, date
from taskapp.models import Task from taskapp.models import Task
from dialing_app.models import AsteriskCDR from dialing_app.models import AsteriskCDR
@ -264,20 +264,13 @@ def abonhome(request, gid, uid):
abon_group = get_object_or_404(models.AbonGroup, pk=gid) abon_group = get_object_or_404(models.AbonGroup, pk=gid)
frm = None frm = None
passw = None passw = None
abon_device = None
try: try:
if request.method == 'POST': if request.method == 'POST':
if not request.user.has_perm('abonapp.change_abon'): if not request.user.has_perm('abonapp.change_abon'):
raise PermissionDenied raise PermissionDenied
frm = forms.AbonForm(request.POST, instance=abon) frm = forms.AbonForm(request.POST, instance=abon)
if frm.is_valid(): if frm.is_valid():
# если нет option82, т.е. динамический ip то не сохраняем изменения ip
if not abon.is_dhcp():
ip_str = request.POST.get('ip')
if ip_str:
abon.ip_address = ip_str
else:
abon.ip_address = None
abon.ip_address = request.POST.get('ip')
frm.save() frm.save()
messages.success(request, _('edit abon success msg')) messages.success(request, _('edit abon success msg'))
else: else:
@ -285,7 +278,8 @@ def abonhome(request, gid, uid):
else: else:
passw = models.AbonRawPassword.objects.get(account=abon).passw_text passw = models.AbonRawPassword.objects.get(account=abon).passw_text
frm = forms.AbonForm(instance=abon, initial={'password': passw}) frm = forms.AbonForm(instance=abon, initial={'password': passw})
abon_device = models.AbonDevice.objects.get(abon=abon)
if abon.device is None:
messages.warning(request, _('User device was not found'))
except mydefs.LogicError as e: except mydefs.LogicError as e:
messages.error(request, e) messages.error(request, e)
passw = models.AbonRawPassword.objects.get(account=abon).passw_text passw = models.AbonRawPassword.objects.get(account=abon).passw_text
@ -295,14 +289,9 @@ def abonhome(request, gid, uid):
messages.error(request, e) messages.error(request, e)
except models.AbonRawPassword.DoesNotExist: except models.AbonRawPassword.DoesNotExist:
messages.warning(request, _('User has not have password, and cannot login')) 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: except mydefs.MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err) messages.add_message(request, messages.constants.ERROR, err)
except MultipleObjectsReturned:
abon_device = models.AbonDevice.objects.filter(abon=abon)[0]
models.AbonDevice.objects.exclude(pk=abon_device).delete()
if request.user.has_perm('abonapp.change_abon'): if request.user.has_perm('abonapp.change_abon'):
return render(request, 'abonapp/editAbon.html', { return render(request, 'abonapp/editAbon.html', {
@ -311,8 +300,8 @@ def abonhome(request, gid, uid):
'abon_group': abon_group, 'abon_group': abon_group,
'ip': abon.ip_address, 'ip': abon.ip_address,
'is_bad_ip': getattr(abon, 'is_bad_ip', False), 'is_bad_ip': getattr(abon, 'is_bad_ip', False),
'tech_form': forms.Opt82Form(instance=abon.opt82),
'device': abon_device.device if abon_device is not None else None
'device': abon.device,
'dev_ports': DevPort.objects.filter(device=abon.device) if abon.device else None
}) })
else: else:
return render(request, 'abonapp/viewAbon.html', { return render(request, 'abonapp/viewAbon.html', {
@ -323,39 +312,6 @@ def abonhome(request, gid, uid):
}) })
@login_required
@mydefs.only_admins
def opt82(request, gid, uid):
try:
abon = models.Abon.objects.get(pk=uid)
if request.method == 'POST':
try:
opt82_instance = models.Opt82.objects.get(
mac=request.POST.get('mac'),
port=request.POST.get('port')
)
except models.Opt82.DoesNotExist:
frm = forms.Opt82Form(request.POST)
if frm.is_valid():
opt82_instance = frm.save()
else:
messages.error(request, _('fix form errors'))
return redirect('abonapp:abon_home', gid=gid, uid=uid)
abon.opt82 = opt82_instance
else:
act = request.GET.get('act')
if act is not None and act == 'release':
if abon.opt82 is not None:
abon.opt82.delete()
abon.opt82 = None
abon.save(update_fields=['opt82'])
except models.Abon.DoesNotExist:
messages.error(request, _('User does not exist'))
return redirect('abonapp:abon_home', gid=gid, uid=uid)
@atomic @atomic
def terminal_pay(request): def terminal_pay(request):
from .pay_systems import allpay from .pay_systems import allpay
@ -533,6 +489,7 @@ def activate_service(request, gid, uid, srvid):
return HttpResponse(_('Not confirmed')) return HttpResponse(_('Not confirmed'))
abtar.activate(request.user) abtar.activate(request.user)
abtar.abon.save()
messages.success(request, _('Service has been activated successfully')) messages.success(request, _('Service has been activated successfully'))
return redirect('abonapp:abon_services', gid, uid) return redirect('abonapp:abon_services', gid, uid)
@ -683,24 +640,20 @@ def chgroup_tariff(request, gid):
def dev(request, gid, uid): def dev(request, gid, uid):
abon_dev = None abon_dev = None
try: try:
abon = models.Abon.objects.get(pk=uid)
if request.method == 'POST': if request.method == 'POST':
dev = Device.objects.get(pk=request.POST.get('dev')) dev = Device.objects.get(pk=request.POST.get('dev'))
abon = models.Abon.objects.get(pk=uid)
try:
models.AbonDevice.objects.get(device=dev, abon=abon)
except models.AbonDevice.DoesNotExist:
models.AbonDevice.objects.create(abon=abon, device=dev)
abon.device = dev
abon.save(update_fields=['device'])
messages.success(request, _('Device has successfully attached')) messages.success(request, _('Device has successfully attached'))
return redirect('abonapp:abon_home', gid=gid, uid=uid) return redirect('abonapp:abon_home', gid=gid, uid=uid)
else: else:
abon_dev = models.AbonDevice.objects.get(abon=uid).device
abon_dev = abon.device
except Device.DoesNotExist: except Device.DoesNotExist:
messages.warning(request, _('Device your selected already does not exist')) messages.warning(request, _('Device your selected already does not exist'))
except models.Abon.DoesNotExist: except models.Abon.DoesNotExist:
messages.error(request, _('Abon does not exist')) messages.error(request, _('Abon does not exist'))
return redirect('abonapp:people_list', gid=gid) 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', { return render(request, 'abonapp/modal_dev.html', {
'devices': Device.objects.filter(user_group=gid), 'devices': Device.objects.filter(user_group=gid),
'dev': abon_dev, 'dev': abon_dev,
@ -713,8 +666,8 @@ def dev(request, gid, uid):
def clear_dev(request, gid, uid): def clear_dev(request, gid, uid):
try: try:
abon = models.Abon.objects.get(pk=uid) abon = models.Abon.objects.get(pk=uid)
abdev = models.AbonDevice.objects.get(abon=abon)
abdev.delete()
abon.device = None
abon.save(update_fields=['device'])
messages.success(request, _('Device has successfully unattached')) messages.success(request, _('Device has successfully unattached'))
except models.Abon.DoesNotExist: except models.Abon.DoesNotExist:
messages.error(request, _('Abon does not exist')) messages.error(request, _('Abon does not exist'))
@ -892,6 +845,31 @@ def dials(request, gid, uid):
}) })
@login_required
@mydefs.only_admins
def save_user_dev_port(request, gid, uid):
if request.method != 'POST':
messages.error(request, _('Method is not POST'))
return redirect('abonapp:abon_home', gid, uid)
user_port = request.POST.get('user_port')
is_dynamic_ip = request.POST.get('is_dynamic_ip')
try:
port = DevPort.objects.get(pk=user_port)
abon = models.Abon.objects.get(pk=uid)
abon.dev_port = port
if abon.is_dynamic_ip != is_dynamic_ip:
abon.is_dynamic_ip = is_dynamic_ip
abon.save(update_fields=['dev_port', 'is_dynamic_ip'])
else:
abon.save(update_fields=['dev_port'])
messages.success(request, _('User port has been saved'))
except DevPort.DoesNotExist:
messages.error(request, _('Selected port does not exist'))
except models.Abon.DoesNotExist:
messages.error(request, _('User does not exist'))
return redirect('abonapp:abon_home', gid, uid)
# API's # API's
def abons(request): def abons(request):

Loading…
Cancel
Save