Browse Source

refactoring add subscriber form

devel
bashmak 8 years ago
parent
commit
3498e6b769
  1. 6
      abonapp/forms.py
  2. 63
      abonapp/templates/abonapp/addAbon.html
  3. 2
      abonapp/urls.py
  4. 103
      abonapp/views.py

6
abonapp/forms.py

@ -63,7 +63,6 @@ class AbonForm(forms.ModelForm):
widgets = {
'fio': forms.TextInput(attrs={
'placeholder': _('fio'),
'class': "form-control",
'required': ''
}),
'telephone': forms.TextInput(attrs={
@ -72,10 +71,7 @@ class AbonForm(forms.ModelForm):
'required': '',
'class': 'form-control'
}),
'group': forms.Select(attrs={'class': 'form-control'}),
'description': forms.Textarea(attrs={'class': 'form-control', 'rows': '4'}),
'street': forms.Select(attrs={'class': 'form-control'}),
'house': forms.TextInput(attrs={'class': 'form-control'}),
'description': forms.Textarea(attrs={'rows': '4'}),
'is_active': forms.NullBooleanSelect(attrs={'class': 'form-control'})
}

63
abonapp/templates/abonapp/addAbon.html

@ -1,5 +1,6 @@
{% extends request.is_ajax|yesno:'bajax.html,base.html' %}
{% load i18n %}
{% load bootstrap3 %}
{% block main %}
<ol class="breadcrumb">
@ -17,60 +18,26 @@
</div>
<div class="panel-body">
<form role="form" action="{% url 'abonapp:add_abon' group.id %}" method="post">{% csrf_token %}
<div class="form-group">
<label for="login">{% trans 'login' %}</label>
{% bootstrap_icon 'user' as ic %}
{% bootstrap_field form.username addon_before=ic %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
{{ form.username }}{{ form.username.errors }}
</div>
</div>
<div class="form-group">
<label for="fio">{% trans 'Long name' %}</label>
{% bootstrap_icon 'bookmark' as ic %}
{% bootstrap_field form.fio addon_before=ic %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-bookmark"></span></span>
{{ form.fio }}{{ form.fio.errors }}
</div>
</div>
<div class="form-group">
<label for="telephone">{% trans 'Telephone' %}</label>
{% bootstrap_icon 'phone' as ic %}
{% bootstrap_field form.telephone addon_before=ic %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-phone"></span></span>
{{ form.telephone }}{{ form.telephone.errors }}
</div>
</div>
<div class="form-group">
<label for="grp">{% trans 'User group' %}</label>
{% bootstrap_icon 'grain' as ic %}
{% bootstrap_field form.group addon_before=ic %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-grain"></span></span>
{{ form.group }}{{ form.group.errors }}
</div>
</div>
<div class="form-group">
<label for="id_description">{% trans 'Comment' %}</label>
{% bootstrap_icon 'comment' as ic %}
{% bootstrap_field form.description addon_before=ic %}
<span class="input-group-addon"><span class="glyphicon glyphicon-comment"></span></span>
{{ form.description }}{{ form.description.errors }}
</div>
<div class="form-group">
<label for="id_street">{% trans 'Street' %}</label>
{% bootstrap_icon 'road' as ic %}
{% bootstrap_field form.street addon_before=ic %}
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-road"></span></span>
{{ form.street }}{{ form.street.errors }}
</div>
</div>
<div class="form-group">
<label for="id_house">{% trans 'Apartment' %}</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-home"></span></span>
{{ form.house }}{{ form.house.errors }}
</div>
</div>
{% bootstrap_icon 'home' as ic %}
{% bootstrap_field form.house addon_before=ic %}
<div class="form-group">
<label for="id_password">{% trans 'Password' %}</label>

2
abonapp/urls.py

@ -35,7 +35,7 @@ subscriber_patterns = [
group_patterns = [
url(r'^$', views.PeoplesListView.as_view(), name='people_list'),
url(r'^addabon$', views.addabon, name='add_abon'),
url(r'^addabon$', views.AbonCreateView.as_view(), name='add_abon'),
url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^phonebook$', views.phonebook, name='phonebook'),
url(r'^export$', views.abon_export, name='abon_export'),

103
abonapp/views.py

@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-
from json import dumps
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied
from django.db import IntegrityError, ProgrammingError, transaction
@ -10,8 +8,9 @@ from django.http import HttpResponse, HttpResponseBadRequest
from django.contrib import messages
from django.utils.translation import gettext_lazy as _
from django.utils.decorators import method_decorator
from django.views.generic import ListView, UpdateView
from django.views.generic import ListView, UpdateView, CreateView
from django.conf import settings
from jsonview.decorators import json_view
from statistics.models import StatCache
from tariff_app.models import Tariff
@ -95,47 +94,60 @@ class GroupListView(BaseAbonListView):
return queryset
@login_required
@permission_required('abonapp.add_abon')
def addabon(request, gid):
frm = None
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
@method_decorator(permission_required('abonapp.add_abon'), name='dispatch')
class AbonCreateView(CreateView):
group = None
try:
group = get_object_or_404(Group, pk=gid)
abon = None
form_class = forms.AbonForm
template_name = 'abonapp/addAbon.html'
context_object_name = 'group'
def get_success_url(self):
return resolve_url('abonapp:abon_home', self.group.id, self.abon.username)
def dispatch(self, request, *args, **kwargs):
group = get_object_or_404(Group, pk=self.kwargs.get('gid'))
if not request.user.has_perm('group_app.can_view_group', group):
raise PermissionDenied
if request.method == 'POST':
frm = forms.AbonForm(request.POST, initial={'group': group})
if frm.is_valid():
abon = frm.save()
assign_perm("abonapp.change_abon", request.user, abon)
assign_perm("abonapp.delete_abon", request.user, abon)
assign_perm("abonapp.can_buy_tariff", request.user, abon)
assign_perm("abonapp.can_view_passport", request.user, abon)
assign_perm('abonapp.can_add_ballance', request.user, abon)
abon.sync_with_nas(created=True)
messages.success(request, _('create abon success msg'))
return redirect('abonapp:abon_home', group.id, abon.username)
else:
messages.error(request, _('fix form errors'))
self.group = group
return super(AbonCreateView, self).dispatch(request, *args, **kwargs)
except (IntegrityError, NasFailedResult, NasNetworkError, mydefs.LogicError) as e:
messages.error(request, e)
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
if not frm:
frm = forms.AbonForm(initial={
'group': group,
def get_initial(self):
return {
'group': self.group,
'address': _('Address'),
'is_active': False
})
}
return render(request, 'abonapp/addAbon.html', {
'form': frm,
'group': group
})
def get_context_data(self, **kwargs):
context = super(AbonCreateView, self).get_context_data(**kwargs)
context['group'] = self.group
return context
def form_valid(self, form):
try:
abon = form.save()
me = self.request.user
assign_perm("abonapp.change_abon", me, abon)
assign_perm("abonapp.delete_abon", me, abon)
assign_perm("abonapp.can_buy_tariff", me, abon)
assign_perm("abonapp.can_view_passport", me, abon)
assign_perm('abonapp.can_add_ballance', me, abon)
abon.sync_with_nas(created=True)
messages.success(self.request, _('create abon success msg'))
self.abon = abon
return super(AbonCreateView, self).form_valid(form)
except (IntegrityError, NasFailedResult, NasNetworkError, mydefs.LogicError) as e:
messages.error(self.request, e)
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.error(self.request, err)
return self.render_to_response(self.get_context_data(form=form))
def form_invalid(self, form):
messages.error(self.request, _('fix form errors'))
return super(AbonCreateView, self).form_invalid(form)
@login_required
@ -673,6 +685,7 @@ def extra_field_delete(request, gid, uname, fid):
@login_required
@permission_required('abonapp.can_ping')
@json_view
def abon_ping(request):
ip = request.GET.get('cmd_param')
status = False
@ -709,10 +722,10 @@ def abon_ping(request):
except NasNetworkError as e:
messages.warning(request, e)
return HttpResponse(dumps({
return {
'status': 0 if status else 1,
'dat': text
}))
}
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
@ -967,14 +980,15 @@ def abon_export(request, gid):
@login_required
@permission_required('abonapp.change_abon')
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
@json_view
def reset_ip(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
abon.ip_address = None
abon.save(update_fields=['ip_address'])
return HttpResponse(dumps({
return {
'status': 0,
'dat': "<span class='glyphicon glyphicon-refresh'></span>"
}))
}
@login_required
@ -1068,7 +1082,7 @@ class EditSibscriberMarkers(UpdateView):
# API's
@json_view
def abons(request):
ablist = [{
'id': abn.pk,
@ -1088,11 +1102,12 @@ def abons(request):
'tariffs': tarlist
}
del ablist, tarlist
return HttpResponse(dumps(data))
return data
@json_view
def search_abon(request):
word = request.GET.get('s')
results = models.Abon.objects.filter(fio__icontains=word)[:8]
results = [{'id': usr.pk, 'text': "%s: %s" % (usr.username, usr.fio)} for usr in results]
return HttpResponse(dumps(results, ensure_ascii=False))
return results
Loading…
Cancel
Save