Browse Source

remove extra field

devel
bashmak 8 years ago
parent
commit
7b36eb5538
  1. 1
      abonapp/admin.py
  2. 11
      abonapp/forms.py
  3. 44
      abonapp/models.py
  4. 65
      abonapp/templates/abonapp/editAbon.html
  5. 45
      abonapp/templates/abonapp/modal_extra_field.html
  6. 13
      abonapp/urls.py
  7. 59
      abonapp/views.py

1
abonapp/admin.py

@ -9,7 +9,6 @@ admin.site.register(models.AbonTariff)
admin.site.register(models.AbonStreet)
admin.site.register(models.AllTimePayLog)
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)

11
abonapp/forms.py

@ -106,17 +106,6 @@ class PassportForm(forms.ModelForm):
}
class ExtraFieldForm(forms.ModelForm):
class Meta:
model = models.ExtraFieldsModel
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'}),
'field_type': forms.Select(attrs={'class': 'form-control'}),
'data': forms.TextInput(attrs={'class': 'form-control'})
}
class AbonStreetForm(forms.ModelForm):
class Meta:
model = models.AbonStreet

44
abonapp/models.py

@ -16,7 +16,6 @@ from accounts_app.models import UserProfile, MyUserManager, BaseAccount
from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult, NasNetworkError
from group_app.models import Group
from djing.lib import ip2int, LogicError
from djing import IP_ADDR_REGEX
from tariff_app.models import Tariff, PeriodicPay
from bitfield import BitField
@ -84,48 +83,6 @@ class AbonStreet(models.Model):
ordering = ('name',)
class ExtraFieldsModel(models.Model):
DYNAMIC_FIELD_TYPES = (
('int', _('Digital field')),
('str', _('Text field')),
('dbl', _('Floating field')),
('ipa', _('Ip Address'))
)
title = models.CharField(max_length=16, default='no title')
field_type = models.CharField(max_length=3, choices=DYNAMIC_FIELD_TYPES, default='str')
data = models.CharField(max_length=64, null=True, blank=True)
def get_regexp(self):
if self.field_type == 'int':
return r'^[+-]?\d+$'
elif self.field_type == 'dbl':
return r'^[-+]?\d+[,.]\d+$'
elif self.field_type == 'str':
return r'^[a-zA-ZА-Яа-я0-9]+$'
elif self.field_type == 'ipa':
return IP_ADDR_REGEX
def clean(self):
d = self.data
if self.field_type == 'int':
validators.validate_integer(d)
elif self.field_type == 'dbl':
try:
float(d)
except ValueError:
raise ValidationError(_('Double invalid value'), code='invalid')
elif self.field_type == 'str':
str_validator = validators.MaxLengthValidator(64)
str_validator(d)
def __str__(self):
return "%s: %s" % (self.get_field_type_display(), self.data)
class Meta:
db_table = 'abon_extra_fields'
class AbonManager(MyUserManager):
def get_queryset(self):
return super(MyUserManager, self).get_queryset().filter(is_admin=False)
@ -139,7 +96,6 @@ class Abon(BaseAccount):
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)
extra_fields = models.ManyToManyField(ExtraFieldsModel, blank=True)
device = models.ForeignKey('devapp.Device', null=True, blank=True, on_delete=models.SET_NULL)
dev_port = models.ForeignKey('devapp.Port', null=True, blank=True, on_delete=models.SET_NULL)
is_dynamic_ip = models.BooleanField(default=False)

65
abonapp/templates/abonapp/editAbon.html

@ -194,51 +194,36 @@
</div>
</div>
{% endif %}
{% if perms.abonapp.add_extrafieldsmodel %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Extra fields' %}</h3>
<h3 class="panel-title">{% trans 'Ip addresses' %}</h3>
</div>
<div class="panel-body">
<form class="form-horizontal" action="{% url 'abonapp:extra_field_edit' group.pk abon.username %}" method="post">{% csrf_token %}
{% for ef in abon.extra_fields.all %}
<div class="form-group-sm">
<label class="col-sm-4 control-label">{{ ef.title }}</label>
<div class="col-sm-8">
<div class="input-group input-group-sm">
<input type="text" value="{{ ef.data|default:_('Not assigned') }}" class="form-control" pattern="{{ ef.get_regexp }}" name="ex">
<input type="hidden" value="{{ ef.pk }}" name="ed">
<span class="input-group-btn">
<a href="{% url 'abonapp:extra_field_delete' group.pk abon.username ef.pk %}" class="btn btn-danger" title="{% trans 'Delete' %}">
<span class="glyphicon glyphicon-remove"></span>
</a>
</span>
</div>
</div>
</div>
{% empty %}
<h3>{% trans 'Extra field does not exist' %}</h3>
{% endfor %}
<div class="form-group-sm">
<div class="col-sm-offset-4 col-sm-8 btn-group btn-group-sm">
<a href="{% url 'abonapp:extra_field' group.pk abon.username %}" class="btn btn-success btn-modal" title="{% trans 'Add extra field' %}">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add' %}
</a>
<button class="btn btn-primary" type="submit">
<span class="glyphicon glyphicon-edit"></span> {% trans 'Save' %}
</button>
</div>
</div>
</form>
<ul class="list-group">
{% for lease in abon.ip_addresses.all %}
<li class="list-group-item">
{% if lease.is_active %}
<a href="{% url 'abonapp:user_session_free' group.pk abon.username lease.pk %}" class="btn btn-default btn-sm" title="{% trans 'Free session' %}">&times;</a>
{% else %}
<a href="#" disabled class="btn btn-default btn-sm">&times;</a>
{% endif %}
<span{{ lease.is_active|yesno:', class="text-muted"'|safe }}>
<b>{{ lease }}</b>
<small>{% trans 'Leased by:' %} {{ lease.lease_time|date:'d-m H:i:s' }}</small>
</span>
</li>
{% empty %}
<li class="list-group-item">{% trans 'Leases does not found' %}</li>
{% endfor %}
</ul>
<div class="panel-footer">
<a href="#" class="btn btn-default btn-sm">
<span class="glyphicon glyphicon-plus"></span>
<span class="hidden-xs">{% trans 'Add' %}</span>
</a>
</div>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'User flags' %}</h3>

45
abonapp/templates/abonapp/modal_extra_field.html

@ -1,45 +0,0 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:extra_field' gid abon.username %}" method="post"> {% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-plus"></span> {% trans 'Add extra field' %}</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="id_title">{% trans 'Field title' %}</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-text-background"></span></span>
{{ frm.title }}{{ frm.title.errors }}
</div>
</div>
<div class="form-group">
<label for="id_field_type">{% trans 'Field type' %}</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-ice-lolly"></span></span>
{{ frm.field_type }}{{ frm.field_type.errors }}
</div>
</div>
<div class="form-group">
<label for="id_data">{% trans 'Field content' %}</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-paperclip"></span></span>
{{ frm.data }}{{ frm.data.errors }}
</div>
</div>
<div class="btn-group">
<button type="submit" class="btn btn-success">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add' %}
</button>
<button type="reset" class="btn btn-default">
<span class="glyphicon glyphicon-remove-circle"></span> {% trans 'Reset' %}
</button>
</div>
</div>
</form>

13
abonapp/urls.py

@ -15,10 +15,7 @@ subscriber_patterns = [
url(r'^passport_view/$', views.PassportUpdateView.as_view(), name='passport_view'),
url(r'^chart/$', views.charts, name='charts'),
url(r'^dials/$', views.DialsListView.as_view(), name='dials'),
url(r'^reset_ip/$', views.reset_ip, name='reset_ip'),
url(r'^extra_field/$', views.make_extra_field, name='extra_field'),
url(r'^extra_field/(?P<fid>\d+)/delete$', views.extra_field_delete, name='extra_field_delete'),
url(r'^extra_field/edit$', views.extra_field_change, name='extra_field_edit'),
# url(r'^reset_ip/$', views.reset_ip, name='reset_ip'),
url(r'^unsubscribe_service(?P<abon_tariff_id>\d+)/$', views.unsubscribe_service, name='unsubscribe_service'),
url(r'^dev/$', views.dev, name='dev'),
url(r'^del$', views.DelAbonDeleteView.as_view(), name='del_abon'),
@ -47,21 +44,13 @@ group_patterns = [
]
urlpatterns = [
url(r'^$', views.GroupListView.as_view(), name='group_list'),
url(r'^fin_report$', views.fin_report, name='fin_report'),
url(r'^(?P<gid>\d+)/', include(group_patterns)),
url(r'^log$', views.LogListView.as_view(), name='log'),
url(r'^pay$', views.terminal_pay, name='terminal_pay'),
url(r'^debtors$', views.DebtorsListView.as_view(), name='debtors'),
url(r'^ping$', views.abon_ping, name='ping'),
# Api's
url(r'^api/abons$', views.abons),
url(r'^api/abon_filter$', views.search_abon),

59
abonapp/views.py

@ -646,65 +646,6 @@ def charts(request, gid, uname):
})
@login_required
@permission_required('abonapp.add_extrafieldsmodel')
def make_extra_field(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
try:
if request.method == 'POST':
frm = forms.ExtraFieldForm(request.POST)
if frm.is_valid():
field_instance = frm.save()
abon.extra_fields.add(field_instance)
messages.success(request, _('Extra field successfully created'))
else:
messages.error(request, _('fix form errors'))
return redirect('abonapp:abon_home', gid=gid, username=uname)
else:
frm = forms.ExtraFieldForm()
except (NasNetworkError, NasFailedResult) as e:
messages.error(request, e)
frm = forms.ExtraFieldForm()
except lib.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
frm = forms.ExtraFieldForm()
return render_to_text('abonapp/modal_extra_field.html', {
'abon': abon,
'gid': gid,
'frm': frm
}, request=request)
@login_required
@permission_required('abonapp.change_extra_fields_model')
def extra_field_change(request, gid, uname):
try:
for ed, ex in zip(request.POST.getlist('ed'), request.POST.getlist('ex')):
extra_field = models.ExtraFieldsModel.objects.get(pk=ed)
extra_field.data = ex
extra_field.save(update_fields=('data',))
messages.success(request, _("Extra fields has been saved"))
except models.ExtraFieldsModel.DoesNotExist:
messages.error(request, _('One or more extra fields has not been saved'))
return redirect('abonapp:abon_home', gid=gid, uname=uname)
@login_required
@permission_required('abonapp.delete_extra_fields_model')
def extra_field_delete(request, gid, uname, fid):
abon = get_object_or_404(models.Abon, username=uname)
try:
extra_field = models.ExtraFieldsModel.objects.get(pk=fid)
abon.extra_fields.remove(extra_field)
extra_field.delete()
messages.success(request, _('Extra field successfully deleted'))
except models.ExtraFieldsModel.DoesNotExist:
messages.warning(request, _('Extra field does not exist'))
return redirect('abonapp:abon_home', gid=gid, uname=uname)
@login_required
@permission_required('abonapp.can_ping')
@json_view

Loading…
Cancel
Save