Browse Source

Merge branch 'devel' of https://github.com/bashmak/djing into devel

devel
http 9 years ago
parent
commit
4afd8b69bb
  1. 1
      abonapp/admin.py
  2. 16
      abonapp/forms.py
  3. 15
      abonapp/locale/ru/LC_MESSAGES/django.po
  4. 21
      abonapp/migrations/0015_auto_20170410_1737.py
  5. 35
      abonapp/migrations/0015_passportinfo.py
  6. 11
      abonapp/models.py
  7. 2
      abonapp/templates/abonapp/group_tariffs.html
  8. 26
      abonapp/templates/abonapp/passport_view.html
  9. 2
      abonapp/urls_abon.py
  10. 36
      abonapp/views.py
  11. 12
      searchapp/views.py
  12. 10
      taskapp/locale/ru/LC_MESSAGES/django.po

1
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.Opt82)
admin.site.register(models.PassportInfo)

16
abonapp/forms.py

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from django.utils.translation import ugettext as _
from django import forms
from django.contrib.auth.hashers import make_password
@ -96,3 +97,18 @@ class AbonGroupForm(forms.ModelForm):
'title': forms.TextInput(attrs={'class': 'form-control'}),
'profiles': forms.TextInput(attrs={'class': 'form-control'})
}
class PassportForm(forms.ModelForm):
class Meta:
model = models.PassportInfo
exclude = ['abon']
widgets = {
'series': forms.TextInput(attrs={'class': 'form-control', 'required': '', 'pattern': '^\d{4}$'}),
'number': forms.TextInput(attrs={'class': 'form-control', 'required': '', 'pattern': '^\d{6}$'}),
'distributor': forms.TextInput(attrs={'class': 'form-control', 'required': ''}),
'date_of_acceptance': forms.DateInput(attrs={'class': 'form-control', 'required': ''})
}
initials = {
'date_of_acceptance': datetime(year=2014, month=6, day=1)
}

15
abonapp/locale/ru/LC_MESSAGES/django.po

@ -717,3 +717,18 @@ msgstr "Ошибка в SNMP на устройстве"
msgid "No streets found for that group"
msgstr "Не найдены улицы для группы"
msgid "Date of acceptance"
msgstr "Дата выдачи"
msgid "Passport information has been saved"
msgstr "Информация о паспорте сохранена"
msgid "Abon does not exist"
msgstr "Абонент не найден"
msgid "Passport info for the user does not exist"
msgstr "Для абонента не найдены паспортные данные"
msgid "currency"
msgstr "руб"

21
abonapp/migrations/0015_auto_20170410_1737.py

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2017-04-10 14:37
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('abonapp', '0014_auto_20170330_1452'),
]
operations = [
migrations.AlterField(
model_name='abon',
name='opt82',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.Opt82'),
),
]

35
abonapp/migrations/0015_passportinfo.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2017-04-11 10:43
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import re
class Migration(migrations.Migration):
dependencies = [
('abonapp', '0014_auto_20170330_1452'),
]
operations = [
migrations.CreateModel(
name='PassportInfo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('series', models.CharField(max_length=4, validators=[django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', message='Enter a valid integer.')])),
('number', models.CharField(max_length=6, validators=[django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', message='Enter a valid integer.')])),
('distributor', models.CharField(max_length=64)),
('date_of_acceptance', models.DateField()),
('abon', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.Abon')),
],
),
migrations.AlterField(
model_name='abon',
name='opt82',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
to='abonapp.Opt82'),
)
]

11
abonapp/models.py

@ -335,6 +335,17 @@ class Abon(UserProfile):
return AbonStruct(self.pk, user_ip, agent_trf, bool(self.is_active))
class PassportInfo(models.Model):
series = models.CharField(max_length=4, validators=[validators.integer_validator])
number = models.CharField(max_length=6, validators=[validators.integer_validator])
distributor = models.CharField(max_length=64)
date_of_acceptance = models.DateField()
abon = models.OneToOneField(Abon, on_delete=models.SET_NULL, blank=True, null=True)
def __unicode__(self):
return "%s %s" % (self.series, self.number)
class InvoiceForPayment(models.Model):
abon = models.ForeignKey(Abon)
status = models.BooleanField(default=False)

2
abonapp/templates/abonapp/group_tariffs.html

@ -21,7 +21,7 @@
{% else %}
<input name="tr" type="checkbox" value="{{ tariff.pk }}"/>
{% endif %}
{{ tariff.title }}
{{ tariff.title }}, {{ tariff.amount }}{% trans 'currency' %}, {{ tariff.speedOut }}Mbit/s | {{ tariff.speedIn }}Mbit/s
</label>
</div>
{% endfor %}

26
abonapp/templates/abonapp/passport_view.html

@ -9,31 +9,39 @@
<h3 class="panel-title">{% trans 'Passport information' %}</h3>
</div>
<div class="panel-body">
<form role="form" class="form-horizontal" action="" method="get">
<form role="form" class="form-horizontal" action="{% url 'abonapp:passport_view' abon_group.pk abon.pk %}" method="post">{% csrf_token %}
<div class="form-group-sm">
<label for="pasp_num" class="col-sm-3 control-label">{% trans 'Pasport serial' %}</label>
<label for="id_series" class="col-sm-3 control-label">{% trans 'Pasport serial' %}</label>
<div class="col-sm-9">
<input type="text" name="pasp_num" class="form-control" id="pasp_num"/>
{{ frm.series }}{{ frm.series.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="pasp_sr" class="col-sm-3 control-label">{% trans 'Pasport number' %}</label>
<label for="id_number" class="col-sm-3 control-label">{% trans 'Pasport number' %}</label>
<div class="col-sm-9">
<input type="text" name="pasp_sr" class="form-control" id="pasp_sr"/>
{{ frm.number }}{{ frm.number.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="wr" class="col-sm-3 control-label">{% trans 'Distributor' %}</label>
<label for="id_distributor" class="col-sm-3 control-label">{% trans 'Distributor' %}</label>
<div class="col-sm-9">
<input type="text" name="wr" class="form-control" id="wr"/>
{{ frm.distributor }}{{ frm.distributor.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="birthday" class="col-sm-3 control-label">{% trans 'Birthday' %}</label>
<label for="id_date_of_acceptance" class="col-sm-3 control-label">{% trans 'Date of acceptance' %}</label>
<div class="col-sm-9">
<input type="text" name="birthday" class="form-control" id="birthday"/>
{{ frm.date_of_acceptance }}{{ frm.date_of_acceptance.errors }}
</div>
<script type="text/javascript" src="/static/js/datetime_with_moment.min.js"></script>
<script type="text/javascript">
$(function () {
$('#id_date_of_acceptance').datetimepicker({
format: 'YYYY-MM-DD'
});
});
</script>
</div>
<div class="form-group-sm">

2
abonapp/urls_abon.py

@ -5,7 +5,7 @@ from . import views
urlpatterns = [
url(r'^$', views.peoples, name='people_list'),
url(r'^addabon$', views.addabon, name='add_abon'),
url(r'^groups$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^(?P<uid>\d+)$', views.abonhome, name='abon_home'),
url(r'^(?P<uid>\d+)/services$', views.abon_services, name='abon_services'),

36
abonapp/views.py

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from json import dumps
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied
from django.core.exceptions import PermissionDenied, MultipleObjectsReturned
from django.db import IntegrityError
from django.db.models import Count
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
@ -256,8 +256,13 @@ def abonhome(request, gid, uid):
if abon.opt82 is None:
ip_str = request.POST.get('ip')
if ip_str:
ip = IpPoolItem.objects.get(ip=ip_str)
abon.ip_address = ip
try:
ip = IpPoolItem.objects.get(ip=ip_str)
abon.ip_address = ip
except MultipleObjectsReturned:
ips = models.IpPoolItem.objects.filter(ip=ip_str)
ips[1:].delete()
abon.ip_address = ips[0]
else:
abon.ip_address = None
frm.save()
@ -592,10 +597,31 @@ def task_log(request, gid, uid):
@login_required
@mydefs.only_admins
def passport_view(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
try:
abon = models.Abon.objects.get(pk=uid)
if request.method == 'POST':
frm = forms.PassportForm(request.POST)
if frm.is_valid():
passp_instance = frm.save(commit=False)
passp_instance.abon = abon
passp_instance.save()
messages.success(request, _('Passport information has been saved'))
return redirect('abonapp:passport_view', gid=gid, uid=uid)
else:
messages.error(request, _('fix form errors'))
else:
passp_instance = models.PassportInfo.objects.get(abon=abon)
frm = forms.PassportForm(instance=passp_instance)
except models.Abon.DoesNotExist:
messages.error(request, _('Abon does not exist'))
return redirect('abonapp:people_list', gid=gid)
except models.PassportInfo.DoesNotExist:
messages.warning(request, _('Passport info for the user does not exist'))
frm = forms.PassportForm()
return render(request, 'abonapp/passport_view.html', {
'abon_group': get_object_or_404(models.AbonGroup, pk=gid),
'abon': abon
'abon': abon,
'frm': frm
})

12
searchapp/views.py

@ -4,7 +4,7 @@ from django.db.models import Q
from django.shortcuts import render
from django.utils.html import escape
from abonapp.models import Abon
from abonapp.models import Abon, IpPoolItem
def replace_without_case(orig, old, new):
@ -15,11 +15,11 @@ def home(request):
s = request.GET.get('s')
if s:
abons = Abon.objects.filter(
Q(fio__icontains=s) |
Q(username__icontains=s) |
Q(telephone__icontains=s)
)
ips = IpPoolItem.objects.filter(ip=s)
query = Q(fio__icontains=s) | Q(username__icontains=s) | Q(telephone__icontains=s)
if ips.count() > 0:
query |= Q(ip_address__in=ips)
abons = Abon.objects.filter(query)
else:
abons = []

10
taskapp/locale/ru/LC_MESSAGES/django.po

@ -31,12 +31,8 @@ msgid "locality %s.\n"
msgstr "с. %s\n"
#: taskapp/handle.py:33
#, fuzzy, python-format
#| msgid "address %s. telephone %s. "
msgid ""
"address %s %s.\n"
"telephone %s\n"
msgstr "по адресу %s тел. %s. "
msgid "address %s %s.\ntelephone %s\n"
msgstr "по адресу %s %s тел. %s.\n"
#: taskapp/handle.py:34 taskapp/models.py:26
msgid "not chosen"
@ -46,7 +42,7 @@ msgstr "не выбрано"
#, fuzzy, python-format
#| msgid "Task type"
msgid "Task type - %s.\n"
msgstr "Тип задачи"
msgstr "Тип задачи - %s.\n"
#: taskapp/models.py:14
msgid "Higher"

Loading…
Cancel
Save