diff --git a/abonapp/forms.py b/abonapp/forms.py index 5d1e64c..dbadb65 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from datetime import datetime from django.utils.translation import ugettext as _ from django import forms @@ -7,6 +6,7 @@ from random import choice from string import digits, ascii_lowercase from . import models from django.conf import settings +from djing import IP_ADDR_REGEX TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') @@ -56,6 +56,10 @@ class AbonForm(forms.ModelForm): 'class': 'form-control', 'type': 'password', 'autocomplete': 'new-password' })) + ip_address = forms.CharField(widget=forms.TextInput(attrs={ + 'pattern': IP_ADDR_REGEX + }), label=_('Ip Address')) + class Meta: model = models.Abon fields = ['username', 'telephone', 'fio', 'group', 'description', 'street', 'house', 'is_active', 'ip_address'] diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index 36f757f..99bb948 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -876,10 +876,6 @@ msgstr "Нет исполнителей" msgid "Tasks not found" msgstr "Нет задач" -#: templates/abonapp/viewAbon.html:10 -msgid "View the subscriber" -msgstr "Просмотр абонента" - #: templates/abonapp/viewAbon.html:24 msgid "yes,no" msgstr "Да,Нет" diff --git a/abonapp/models.py b/abonapp/models.py index 6a5db6b..dc036aa 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -136,7 +136,7 @@ class Abon(BaseAccount): current_tariff = models.ForeignKey(AbonTariff, null=True, blank=True, on_delete=models.SET_NULL) group = models.ForeignKey(Group, models.SET_NULL, blank=True, null=True, verbose_name=_('User group')) ballance = models.FloatField(default=0.0) - ip_address = MyGenericIPAddressField(blank=True, null=True) + ip_address = MyGenericIPAddressField(blank=True, null=True, verbose_name=_('Ip Address')) description = models.TextField(_('Comment'), null=True, blank=True) street = models.ForeignKey(AbonStreet, on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_('Street')) house = models.CharField(_('House'), max_length=12, null=True, blank=True) @@ -269,13 +269,12 @@ class Abon(BaseAccount): agent_trf = TariffStruct(trf.id, trf.speedIn, trf.speedOut) return AbonStruct(self.pk, user_ip, agent_trf, bool(self.is_active)) - def save(self, *args, **kwargs): + def clean(self): # check if ip address already busy if self.ip_address is not None and Abon.objects.filter(ip_address=self.ip_address).exclude( pk=self.pk).count() > 0: - self.is_bad_ip = True - raise LogicError(_('Ip address already exist')) - super(Abon, self).save(*args, **kwargs) + raise ValidationError({'ip_address': [gettext('Ip address already exist')]}) + return super(Abon, self).clean() def sync_with_nas(self, created: bool) -> Optional[Exception]: agent_abon = self.build_agent_struct() diff --git a/abonapp/views.py b/abonapp/views.py index fd3551f..69e7a88 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -332,7 +332,6 @@ class AbonHomeUpdateView(UpdateView): dev = getattr(abon, 'device') context = { 'group': self.group, - 'is_bad_ip': getattr(abon, 'is_bad_ip', False), 'device': dev, 'dev_ports': DevPort.objects.filter(device=dev) if dev else None } @@ -810,9 +809,9 @@ def save_user_dev_port(request, gid, uname): user_url = resolve_url('abonapp:abon_home', other_abon.group.id, other_abon.username) messages.error(request, _( "%(user_name)s already pinned to this port on this device") % { - 'user_url': user_url, - 'user_name': other_abon.get_full_name() - }) + 'user_url': user_url, + 'user_name': other_abon.get_full_name() + }) return redirect('abonapp:abon_home', gid, uname) except models.Abon.DoesNotExist: pass