diff --git a/abonapp/admin.py b/abonapp/admin.py index c3e76ef..082d3d8 100644 --- a/abonapp/admin.py +++ b/abonapp/admin.py @@ -14,3 +14,4 @@ admin.site.register(models.AbonRawPassword) admin.site.register(models.ExtraFieldsModel) admin.site.register(models.AllPayLog) admin.site.register(models.PassportInfo) +admin.site.register(models.AdditionalTelephone) diff --git a/abonapp/forms.py b/abonapp/forms.py index b9e11d4..36fa6b5 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -6,6 +6,10 @@ from django.contrib.auth.hashers import make_password from random import choice from string import digits, ascii_lowercase from . import models +from django.conf import settings + + +TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') def generate_random_username(length=6, chars=digits, split=2, delimiter=''): @@ -57,7 +61,7 @@ class AbonForm(forms.ModelForm): }), 'telephone': forms.TextInput(attrs={ 'placeholder': _('telephone placeholder'), - 'pattern': r'^\+[7,8,9,3]\d{10,11}$', + 'pattern': TELEPHONE_REGEXP, 'required': '', 'class': 'form-control' }), @@ -131,3 +135,18 @@ class AbonStreetForm(forms.ModelForm): 'name': forms.TextInput(attrs={'class': 'form-control', 'required':'', 'autofocus':''}), 'group': forms.Select(attrs={'class': 'form-control'}) } + + +class AdditionalTelephoneForm(forms.ModelForm): + class Meta: + model = models.AdditionalTelephone + exclude = ['abon'] + widgets = { + 'telephone': forms.TextInput(attrs={ + 'placeholder': _('telephone placeholder'), + 'pattern': TELEPHONE_REGEXP, + 'required': '', + 'class': 'form-control' + }), + 'owner_name': forms.TextInput(attrs={'class': 'form-control', 'required':''}) + } diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index 7e81d54..35afe9e 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -951,3 +951,45 @@ msgstr "Пользователь, который не является перс msgid "Ip not passed" msgstr "Ip адрес не передан" + +msgid "Additional telephone" +msgstr "Дополнительный телефон" + +msgid "Additional telephones" +msgstr "Дополнительные телефоны" + +msgid "Abon group" +msgstr "Группа абонентов" + +msgid "Abon groups" +msgstr "Группы абонентов" + +msgid "Abon service" +msgstr "Услуга абонента" + +msgid "Abon services" +msgstr "Услуги абонентов" + +msgid "Abon" +msgstr "Абонент" + +msgid "Abons" +msgstr "Абоненты" + +msgid "New telephone has been saved" +msgstr "Новый телефон сохранен" + +msgid "Add telephone" +msgstr "Добавить номер телефона" + +msgid "Telephone owner" +msgstr "Владелец телефона" + +msgid "Additional telephones not found" +msgstr "Дополнительные телефоны не найдены" + +msgid "Additional telephone successfully deleted" +msgstr "Номер телефона успешно удалён" + +msgid "Telephone not found" +msgstr "Телефон не найден" diff --git a/abonapp/models.py b/abonapp/models.py index ec59e76..d492f82 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.core.exceptions import ValidationError +from django.core.validators import RegexValidator from django.utils import timezone from django.db import models from django.core import validators @@ -11,6 +12,9 @@ from mydefs import MyGenericIPAddressField, ip2int, LogicError, ip_addr_regex from django.conf import settings +TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') + + class AbonGroup(models.Model): title = models.CharField(max_length=127, unique=True) profiles = models.ManyToManyField(UserProfile, blank=True, related_name='abon_groups') @@ -21,6 +25,8 @@ class AbonGroup(models.Model): permissions = ( ('can_add_ballance', _('fill account')), ) + verbose_name = _('Abon group') + verbose_name_plural = _('Abon groups') def __str__(self): return self.title @@ -68,6 +74,8 @@ class AbonTariff(models.Model): permissions = ( ('can_complete_service', _('finish service perm')), ) + verbose_name = _('Abon service') + verbose_name_plural = _('Abon services') class AbonStreet(models.Model): @@ -79,6 +87,8 @@ class AbonStreet(models.Model): class Meta: db_table = 'abon_street' + verbose_name = _('Street') + verbose_name_plural = _('Streets') class ExtraFieldsModel(models.Model): @@ -146,6 +156,8 @@ class Abon(UserProfile): ('can_buy_tariff', _('Buy service perm')), ('can_view_passport', _('Can view passport')) ) + verbose_name = _('Abon') + verbose_name_plural = _('Abons') # Платим за что-то def make_pay(self, curuser, how_match_to_pay=0.0): @@ -317,6 +329,26 @@ class AbonRawPassword(models.Model): db_table = 'abon_raw_password' +class AdditionalTelephone(models.Model): + abon = models.ForeignKey(Abon, related_name='additional_telephones') + telephone = models.CharField( + max_length=16, + verbose_name=_('Telephone'), + # unique=True, + validators=[RegexValidator(TELEPHONE_REGEXP)] + ) + owner_name = models.CharField(max_length=127) + + def __str__(self): + return "%s - (%s)" % (self.owner_name, self.telephone) + + class Meta: + db_table = 'additional_telephones' + ordering = ('owner_name',) + verbose_name = _('Additional telephone') + verbose_name_plural = _('Additional telephones') + + def abon_post_save(sender, instance, **kwargs): timeout = None if hasattr(instance, 'is_dhcp') and instance.is_dhcp: diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html index e5883ae..4cf8744 100644 --- a/abonapp/templates/abonapp/editAbon.html +++ b/abonapp/templates/abonapp/editAbon.html @@ -31,9 +31,15 @@
diff --git a/abonapp/templates/abonapp/modal_additional_telephones.html b/abonapp/templates/abonapp/modal_additional_telephones.html new file mode 100644 index 0000000..5782e6b --- /dev/null +++ b/abonapp/templates/abonapp/modal_additional_telephones.html @@ -0,0 +1,37 @@ +{% load i18n %} + +| {% trans 'Telephone owner' %} | +{% trans 'Telephone' %} | ++ |
|---|---|---|
| {{ t.owner_name }} | +{{ t.telephone }} | ++ + + + | +
| {% trans 'Additional telephones not found' %} | +||