diff --git a/abonapp/views.py b/abonapp/views.py index 8e69add..fbab808 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -837,7 +837,7 @@ def save_user_dev_port(request, gid: int, uname): pass except models.Abon.MultipleObjectsReturned: messages.error(request, _('Multiple users on the same device port')) - return redirect('devapp:manage_ports', abon.device.group.pk, abon.device.pk) + return redirect('devapp:view', abon.device.group.pk, abon.device.pk) abon.dev_port = port if abon.is_dynamic_ip != is_dynamic_ip: diff --git a/devapp/dev_types.py b/devapp/dev_types.py index a62cdf3..73a8772 100644 --- a/devapp/dev_types.py +++ b/devapp/dev_types.py @@ -102,7 +102,7 @@ class DLinkDevice(DevBase, SNMPBaseWorker): return tm def get_template_name(self): - return 'ports.html' + return 'generic_switch.html' @staticmethod def validate_extra_snmp_info(v: str) -> None: diff --git a/devapp/locale/ru/LC_MESSAGES/django.po b/devapp/locale/ru/LC_MESSAGES/django.po index 57c1c67..a18ead1 100644 --- a/devapp/locale/ru/LC_MESSAGES/django.po +++ b/devapp/locale/ru/LC_MESSAGES/django.po @@ -378,8 +378,8 @@ msgid "Enable port" msgstr "Включить порт" #: templates/devapp/custom_dev_page/ports.html:80 -msgid "Device log" -msgstr "Лог устройства" +msgid "Ports management" +msgstr "Управление портами" #: templates/devapp/custom_dev_page/ports.html:87 msgid "Level" diff --git a/devapp/templates/devapp/custom_dev_page/ports.html b/devapp/templates/devapp/custom_dev_page/generic_switch.html similarity index 51% rename from devapp/templates/devapp/custom_dev_page/ports.html rename to devapp/templates/devapp/custom_dev_page/generic_switch.html index a3341e9..8355a1f 100644 --- a/devapp/templates/devapp/custom_dev_page/ports.html +++ b/devapp/templates/devapp/custom_dev_page/generic_switch.html @@ -77,25 +77,64 @@
-

{% trans 'Device log' %}

+

{% trans 'Ports management' %}

-
- - +
+ + + + + + + + + + {% with gid=dev.group.pk did=dev.pk can_del_port=perms.devapp.delete_port can_edit_port=perms.devapp.change_port %} + {% for port in ports_db %} - - - - + + + {% if port.num_abons > 1 %} + {% url 'devapp:fix_port_conflict' gid did port.id as fixurl %} + + {% else %} + + {% endif %} + - - + {% empty %} - + - -
{% trans 'Number' %}{% trans 'Description' %}{% trans 'Count of subscribers' %}#
ID{% trans 'Level' %}{% trans 'Description' %}{% trans 'Date' %}{{ port.num }}{{ port.descr|default:'-' }}{{ port.num_abons }}. {% blocktrans with furl=fixurl %}Port should not have more than one subscriber, fix that{% endblocktrans %}{{ port.num_abons }} + + + + {% if can_del_port %} + + + + {% endif %} + {% if can_edit_port %} + + + + {% endif %} +
Coming soon..{% trans 'Ports not found' %}
-
+ {% endfor %} + {% endwith %} + + + + + {% if perms.devapp.add_port %} + + {% trans 'Add ports' %} + + {% endif %} + + + +
@@ -103,28 +142,26 @@

{% trans 'Ports comment' %}

-
- - +
+ + + + + + + + {% for port in ports %} - - + + - - - {% for port in ports %} - - - - - {% empty %} - - - - {% endfor %} - -
{% trans 'Port' %}{% trans 'Title' %}
{% trans 'Port' %}{% trans 'Title' %}{{ port.num }}{{ port.nm|default:'-' }}
{{ port.num }}{{ port.nm|default:'-' }}
{% trans 'We have not received info for ports' %}
-
+ {% empty %} + + {% trans 'We have not received info for ports' %} + + {% endfor %} + +
diff --git a/devapp/templates/devapp/ext.htm b/devapp/templates/devapp/ext.htm index e3f3a89..454a1af 100644 --- a/devapp/templates/devapp/ext.htm +++ b/devapp/templates/devapp/ext.htm @@ -37,11 +37,6 @@ {% trans 'Edit' %} - - {% url 'devapp:manage_ports' dev.group.pk|default:0 dev.pk as devapp_mports %} - - {% trans 'Ports' %} - {% endif %} diff --git a/devapp/templates/devapp/manage_ports/list.html b/devapp/templates/devapp/manage_ports/list.html deleted file mode 100644 index a8bebe6..0000000 --- a/devapp/templates/devapp/manage_ports/list.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends request.is_ajax|yesno:'nullcont.htm,devapp/ext.htm' %} -{% load i18n %} -{% block content %} - -
-
-
- - - - - - - - - - - - {% with gid=dev.group.pk did=dev.pk can_del_port=perms.devapp.delete_port can_edit_port=perms.devapp.change_port %} - {% for port in ports %} - - - - {% if port.num_abons > 1 %} - {% url 'devapp:fix_port_conflict' gid did port.id as fixurl %} - - {% else %} - - {% endif %} - - - {% empty %} - - - - {% endfor %} - {% endwith %} - - - - - - - -
{% trans 'Number' %}{% trans 'Description' %}{% trans 'Count of subscribers' %}#
{{ port.num }}{{ port.descr|default:'-' }}{{ port.num_abons }}. {% blocktrans with furl=fixurl %}Port should not have more than one subscriber, fix that{% endblocktrans %}{{ port.num_abons }} - - - - {% if can_del_port %} - - - - {% endif %} - {% if can_edit_port %} - - - - {% endif %} -
{% trans 'Ports not found' %}
- {% if perms.devapp.add_port %} - - {% trans 'Add ports' %} - - {% endif %} -
-
-
-
- -{% endblock %} diff --git a/devapp/urls.py b/devapp/urls.py index 594d519..f0f4b27 100644 --- a/devapp/urls.py +++ b/devapp/urls.py @@ -14,16 +14,15 @@ urlpatterns = [ path('//add/', views.add_single_port, name='add_port'), path('//edit/', views.DeviceUpdate.as_view(), name='edit'), path('//edit_extra/', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'), - path('//ports/', views.manage_ports, name='manage_ports'), path('//ports//fix_port_conflict/', views.fix_port_conflict, name='fix_port_conflict'), path('//ports//show_subscriber_on_port/', views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'), path('//ports_add/', views.add_ports, name='add_ports'), path('//register_device/', views.register_device, name='dev_register'), - re_path('^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$', views.toggle_port, name='port_toggle'), - path('///del/', views.delete_single_port, name='del_port'), - path('///edit/', views.edit_single_port, name='edit_port'), + re_path('^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$', views.toggle_port, name='port_toggle'), + path('///del/', views.delete_single_port, name='del_port'), + path('///edit/', views.edit_single_port, name='edit_port'), path('fix_device_group//', views.fix_device_group, name='fix_device_group'), path('search_dev/', views.search_dev), diff --git a/devapp/views.py b/devapp/views.py index 6f46ab6..fbf23e3 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -247,29 +247,6 @@ class DeviceUpdateExtra(UpdateView): return r -@login_required -@only_admins -@permission_required('devapp.change_device') -def manage_ports(request, group_id: int, device_id: int): - device = ports = None - try: - device = Device.objects.get(pk=device_id) - if device.group is None: - messages.error(request, _('Device does not have a group, please fix that')) - return redirect('devapp:fix_device_group', device.pk) - ports = Port.objects.filter(device=device).annotate(num_abons=Count('abon')) - - except Device.DoesNotExist: - messages.error(request, _('Device does not exist')) - return redirect('devapp:group_list') - except DeviceDBException as e: - messages.error(request, e) - return render(request, 'devapp/manage_ports/list.html', { - 'ports': ports, - 'dev': device - }) - - @method_decorator(login_decs, name='dispatch') class ShowSubscriberOnPort(global_base_views.RedirectWhenErrorMixin, DetailView): template_name = 'devapp/manage_ports/modal_show_subscriber_on_port.html' @@ -366,29 +343,29 @@ def add_ports(request, group_id: int, device_id: int): @login_required @only_admins @permission_required('devapp.delete_port') -def delete_single_port(request, group_id, device_id, portid): +def delete_single_port(request, group_id, device_id, port_id): try: if request.method == 'POST': if request.POST.get('confirm') == 'yes': - Port.objects.get(pk=portid).delete() + Port.objects.get(pk=port_id).delete() messages.success(request, _('Port successfully removed')) else: return render(request, 'devapp/manage_ports/modal_del_port.html', { 'grp': group_id, 'did': device_id, - 'port_id': portid + 'port_id': port_id }) except Port.DoesNotExist: messages.error(request, _('Port does not exist')) except DeviceDBException as e: messages.error(request, e) - return redirect('devapp:manage_ports', group_id, device_id) + return redirect('devapp:view', group_id, device_id) @login_required @only_admins @permission_required('devapp.add_port') -def edit_single_port(request, group_id, device_id, port_id): +def edit_single_port(request, group_id: int, device_id: int, port_id: int): try: port = Port.objects.get(pk=port_id) if request.method == 'POST': @@ -398,7 +375,7 @@ def edit_single_port(request, group_id, device_id, port_id): messages.success(request, _('Port successfully saved')) else: messages.error(request, _('Form is invalid, check fields and try again')) - return redirect('devapp:manage_ports', group_id, device_id) + return redirect('devapp:view', group_id, device_id) frm = PortForm(instance=port) return render(request, 'devapp/manage_ports/modal_add_edit_port.html', { @@ -411,7 +388,7 @@ def edit_single_port(request, group_id, device_id, port_id): messages.error(request, _('Port does not exist')) except (DeviceDBException, DuplicateEntry) as e: messages.error(request, e) - return redirect('devapp:manage_ports', group_id, device_id) + return redirect('devapp:view', group_id, device_id) @login_required @@ -425,7 +402,7 @@ def add_single_port(request, group_id, device_id): if frm.is_valid(): frm.save() messages.success(request, _('Port successfully saved')) - return redirect('devapp:manage_ports', group_id, device_id) + return redirect('devapp:view', group_id, device_id) else: messages.error(request, _('Form is invalid, check fields and try again')) else: @@ -442,7 +419,7 @@ def add_single_port(request, group_id, device_id): messages.error(request, _('Device does not exist')) except (DeviceDBException, DuplicateEntry) as e: messages.error(request, e) - return redirect('devapp:manage_ports', group_id, device_id) + return redirect('devapp:view', group_id, device_id) @login_required @@ -474,7 +451,8 @@ def devview(request, group_id: int, device_id: int): 'dev': device, 'ports': ports, 'dev_accs': Abon.objects.filter(device=device), - 'dev_manager': manager + 'dev_manager': manager, + 'ports_db': Port.objects.filter(device=device).annotate(num_abons=Count('abon')), }) except EasySNMPError as e: messages.error(request, "%s: %s" % (gettext('SNMP error on device'), e)) @@ -502,8 +480,7 @@ def zte_port_view_uncfg(request, group_id: str, device_id: str, fiber_id: str): @login_required @only_admins @permission_required('devapp.can_toggle_ports') -def toggle_port(request, device_id: int, portid: int, status=0): - portid = int(portid) +def toggle_port(request, device_id: int, port_id: int, status=0): status = int(status) device = get_object_or_404(Device, id=int(device_id)) try: @@ -512,9 +489,9 @@ def toggle_port(request, device_id: int, portid: int, status=0): manager = device.get_manager_object() ports = tuple(manager.get_ports()) if status: - ports[portid - 1].enable() + ports[port_id - 1].enable() else: - ports[portid - 1].disable() + ports[port_id - 1].disable() else: messages.warning(request, _('Not Set snmp device password')) else: