diff --git a/abonapp/forms.py b/abonapp/forms.py index 9a7f7ef..850601a 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from django import forms +from django.contrib.auth.hashers import make_password from random import choice -from string import digits +from string import digits, ascii_lowercase from . import models @@ -18,6 +19,10 @@ def generate_random_username(length=6, chars=digits, split=2, delimiter=''): return username +def generate_random_password(): + return generate_random_username(length=8, chars=digits+ascii_lowercase) + + class AbonForm(forms.ModelForm): username = forms.CharField(max_length=127, required=False, initial=generate_random_username, widget=forms.TextInput(attrs={ 'placeholder': 'Логин', @@ -25,6 +30,9 @@ class AbonForm(forms.ModelForm): 'required':'' })) + password = forms.CharField(max_length=64, initial=generate_random_password, + widget=forms.TextInput(attrs={'class': 'form-control', 'required':''})) + class Meta: model = models.Abon fields = ['username', 'telephone', 'fio', 'group', 'description', 'street', 'house', 'is_active'] @@ -47,6 +55,23 @@ class AbonForm(forms.ModelForm): 'is_active': forms.NullBooleanSelect(attrs={'class': 'form-control'}) } + def save(self, commit=True): + raw_password = self.cleaned_data['password'] + acc = super().save(commit=False) + acc.password = make_password(raw_password) + if commit: + acc.save() + try: + abon_raw_passw = models.AbonRawPassword.objects.get(account=acc) + abon_raw_passw.passw_text = raw_password + abon_raw_passw.save(update_fields=['passw_text']) + except models.AbonRawPassword.DoesNotExist: + models.AbonRawPassword.create( + account=acc, + passw_text=raw_password + ) + return acc + class AbonGroupForm(forms.ModelForm): class Meta: diff --git a/abonapp/models.py b/abonapp/models.py index 6d8df5e..6e6daab 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -153,13 +153,15 @@ class AbonStreet(models.Model): def __str__(self): return self.name + class Meta: + db_table = 'abon_street' + class Abon(UserProfile): current_tariffs = models.ManyToManyField(Tariff, through=AbonTariff) group = models.ForeignKey(AbonGroup, models.SET_NULL, blank=True, null=True) ballance = models.FloatField(default=0.0, validators=[DecimalValidator]) ip_address = models.OneToOneField(IpPoolItem, on_delete=models.SET_NULL, null=True, blank=True) - #TODO: надо ж пароль для абонента создавать description = models.TextField(null=True, blank=True) street = models.ForeignKey(AbonStreet, on_delete=models.SET_NULL, null=True, blank=True) house = models.CharField(max_length=12, null=True, blank=True) @@ -352,12 +354,23 @@ class AllPayLog(models.Model): ordering = ('date_action',) +class AbonRawPassword(models.Model): + account = models.OneToOneField(Abon, primary_key=True) + passw_text = models.CharField(max_length=64) + + def __str__(self): + return "%s - %s" % (self.account, self.passw_text) + + class Meta: + db_table = 'abon_raw_password' + + def abon_post_save(sender, instance, **kwargs): - print('abon_post_save', instance.username) - print('Instance:', instance.pk, sender) try: tm = Transmitter() - agent_abon = instance.build_agent_struct() + agent_abon = instance.build_agent_struct() + if agent_abon is None: + return True if kwargs['created']: # создаём абонента tm.add_user(agent_abon) @@ -396,7 +409,6 @@ def abon_del_signal(sender, instance, **kwargs): def abontariff_post_save(sender, instance, **kwargs): - print('abontariff_post_save') # Тут или подключение абону услуги, или изменение приоритета if not kwargs['created']: # если изменение приоритета то не говорим об этом NAS'у @@ -405,6 +417,8 @@ def abontariff_post_save(sender, instance, **kwargs): return try: agent_abon = instance.abon.build_agent_struct() + if agent_abon is None: + return True tm = Transmitter() # найдём абонента на NAS queue = tm.find_queue('uid%d' % instance.abon.pk) diff --git a/templates/abonapp/addAbon.html b/templates/abonapp/addAbon.html index 99937fc..c63cce7 100644 --- a/templates/abonapp/addAbon.html +++ b/templates/abonapp/addAbon.html @@ -71,6 +71,15 @@ +
{{ abon.description }}
{% endif %}