diff --git a/devapp/base_intr.py b/devapp/base_intr.py
index 37b1218..970ae4b 100644
--- a/devapp/base_intr.py
+++ b/devapp/base_intr.py
@@ -28,6 +28,16 @@ class DevBase(object, metaclass=ABCMeta):
def get_template_name(self):
"""Получаем путь к html шаблону отображения устройства"""
+ @staticmethod
+ @abstractmethod
+ def has_attachable_to_subscriber():
+ """Можно-ли подключать устройство к абоненту"""
+
+ @staticmethod
+ @abstractmethod
+ def is_use_device_port():
+ """True если при авторизации по opt82 используется порт"""
+
class BasePort(object, metaclass=ABCMeta):
def __init__(self, num, name, status, mac, speed):
diff --git a/devapp/dev_types.py b/devapp/dev_types.py
index b0e64be..74099df 100644
--- a/devapp/dev_types.py
+++ b/devapp/dev_types.py
@@ -83,13 +83,21 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
return tm
def get_template_name(self):
- return 'devapp/ports.html'
+ return 'ports.html'
+
+ @staticmethod
+ def has_attachable_to_subscriber():
+ return True
+
+ @staticmethod
+ def is_use_device_port():
+ return True
class ONUdev(BasePort):
def __init__(self, num, name, status, mac, speed, signal, snmpWorker):
- BasePort.__init__(self, num, name, status, mac, speed)
- assert issubclass(snmpWorker.__class__ , SNMPBaseWorker)
+ super(ONUdev, self).__init__(num, name, status, mac, speed)
+ assert issubclass(snmpWorker.__class__, SNMPBaseWorker)
self.snmp_worker = snmpWorker
self.signal = signal
@@ -113,7 +121,7 @@ class OLTDevice(DevBase, SNMPBaseWorker):
@staticmethod
def description():
- return _('PON ONU')
+ return _('PON OLT')
def reboot(self):
pass
@@ -146,10 +154,42 @@ class OLTDevice(DevBase, SNMPBaseWorker):
return tm
def get_template_name(self):
- return 'devapp/olt.html'
+ return 'olt.html'
+ @staticmethod
+ def has_attachable_to_subscriber():
+ return False
-DEVICE_TYPES = (
- ('Dl', DLinkDevice),
- ('Pn', OLTDevice)
-)
+ @staticmethod
+ def is_use_device_port():
+ return False
+
+
+class OnuDevice(DevBase, SNMPBaseWorker):
+
+ @staticmethod
+ def description():
+ return _('PON ONU')
+
+ def reboot(self):
+ pass
+
+ def get_ports(self):
+ pass
+
+ def get_device_name(self):
+ pass
+
+ def uptime(self):
+ pass
+
+ def get_template_name(self):
+ return "onu.html"
+
+ @staticmethod
+ def has_attachable_to_subscriber():
+ return True
+
+ @staticmethod
+ def is_use_device_port():
+ return False
diff --git a/devapp/forms.py b/devapp/forms.py
index fa1c9e8..11f6c9f 100644
--- a/devapp/forms.py
+++ b/devapp/forms.py
@@ -1,11 +1,23 @@
# -*- coding: utf-8 -*-
from django import forms
+from django.utils.translation import ugettext as _
+from django.db import IntegrityError
from . import models
from mydefs import ip_addr_regex
+from djing import MAC_ADDR_REGEX
class DeviceForm(forms.ModelForm):
+ mac_addr = forms.CharField(widget=forms.TextInput(attrs={
+ 'pattern': MAC_ADDR_REGEX,
+ 'required': True,
+ 'class': 'form-control'
+ }), error_messages={
+ 'required': _('Mac address is required for fill'),
+ 'unique': _('Device with that mac is already exist')
+ })
+
class Meta:
model = models.Device
fields = '__all__'
@@ -13,7 +25,6 @@ class DeviceForm(forms.ModelForm):
'ip_address': forms.TextInput(attrs={
'pattern': ip_addr_regex,
'placeholder': '192.168.0.100',
- 'required': True,
'class': 'form-control'
}),
'comment': forms.Textarea(attrs={
@@ -33,3 +44,27 @@ class DeviceForm(forms.ModelForm):
'class': 'form-control'
})
}
+
+
+class PortForm(forms.ModelForm):
+ class Meta:
+ model = models.Port
+ exclude = ['device']
+ widgets = {
+ 'num': forms.NumberInput(attrs={
+ 'class': 'form-control',
+ 'min': '0'
+ }),
+ 'descr': forms.TextInput(attrs={
+ 'class': 'form-control'
+ })
+ }
+
+ def save(self, commit=True):
+ try:
+ super(PortForm, self).save(commit)
+ except IntegrityError as e:
+ if "Duplicate entry" in str(e):
+ raise models.DeviceDBException(_('Port number on device must be unique'))
+ else:
+ raise models.DeviceDBException(e)
diff --git a/devapp/locale/ru/LC_MESSAGES/django.po b/devapp/locale/ru/LC_MESSAGES/django.po
index ba153e3..edc5c92 100644
--- a/devapp/locale/ru/LC_MESSAGES/django.po
+++ b/devapp/locale/ru/LC_MESSAGES/django.po
@@ -32,7 +32,7 @@ msgid "does not fetch the mac"
msgstr "не нашёл мак"
#: devapp/dev_types.py:116
-msgid "PON ONU"
+msgid "PON OLT"
msgstr "ONU Голова"
#: devapp/templates/devapp/add_dev.html:7
@@ -134,6 +134,9 @@ msgstr "Добавить группу"
msgid "Mac"
msgstr "Мак"
+msgid "Mac address"
+msgstr "Мак адрес"
+
#: devapp/templates/devapp/olt.html:14
msgid "Name"
msgstr "Имя"
@@ -148,7 +151,7 @@ msgstr "Ур. сигнала"
#: devapp/templates/devapp/olt.html:34
msgid "Ports not found"
-msgstr "Онушки не получил"
+msgstr "Порты не найдены"
#: devapp/templates/devapp/ports.html:9
msgid "Title of the type of switch"
@@ -194,6 +197,9 @@ msgstr "Комментарии портов"
msgid "Port"
msgstr "Порт"
+msgid "Ports"
+msgstr "Порты"
+
#: devapp/templates/devapp/ports.html:86
msgid "Title"
msgstr "Название"
@@ -232,3 +238,48 @@ msgstr "Ошибка SNMP на устройстве"
msgid "Edit"
msgstr "Редактировать"
+
+msgid "Device does not exist"
+msgstr "Устойство не найдено"
+
+msgid "Number"
+msgstr "Номер"
+
+msgid "Mode"
+msgstr "Режим"
+
+msgid "Add"
+msgstr "Добавить"
+
+msgid "Add ports"
+msgstr "Добавить порты"
+
+msgid "Device is not have a group, please fix that"
+msgstr "У устройства нет группы, пожалуйста, исправьте это"
+
+msgid "Delete"
+msgstr "Удалить"
+
+msgid "Port does not exist"
+msgstr "Порт не найден"
+
+msgid "Port successfully removed"
+msgstr "Порт успешно удалён"
+
+msgid "PON ONU"
+msgstr "Онушка"
+
+msgid "Are you sure that you want to delete switch port from db?"
+msgstr "Вы уверены что хотите удалить порт свича из бд?"
+
+msgid "Port successfully saved"
+msgstr "Порт успешно сохранён"
+
+msgid "Port number on device must be unique"
+msgstr "Номер порта на устройстве должен быть уникальным"
+
+msgid "Mac address is required for fill"
+msgstr "MAC-адрес необходим для заполнения"
+
+msgid "Device with that mac is already exist"
+msgstr "Устройство с этим мак-адресом уже есть"
diff --git a/devapp/templates/devapp/add_dev.html b/devapp/templates/devapp/add_dev.html
index ba3fc23..5cd2f4e 100644
--- a/devapp/templates/devapp/add_dev.html
+++ b/devapp/templates/devapp/add_dev.html
@@ -5,13 +5,14 @@
- {% trans 'Groups' %}
+ - {{ group.title }}
- {% trans 'Add new device' %}
{% include 'message_block.html' %}
@@ -20,7 +21,7 @@
+
+