Browse Source

Username in subscriber urls instead of id

devel
bashmak 8 years ago
parent
commit
49a7078662
  1. 16
      abonapp/forms.py
  2. 6
      abonapp/models.py
  3. 6
      abonapp/templates/abonapp/addInvoice.html
  4. 6
      abonapp/templates/abonapp/buy_tariff.html
  5. 2
      abonapp/templates/abonapp/charts.html
  6. 2
      abonapp/templates/abonapp/debtors.html
  7. 22
      abonapp/templates/abonapp/editAbon.html
  8. 14
      abonapp/templates/abonapp/ext.htm
  9. 4
      abonapp/templates/abonapp/invoiceForPayment.html
  10. 2
      abonapp/templates/abonapp/log.html
  11. 4
      abonapp/templates/abonapp/modal_abonamount.html
  12. 2
      abonapp/templates/abonapp/modal_add_phone.html
  13. 3
      abonapp/templates/abonapp/modal_additional_telephones.html
  14. 2
      abonapp/templates/abonapp/modal_dev.html
  15. 2
      abonapp/templates/abonapp/modal_extra_field.html
  16. 2
      abonapp/templates/abonapp/modal_periodic_pay.html
  17. 2
      abonapp/templates/abonapp/modal_user_markers.html
  18. 25
      abonapp/templates/abonapp/passport_view.html
  19. 4
      abonapp/templates/abonapp/payHistory.html
  20. 2
      abonapp/templates/abonapp/peoples.html
  21. 10
      abonapp/templates/abonapp/service.html
  22. 44
      abonapp/urls.py
  23. 49
      abonapp/urls_abon.py
  24. 153
      abonapp/views.py
  25. 7
      accounts_app/models.py
  26. 2
      devapp/templates/devapp/custom_dev_page/onu.html
  27. 2
      devapp/templates/devapp/manage_ports/fix_abon_device.html
  28. 2
      devapp/templates/devapp/manage_ports/modal_show_subscriber_on_port.html
  29. 2
      dialing_app/views.py
  30. 2
      searchapp/templates/searchapp/index.html
  31. 2
      taskapp/templates/taskapp/details.html
  32. 2
      taskapp/templates/taskapp/tasklist.html
  33. 2
      taskapp/templates/taskapp/tasklist_all.html
  34. 2
      taskapp/templates/taskapp/tasklist_failed.html
  35. 2
      taskapp/templates/taskapp/tasklist_finish.html
  36. 2
      taskapp/templates/taskapp/tasklist_own.html

16
abonapp/forms.py

@ -49,13 +49,13 @@ class AbonForm(forms.ModelForm):
username = forms.CharField(max_length=127, required=False, initial=generate_random_username,
widget=forms.TextInput(attrs={
'placeholder': _('login'),
'class': "form-control",
'required': ''
'required': '',
'pattern': r'^\w{1,127}$'
}))
password = forms.CharField(max_length=64, initial=generate_random_password,
widget=forms.TextInput(
attrs={'class': 'form-control', 'type': 'password', 'autocomplete': 'new-password'}))
password = forms.CharField(max_length=64, initial=generate_random_password, widget=forms.TextInput(attrs={
'class': 'form-control', 'type': 'password', 'autocomplete': 'new-password'
}))
class Meta:
model = models.Abon
@ -102,9 +102,9 @@ class PassportForm(forms.ModelForm):
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': ''}),
'series': forms.TextInput(attrs={'required': '', 'pattern': '^\d{4}$'}),
'number': forms.TextInput(attrs={'required': '', 'pattern': '^\d{6}$'}),
'distributor': forms.TextInput(attrs={'required': ''}),
'date_of_acceptance': forms.DateInput(attrs={'class': 'form-control', 'required': ''})
}
initials = {

6
abonapp/models.py

@ -297,9 +297,9 @@ class Abon(BaseAccount):
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)
series = models.CharField(_('Pasport serial'), max_length=4, validators=[validators.integer_validator])
number = models.CharField(_('Pasport number'), max_length=6, validators=[validators.integer_validator])
distributor = models.CharField(_('Distributor'), max_length=64)
date_of_acceptance = models.DateField()
abon = models.OneToOneField(Abon, on_delete=models.SET_NULL, blank=True, null=True)

6
abonapp/templates/abonapp/addInvoice.html

@ -6,7 +6,7 @@
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'abonapp:group_list' %}">{% trans 'User groups' %}</a></li>
<li><a href="{% url 'abonapp:people_list' group.id %}">{{ group.title }}</a></li>
<li><a href="{% url 'abonapp:abon_home' group.id abon.id %}">{{ abon.fio }}</a></li>
<li><a href="{% url 'abonapp:abon_home' group.id abon.username %}">{{ abon.fio }}</a></li>
<li class="active">{% trans 'Add debt' %}</li>
</ol>
@ -15,11 +15,11 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Add receipt for' %}
<u><a href="{% url 'abonapp:abon_home' group.id abon.id %}">{{ abon.fio }}</a></u>
<u><a href="{% url 'abonapp:abon_home' group.id abon.username %}">{{ abon.fio }}</a></u>
</h3>
</div>
<div class="panel-body">
<form role="form" action="{% url 'abonapp:add_invoice' group.id abon.id %}"
<form role="form" action="{% url 'abonapp:add_invoice' group.id abon.username %}"
method="post">{% csrf_token %}
<div class="form-group">
<label for="pamount">{% trans 'Sum of pay' %}</label>

6
abonapp/templates/abonapp/buy_tariff.html

@ -6,7 +6,7 @@
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'abonapp:group_list' %}">{% trans 'User groups' %}</a></li>
<li><a href="{% url 'abonapp:people_list' group.pk %}">{{ group.title }}</a></li>
<li><a href="{% url 'abonapp:abon_home' group.pk abon.pk %}">{{ abon.fio }}</a></li>
<li><a href="{% url 'abonapp:abon_home' group.pk abon.username %}">{{ abon.fio }}</a></li>
<li class="active">{% trans 'Pick a service' %}</li>
</ol>
@ -15,11 +15,11 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Pick a service for' %}
<a href="{% url 'abonapp:abon_home' group.pk abon.pk %}"><u>{% trans 'Sub' %}</u></a>
<a href="{% url 'abonapp:abon_home' group.pk abon.username %}"><u>{% trans 'Sub' %}</u></a>
</h3>
</div>
<div class="panel-body">
<form role="form" action="{% url 'abonapp:pick_tariff' group.pk abon.pk %}"
<form role="form" action="{% url 'abonapp:pick_tariff' group.pk abon.username %}"
method="post">{% csrf_token %}
<div class="form-group">
{% if tariffs %}

2
abonapp/templates/abonapp/charts.html

@ -43,7 +43,7 @@
{% else %}
<h2>{% trans 'Static info was Not found' %}</h2>
{% endif %}
<form action="{% url 'abonapp:charts' group.pk abon.pk %}" method="get" class="input-group">
<form action="{% url 'abonapp:charts' group.pk abon.username %}" method="get" class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-calendar"></span> {% trans 'Show graph by date' %}

2
abonapp/templates/abonapp/debtors.html

@ -28,7 +28,7 @@
{% for invoice in invoices %}
<tr>
<td>{{ invoice.id }}</td>
<td><a href="{% url 'abonapp:abon_home' invoice.abon.group.id invoice.abon.id %}"
<td><a href="{% url 'abonapp:abon_home' invoice.abon.group.id invoice.abon.username %}"
target="_blank">{{ invoice.abon.username }}</a></td>
<td>{{ invoice.amount }}</td>
<td>{{ invoice.comment }}</td>

22
abonapp/templates/abonapp/editAbon.html

@ -10,7 +10,7 @@
<h3 class="panel-title">{% trans 'Change subscriber' %}</h3>
</div>
<div class="panel-body">
<form autocomplete="off" class="form-horizontal" action="{% url 'abonapp:abon_home' group.pk abon.pk %}" method="post">{% csrf_token %}
<form autocomplete="off" class="form-horizontal" action="{% url 'abonapp:abon_home' group.pk abon.username %}" method="post">{% csrf_token %}
{% bootstrap_field form.username label_class='col-sm-4' field_class='col-sm-8' form_group_class='form-group-sm' %}
{% bootstrap_field form.fio label_class='col-sm-4' field_class='col-sm-8' form_group_class='form-group-sm' %}
@ -24,10 +24,10 @@
<a href="sip:{{ form.telephone.value }}" class="btn btn-default" data-toggle="tooltip" title="{% trans 'Call to' %}">
<span class="glyphicon glyphicon-earphone"></span>
</a>
<a href="{% url 'abonapp:telephones' group.pk abon.pk %}" class="btn btn-default btn-modal" data-toggle="tooltip" title="{% trans 'Additional telephones' %}">
<a href="{% url 'abonapp:telephones' group.pk abon.username %}" class="btn btn-default btn-modal" data-toggle="tooltip" title="{% trans 'Additional telephones' %}">
<span class="glyphicon glyphicon-list"></span>
</a>
<a href="{% url 'abonapp:telephone_new' group.pk abon.pk %}" class="btn btn-default btn-modal" data-toggle="tooltip" title="{% trans 'Add telephone' %}">
<a href="{% url 'abonapp:telephone_new' group.pk abon.username %}" class="btn btn-default btn-modal" data-toggle="tooltip" title="{% trans 'Add telephone' %}">
<span class="glyphicon glyphicon-plus"></span>
</a>
</span>
@ -41,7 +41,7 @@
<div class="input-group input-group-sm">
<input type="text" value="{{ ip|default:'' }}" class="form-control" name="ip" placeholder="{% trans 'Not assigned' %}" id="ipfield" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"{% if abon.is_dynamic_ip %} disabled{% endif %}/>
<span class="input-group-btn">
<a href="{% url 'abonapp:reset_ip' group.pk abon.pk %}" class="btn btn-default btn-cmd" data-toggle="tooltip" title="{% trans 'Reset ip' %}" onclick="$('#ipfield').val('');">
<a href="{% url 'abonapp:reset_ip' group.pk abon.username %}" class="btn btn-default btn-cmd" data-toggle="tooltip" title="{% trans 'Reset ip' %}" onclick="$('#ipfield').val('');">
<span class="glyphicon glyphicon-refresh"></span>
</a>
</span>
@ -116,7 +116,7 @@
</div>
<div class="panel-body">
<form class="form-horizontal" action="{% url 'abonapp:save_user_dev_port' group.pk abon.pk %}" method="post">{% csrf_token %}
<form class="form-horizontal" action="{% url 'abonapp:save_user_dev_port' group.pk abon.username %}" method="post">{% csrf_token %}
<div class="form-group-sm">
<label for="id_method" class="col-sm-4 control-label">{% trans 'Device' %}</label>
@ -125,11 +125,11 @@
<a href="{% url 'devapp:view' group.pk device.pk %}" target="_blank" class="btn btn-sm btn-default" title="{% trans 'Mac Address' %}: {{ device.mac_addr|default:_('Not assigned') }}">
<span class="glyphicon glyphicon-hdd"></span> <span class="hidden-md">{{ device.comment|truncatechars:11 }} {{ device.ip_address }}</span>
</a>
<a href="{% url 'abonapp:clear_dev' group.pk abon.pk %}" class="btn btn-sm btn-danger">
<a href="{% url 'abonapp:clear_dev' group.pk abon.username %}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span> <span class="hidden-xs hidden-lg">{% trans 'Remove clutch' %}</span>
</a>
{% else %}
<a href="{% url 'abonapp:dev' group.pk abon.pk %}" class="btn btn-success btn-sm btn-modal">
<a href="{% url 'abonapp:dev' group.pk abon.username %}" class="btn btn-success btn-sm btn-modal">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add clutch' %}
</a>
{% endif %}
@ -177,7 +177,7 @@
<h3 class="panel-title">{% trans 'Extra fields' %}</h3>
</div>
<div class="panel-body">
<form class="form-horizontal" action="{% url 'abonapp:extra_field_edit' group.pk abon.pk %}" method="post">{% csrf_token %}
<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">
@ -188,7 +188,7 @@
<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.pk ef.pk %}" class="btn btn-danger" title="{% trans 'Delete' %}">
<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>
@ -202,7 +202,7 @@
<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.pk %}" class="btn btn-success btn-modal" title="{% trans 'Add extra field' %}">
<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>
@ -227,7 +227,7 @@
</div>
<div class="panel-footer">
<div class="btn-group">
<a href="{% url 'abonapp:markers_edit' group.pk abon.pk %}" class="btn btn-default btn-modal">
<a href="{% url 'abonapp:markers_edit' group.pk abon.username %}" class="btn btn-default btn-modal">
<span class="glyphicon glyphicon-edit"></span> {% trans 'Edit' %}
</a>
</div>

14
abonapp/templates/abonapp/ext.htm

@ -21,39 +21,39 @@
<ul class="nav nav-tabs nav-justified">
{% url 'abonapp:abon_home' group.pk abon.pk as abon_home %}
{% url 'abonapp:abon_home' group.pk abon.username as abon_home %}
<li{% if abon_home == request.path %} class="active"{% endif %}>
<a href="{{ abon_home }}">{% trans 'Sub information' %}</a>
</li>
{% url 'abonapp:abon_services' group.pk abon.pk as abserv %}
{% url 'abonapp:abon_services' group.pk abon.username as abserv %}
<li{% if abserv == request.path %} class="active"{% endif %}>
<a href="{{ abserv }}">{% trans 'Services' %}</a>
</li>
{% if perms.abonapp.can_view_passport %}
{% url 'abonapp:passport_view' group.pk abon.pk as passport_view_url %}
{% url 'abonapp:passport_view' group.pk abon.username as passport_view_url %}
<li{% if passport_view_url == request.path %} class="active"{% endif %}>
<a href="{{ passport_view_url }}">{% trans 'Passport information' %}</a>
</li>
{% endif %}
{% url 'abonapp:abon_phistory' group.pk abon.pk as abphist %}
{% url 'abonapp:abon_phistory' group.pk abon.username as abphist %}
<li{% if abphist == request.path %} class="active"{% endif %}>
<a href="{{ abphist }}">{% trans 'Payments' %}</a>
</li>
{% url 'abonapp:task_log' group.pk abon.pk as abtasklog %}
{% url 'abonapp:task_log' group.pk abon.username as abtasklog %}
<li{% if abtasklog == request.path %} class="active"{% endif %}>
<a href="{{ abtasklog }}">{% trans 'History of tasks' %}</a>
</li>
{% url 'abonapp:charts' group.pk abon.pk as abtasklog %}
{% url 'abonapp:charts' group.pk abon.username as abtasklog %}
<li{% if abtasklog == request.path %} class="active"{% endif %}>
<a href="{{ abtasklog }}">{% trans 'Charts' %}</a>
</li>
{% url 'abonapp:dials' group.pk abon.pk as abdials %}
{% url 'abonapp:dials' group.pk abon.username as abdials %}
<li{% if abdials == request.path %} class="active"{% endif %}>
<a href="{{ abdials }}">{% trans 'Dialing' %}</a>
</li>

4
abonapp/templates/abonapp/invoiceForPayment.html

@ -6,7 +6,7 @@
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'abonapp:group_list' %}">{% trans 'User groups' %}</a></li>
<li><a href="{% url 'abonapp:people_list' group.pk %}">{{ group.title }}</a></li>
<li><a href="{% url 'abonapp:abon_phistory' group.pk abon.pk %}">{{ abon.fio }}</a></li>
<li><a href="{% url 'abonapp:abon_phistory' group.pk abon.username %}">{{ abon.fio }}</a></li>
<li class="active">{% trans 'Debts' %}</li>
</ol>
@ -57,7 +57,7 @@
<tfoot>
<tr>
<th colspan="7">
<a href="{% url 'abonapp:add_invoice' group.id abon.id %}" class="btn btn-success btn-sm">
<a href="{% url 'abonapp:add_invoice' group.id abon.username %}" class="btn btn-success btn-sm">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add debt' %}
</a>
</th>

2
abonapp/templates/abonapp/log.html

@ -32,7 +32,7 @@
{% endif %} {{ l.amount }}</td>
<td>
{% if l.abon.group %}
<a href="{% url 'abonapp:abon_home' l.abon.group.pk l.abon.pk %}">{{ l.abon.username }}</a>
<a href="{% url 'abonapp:abon_home' l.abon.group.pk l.abon.username %}">{{ l.abon.username }}</a>
{% else %}
{{ l.abon.username }}
{% endif %}

4
abonapp/templates/abonapp/modal_abonamount.html

@ -1,5 +1,5 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:abon_amount' group_id abon.id %}" method="post"> {% csrf_token %}
<form role="form" action="{% url 'abonapp:abon_amount' group_id 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-shopping-cart"></span>{% trans 'Additional sum' %}</h4>
@ -14,7 +14,7 @@
<input id="amount" type="text" name="amount" placeholder="0.0" class="form-control" required>
</div>
</div>
<input type="hidden" name="abonid" value="{{ abon.id }}"><br>
<input type="hidden" name="abonuname" value="{{ abon.username }}"><br>
<div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary">

2
abonapp/templates/abonapp/modal_add_phone.html

@ -1,5 +1,5 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:telephone_new' gid uid %}" method="post"> {% csrf_token %}
<form role="form" action="{% url 'abonapp:telephone_new' gid uname %}" 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-earphone"></span>{% trans 'Add telephone' %}</h4>

3
abonapp/templates/abonapp/modal_additional_telephones.html

@ -1,5 +1,4 @@
{% load i18n %}
<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-earphone"></span>{% trans 'Additional telephones' %}</h4>
@ -21,7 +20,7 @@
<td>{{ t.owner_name }}</td>
<td><a href="sip:{{ t.telephone }}" class="btn btn-link">{{ t.telephone }}</a></td>
<td>
<a href="{% url 'abonapp:telephone_del' gid uid %}?tid={{ t.pk }}" class="btn btn-default btn-sm" title="{% trans 'Delete' %}">
<a href="{% url 'abonapp:telephone_del' gid uname %}?tid={{ t.pk }}" class="btn btn-default btn-sm" title="{% trans 'Delete' %}">
<span class="glyphicon glyphicon-remove-circle"></span>
</a>
</td>

2
abonapp/templates/abonapp/modal_dev.html

@ -1,6 +1,6 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:dev' gid uid %}" method="post"> {% csrf_token %}
<form role="form" action="{% url 'abonapp:dev' gid uname %}" 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 clutch' %}</h4>

2
abonapp/templates/abonapp/modal_extra_field.html

@ -1,6 +1,6 @@
{% load i18n %}
<form role="form" action="{% url 'abonapp:extra_field' gid abon.pk %}" method="post"> {% csrf_token %}
<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>

2
abonapp/templates/abonapp/modal_periodic_pay.html

@ -1,6 +1,6 @@
{% load i18n %}
{% load bootstrap3 %}
<form action="{% url 'abonapp:add_periodic_pay' gid uid %}" method="post">{% csrf_token %}
<form action="{% url 'abonapp:add_periodic_pay' gid uname %}" 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 periodic pay' %}</h4>

2
abonapp/templates/abonapp/modal_user_markers.html

@ -1,5 +1,5 @@
{% load i18n %}
<form action="{% url 'abonapp:markers_edit' gid uid %}" method="post"> {% csrf_token %}
<form action="{% url 'abonapp:markers_edit' gid uname %}" method="post"> {% csrf_token %}
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>

25
abonapp/templates/abonapp/passport_view.html

@ -1,5 +1,6 @@
{% extends request.is_ajax|yesno:'nullcont.htm,abonapp/ext.htm' %}
{% load i18n %}
{% load bootstrap3 %}
{% block content %}
<div class="row">
@ -9,26 +10,12 @@
<h3 class="panel-title">{% trans 'Passport information' %}</h3>
</div>
<div class="panel-body">
<form role="form" class="form-horizontal" action="{% url 'abonapp:passport_view' group.pk abon.pk %}" method="post">{% csrf_token %}
<form role="form" class="form-horizontal" action="{% url 'abonapp:passport_view' group.pk abon.username %}" method="post">{% csrf_token %}
{% bootstrap_field frm.series label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
{% bootstrap_field frm.number label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
{% bootstrap_field frm.distributor label_class='col-sm-3' field_class='col-sm-9' form_group_class='form-group-sm' %}
<div class="form-group-sm">
<label for="id_series" class="col-sm-3 control-label">{% trans 'Pasport serial' %}</label>
<div class="col-sm-9">
{{ frm.series }}{{ frm.series.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="id_number" class="col-sm-3 control-label">{% trans 'Pasport number' %}</label>
<div class="col-sm-9">
{{ frm.number }}{{ frm.number.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="id_distributor" class="col-sm-3 control-label">{% trans 'Distributor' %}</label>
<div class="col-sm-9">
{{ frm.distributor }}{{ frm.distributor.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="id_date_of_acceptance" class="col-sm-3 control-label">{% trans 'Date of acceptance' %}</label>
<div class="col-sm-9">

4
abonapp/templates/abonapp/payHistory.html

@ -36,7 +36,7 @@
<tr>
<td colspan="4" class="btn-group btn-group-sm">
{% if perms.abonapp.can_add_ballance %}
<a href="{% url 'abonapp:abon_amount' group.pk abon.pk %}" class="btn btn-default btn-modal">
<a href="{% url 'abonapp:abon_amount' group.pk abon.username %}" class="btn btn-default btn-modal">
<span class="glyphicon glyphicon-credit-card"></span> {% trans 'Fill account' %}
</a>
{% else %}
@ -44,7 +44,7 @@
<span class="glyphicon glyphicon-credit-card"></span> {% trans 'Fill account' %}
</a>
{% endif %}
<a href="{% url 'abonapp:abon_debts' group.pk abon.pk %}" class="btn btn-default">
<a href="{% url 'abonapp:abon_debts' group.pk abon.username %}" class="btn btn-default">
<span class="glyphicon glyphicon-gbp"></span> {% trans 'Debts' %}
</a>
</td>

2
abonapp/templates/abonapp/peoples.html

@ -77,7 +77,7 @@
{% endif %}
</td>
<td>
<a href="{% url 'abonapp:abon_home' human.group.pk human.pk %}">{{ human.username }}</a>
<a href="{% url 'abonapp:abon_home' human.group.pk human.username %}">{{ human.username }}</a>
</td>
<td class="hidden-xs">
{% if human.stat_cache %}

10
abonapp/templates/abonapp/service.html

@ -49,13 +49,13 @@
{% else %}
{% trans 'Subscriber has no service' %}.
<a href="{% url 'abonapp:pick_tariff' group.pk abon.pk %}">
<a href="{% url 'abonapp:pick_tariff' group.pk abon.username %}">
{% trans 'Buy service' %}
</a>
{% endif %}
{% if abon_tariff %}
<a href="{% url 'abonapp:unsubscribe_service' group.pk abon.pk abon_tariff.pk %}" class="btn btn-sm btn-danger">
<a href="{% url 'abonapp:unsubscribe_service' group.pk abon.username abon_tariff.pk %}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span> {% trans 'Finish service' %}
</a>
{% endif %}
@ -82,7 +82,7 @@
{% with can_ch_trf=perms.tariff_app.change_tariff %}
{% for service in services %}
<tr>
<td><a href="{% url 'abonapp:pick_tariff' group.pk abon.pk %}?selected_tariff={{ service.pk }}"
<td><a href="{% url 'abonapp:pick_tariff' group.pk abon.username %}?selected_tariff={{ service.pk }}"
class="btn btn-sm btn-default" title="{{ service.get_calc_type_display }}" data-toggle="tooltip"{% if abon_tariff %} disabled{% endif %}>
<span class="glyphicon glyphicon-shopping-cart"></span>
</a></td>
@ -131,11 +131,11 @@
<dt>{% trans 'Next time to pay' %}</dt>
<dd>{{ periodic_pay.next_pay|date:'d E Y' }}</dd>
</dl>
<a href="{% url 'abonapp:del_periodic_pay' group.pk abon.pk periodic_pay.pk %}" class="btn btn-sm btn-danger">
<a href="{% url 'abonapp:del_periodic_pay' group.pk abon.username periodic_pay.pk %}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span> {% trans 'Remove periodic pay' %}
</a>
{% else %}
<a href="{% url 'abonapp:add_periodic_pay' group.pk abon.pk %}" class="btn btn-primary btn-sm btn-modal">
<a href="{% url 'abonapp:add_periodic_pay' group.pk abon.username %}" class="btn btn-primary btn-sm btn-modal">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add periodic pay' %}
</a>
{% endif %}

44
abonapp/urls.py

@ -2,16 +2,56 @@ from django.conf.urls import url, include
from . import views
app_name = 'abonapp'
subscriber_patterns = [
url(r'^$', views.abonhome, name='abon_home'),
url(r'^services/$', views.abon_services, name='abon_services'),
url(r'^amount/$', views.abonamount, name='abon_amount'),
url(r'^debts/$', views.DebtsListView.as_view(), name='abon_debts'),
url(r'^pay/$', views.PayHistoryListView.as_view(), name='abon_phistory'),
url(r'^addinvoice/$', views.add_invoice, name='add_invoice'),
url(r'^pick/$', views.pick_tariff, name='pick_tariff'),
url(r'^passport_view/$', views.passport_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'^unsubscribe_service(?P<abon_tariff_id>\d+)/$', views.unsubscribe_service, name='unsubscribe_service'),
url(r'^dev/$', views.dev, name='dev'),
url(r'^clear_dev/$', views.clear_dev, name='clear_dev'),
url(r'^task_log/$', views.TaskLogListView.as_view(), name='task_log'),
url(r'^user_dev/$', views.save_user_dev_port, name='save_user_dev_port'),
url(r'^telephones/$', views.tels, name='telephones'),
url(r'^tel/add/$', views.tel_add, name='telephone_new'),
url(r'^tel/del/$', views.tel_del, name='telephone_del'),
url(r'^markers/$', views.EditSibscriberMarkers.as_view(), name='markers_edit'),
url(r'^periodic_pay$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^periodic_pay(?P<periodic_pay_id>\d+)/$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^periodic_pay(?P<periodic_pay_id>\d+)/del/$', views.del_periodic_pay, name='del_periodic_pay')
]
group_patterns = [
url(r'^$', views.PeoplesListView.as_view(), name='people_list'),
url(r'^addabon$', views.addabon, 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'),
url(r'^street/add$', views.street_add, name='street_add'),
url(r'^street/edit', views.street_edit, name='street_edit'),
url(r'^street/(?P<sid>\d+)/delete$', views.street_del, name='street_del'),
url(r'^(?P<uname>\w{1,127})/', include(subscriber_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('abonapp.urls_abon')),
url(r'^(?P<gid>\d+)/', include(group_patterns)),
url(r'^log$', views.LogListView.as_view(), name='log'),

49
abonapp/urls_abon.py

@ -1,49 +0,0 @@
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.PeoplesListView.as_view(), name='people_list'),
url(r'^addabon$', views.addabon, 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'),
url(r'^street/add$', views.street_add, name='street_add'),
url(r'^street/edit', views.street_edit, name='street_edit'),
url(r'^street/(?P<sid>\d+)/delete$', views.street_del, name='street_del'),
url(r'^(?P<uid>\d+)$', views.abonhome, name='abon_home'),
url(r'^(?P<uid>\d+)/services$', views.abon_services, name='abon_services'),
url(r'^(?P<uid>\d+)/amount', views.abonamount, name='abon_amount'),
url(r'^(?P<uid>\d+)/debts', views.DebtsListView.as_view(), name='abon_debts'),
url(r'^(?P<uid>\d+)/pay', views.PayHistoryListView.as_view(), name='abon_phistory'),
url(r'^(?P<uid>\d+)/addinvoice$', views.add_invoice, name='add_invoice'),
url(r'^(?P<uid>\d+)/pick$', views.pick_tariff, name='pick_tariff'),
url(r'^(?P<uid>\d+)/passport_view$', views.passport_view, name='passport_view'),
url(r'^(?P<uid>\d+)/chart$', views.charts, name='charts'),
url(r'^(?P<uid>\d+)/dials$', views.DialsListView.as_view(), name='dials'),
url(r'^(?P<uid>\d+)/reset_ip$', views.reset_ip, name='reset_ip'),
url(r'^(?P<uid>\d+)/extra_field$', views.make_extra_field, name='extra_field'),
url(r'^(?P<uid>\d+)/extra_field/(?P<fid>\d+)/delete$', views.extra_field_delete, name='extra_field_delete'),
url(r'^(?P<uid>\d+)/extra_field/edit$', views.extra_field_change, name='extra_field_edit'),
url(r'^(?P<uid>\d+)/unsubscribe_service(?P<abon_tariff_id>\d+)$', views.unsubscribe_service,
name='unsubscribe_service'),
url(r'^(?P<uid>\d+)/dev/$', views.dev, name='dev'),
url(r'^(?P<uid>\d+)/clear_dev/$', views.clear_dev, name='clear_dev'),
url(r'^(?P<uid>\d+)/task_log$', views.TaskLogListView.as_view(), name='task_log'),
url(r'^(?P<uid>\d+)/user_dev$', views.save_user_dev_port, name='save_user_dev_port'),
url(r'^(?P<uid>\d+)/tel$', views.tels, name='telephones'),
url(r'^(?P<uid>\d+)/tel/add$', views.tel_add, name='telephone_new'),
url(r'^(?P<uid>\d+)/tel/del$', views.tel_del, name='telephone_del'),
url(r'^(?P<uid>\d+)/markers$', views.EditSibscriberMarkers.as_view(), name='markers_edit'),
url(r'^(?P<uid>\d+)/periodic_pay$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^(?P<uid>\d+)/periodic_pay(?P<periodic_pay_id>\d+)$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^(?P<uid>\d+)/periodic_pay(?P<periodic_pay_id>\d+)/del$', views.del_periodic_pay, name='del_periodic_pay')
]

153
abonapp/views.py

@ -116,7 +116,7 @@ def addabon(request, gid):
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.pk)
return redirect('abonapp:abon_home', group.id, abon.username)
else:
messages.error(request, _('fix form errors'))
@ -167,17 +167,17 @@ def del_abon(request):
@login_required
@permission_required('abonapp.can_add_ballance')
@transaction.atomic
def abonamount(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
def abonamount(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
try:
if request.method == 'POST':
abonid = mydefs.safe_int(request.POST.get('abonid'))
if abonid == int(uid):
abonuname = request.POST.get('abonuname')
if abonuname == uname:
amnt = mydefs.safe_float(request.POST.get('amount'))
abon.add_ballance(request.user, amnt, comment=_('fill account through admin side'))
abon.save(update_fields=['ballance'])
messages.success(request, _('Account filled successfully on %.2f') % amnt)
return redirect('abonapp:abon_phistory', gid=gid, uid=uid)
return redirect('abonapp:abon_phistory', gid=gid, uname=uname)
else:
messages.error(request, _('I not know the account id'))
except (NasNetworkError, NasFailedResult) as e:
@ -198,7 +198,7 @@ class DebtsListView(BaseAbonListView):
template_name = 'abonapp/invoiceForPayment.html'
def get_queryset(self):
abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid'))
abon = get_object_or_404(models.Abon, username=self.kwargs.get('uname'))
self.abon = abon
return models.InvoiceForPayment.objects.filter(abon=abon)
@ -216,7 +216,7 @@ class PayHistoryListView(BaseAbonListView):
template_name = 'abonapp/payHistory.html'
def get_queryset(self):
abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid'))
abon = get_object_or_404(models.Abon, username=self.kwargs.get('uname'))
self.abon = abon
pay_history = models.AbonLog.objects.filter(abon=abon).order_by('-date')
return pay_history
@ -230,15 +230,15 @@ class PayHistoryListView(BaseAbonListView):
@login_required
@mydefs.only_admins
def abon_services(request, gid, uid):
def abon_services(request, gid, uname):
grp = get_object_or_404(Group, pk=gid)
if not request.user.has_perm('group_app.can_view_group', grp):
raise PermissionDenied
abon = get_object_or_404(models.Abon, pk=uid)
abon = get_object_or_404(models.Abon, username=uname)
if abon.group != grp:
messages.warning(request, _("User group id is not matches with group in url"))
return redirect('abonapp:abon_services', abon.group.id, abon.id)
return redirect('abonapp:abon_services', abon.group.id, abon.username)
try:
periodic_pay = models.PeriodicPayForId.objects.get(account=abon)
@ -256,8 +256,8 @@ def abon_services(request, gid, uid):
@login_required
@mydefs.only_admins
def abonhome(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
def abonhome(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
group = get_object_or_404(Group, pk=gid)
if not request.user.has_perm('group_app.can_view_group', group):
raise PermissionDenied
@ -325,9 +325,8 @@ def terminal_pay(request):
@login_required
@permission_required('abonapp.add_invoiceforpayment')
def add_invoice(request, gid, uid):
uid = mydefs.safe_int(uid)
abon = get_object_or_404(models.Abon, pk=uid)
def add_invoice(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
grp = get_object_or_404(Group, pk=gid)
try:
@ -346,7 +345,7 @@ def add_invoice(request, gid, uid):
newinv.author = request.user
newinv.save()
messages.success(request, _('Receipt has been created'))
return redirect('abonapp:abon_home', gid=gid, uid=uid)
return redirect('abonapp:abon_home', gid=gid, username=uname)
except (NasNetworkError, NasFailedResult) as e:
messages.error(request, e)
@ -364,9 +363,9 @@ def add_invoice(request, gid, uid):
@mydefs.only_admins
@permission_required('abonapp.can_buy_tariff')
@transaction.atomic
def pick_tariff(request, gid, uid):
def pick_tariff(request, gid, uname):
grp = get_object_or_404(Group, pk=gid)
abon = get_object_or_404(models.Abon, pk=uid)
abon = get_object_or_404(models.Abon, username=uname)
tariffs = Tariff.objects.get_tariffs_by_group(grp.pk)
try:
if request.method == 'POST':
@ -383,12 +382,12 @@ def pick_tariff(request, gid, uid):
abon.pick_tariff(trf, request.user, deadline=deadline, comment=log_comment)
abon.sync_with_nas(created=False)
messages.success(request, _('Tariff has been picked'))
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
return redirect('abonapp:abon_services', gid=gid, uname=abon.username)
except (mydefs.LogicError, NasFailedResult) as e:
messages.error(request, e)
except NasNetworkError as e:
messages.error(request, e)
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
return redirect('abonapp:abon_services', gid=gid, uname=abon.username)
except Tariff.DoesNotExist:
messages.error(request, _('Tariff your picked does not exist'))
except mydefs.MultipleException as errs:
@ -407,9 +406,9 @@ def pick_tariff(request, gid, uid):
@login_required
@permission_required('abonapp.delete_abontariff')
def unsubscribe_service(request, gid, uid, abon_tariff_id):
def unsubscribe_service(request, gid, uname, abon_tariff_id):
try:
abon = get_object_or_404(models.Abon, pk=uid)
abon = get_object_or_404(models.Abon, username=uname)
abon_tariff = get_object_or_404(models.AbonTariff, pk=int(abon_tariff_id))
abon.sync_with_nas(created=False)
abon_tariff.delete()
@ -421,7 +420,7 @@ def unsubscribe_service(request, gid, uid, abon_tariff_id):
except mydefs.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
return redirect('abonapp:abon_services', gid=gid, uid=uid)
return redirect('abonapp:abon_services', gid=gid, uname=uname)
@method_decorator(login_required, name='dispatch')
@ -453,7 +452,7 @@ class TaskLogListView(ListView):
template_name = 'abonapp/task_log.html'
def get_queryset(self):
abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid'))
abon = get_object_or_404(models.Abon, username=self.kwargs.get('uname'))
self.abon = abon
return Task.objects.filter(abon=abon)
@ -466,8 +465,8 @@ class TaskLogListView(ListView):
@login_required
@permission_required('abonapp.can_view_passport')
def passport_view(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
def passport_view(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
try:
if request.method == 'POST':
try:
@ -480,7 +479,7 @@ def passport_view(request, gid, uid):
pi.abon = abon
pi.save()
messages.success(request, _('Passport information has been saved'))
return redirect('abonapp:passport_view', gid=gid, uid=uid)
return redirect('abonapp:passport_view', gid=gid, uname=uname)
else:
messages.error(request, _('fix form errors'))
else:
@ -523,16 +522,16 @@ def chgroup_tariff(request, gid):
@login_required
@permission_required('abonapp.change_abon')
def dev(request, gid, uid):
def dev(request, gid, uname):
abon_dev = None
try:
abon = models.Abon.objects.get(pk=uid)
abon = models.Abon.objects.get(username=uname)
if request.method == 'POST':
dev = Device.objects.get(pk=request.POST.get('dev'))
abon.device = dev
abon.save(update_fields=['device'])
messages.success(request, _('Device has successfully attached'))
return redirect('abonapp:abon_home', gid=gid, uid=uid)
return redirect('abonapp:abon_home', gid=gid, uname=uname)
else:
abon_dev = abon.device
except Device.DoesNotExist:
@ -543,16 +542,16 @@ def dev(request, gid, uid):
return render(request, 'abonapp/modal_dev.html', {
'devices': Device.objects.filter(group=gid),
'dev': abon_dev,
'gid': gid, 'uid': uid
'gid': gid, 'uname': uname
})
@login_required
@permission_required('abonapp.change_abon')
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
def clear_dev(request, gid, uid):
def clear_dev(request, gid, uname):
try:
abon = models.Abon.objects.get(pk=uid)
abon = models.Abon.objects.get(username=uname)
abon.device = None
abon.dev_port = None
abon.save(update_fields=['device', 'dev_port'])
@ -560,12 +559,12 @@ def clear_dev(request, gid, uid):
except models.Abon.DoesNotExist:
messages.error(request, _('Abon does not exist'))
return redirect('abonapp:people_list', gid=gid)
return redirect('abonapp:abon_home', gid=gid, uid=uid)
return redirect('abonapp:abon_home', gid=gid, uname=uname)
@login_required
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
def charts(request, gid, uid):
def charts(request, gid, uname):
high = 100
wandate = request.GET.get('wantdate')
@ -576,7 +575,7 @@ def charts(request, gid, uid):
try:
StatElem = getModel(wandate)
abon = models.Abon.objects.get(pk=uid)
abon = models.Abon.objects.get(username=uname)
if abon.group is None:
abon.group = Group.objects.get(pk=gid)
abon.save(update_fields=['group'])
@ -602,7 +601,7 @@ def charts(request, gid, uid):
return redirect('abonapp:group_list')
except ProgrammingError as e:
messages.error(request, e)
return redirect('abonapp:abon_home', gid=gid, uid=uid)
return redirect('abonapp:abon_home', gid=gid, uname=uname)
return render(request, 'abonapp/charts.html', {
'group': abon.group,
@ -615,8 +614,8 @@ def charts(request, gid, uid):
@login_required
@permission_required('abonapp.add_extrafieldsmodel')
def make_extra_field(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
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)
@ -626,7 +625,7 @@ def make_extra_field(request, gid, uid):
messages.success(request, _('Extra field successfully created'))
else:
messages.error(request, _('fix form errors'))
return redirect('abonapp:abon_home', gid=gid, uid=uid)
return redirect('abonapp:abon_home', gid=gid, username=uname)
else:
frm = forms.ExtraFieldForm()
@ -646,7 +645,7 @@ def make_extra_field(request, gid, uid):
@login_required
@permission_required('abonapp.change_extra_fields_model')
def extra_field_change(request, gid, uid):
def extra_field_change(request, gid, uname):
extras = [(int(x), y) for x, y in zip(request.POST.getlist('ed'), request.POST.getlist('ex'))]
try:
for ex in extras:
@ -656,13 +655,13 @@ def extra_field_change(request, gid, uid):
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, uid=uid)
return redirect('abonapp:abon_home', gid=gid, username=uname)
@login_required
@permission_required('abonapp.delete_extra_fields_model')
def extra_field_delete(request, gid, uid, fid):
abon = get_object_or_404(models.Abon, pk=uid)
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)
@ -670,7 +669,7 @@ def extra_field_delete(request, gid, uid, fid):
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, uid=uid)
return redirect('abonapp:abon_home', gid=gid, uname=uname)
@login_required
@ -723,7 +722,7 @@ class DialsListView(BaseAbonListView):
template_name = 'abonapp/dial_log.html'
def get_queryset(self):
abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid'))
abon = get_object_or_404(models.Abon, username=self.kwargs.get('uname'))
if not self.request.user.has_perm('group_app.can_view_group', abon.group):
raise PermissionDenied
self.abon = abon
@ -744,7 +743,7 @@ class DialsListView(BaseAbonListView):
def render_to_response(self, context, **response_kwargs):
if hasattr(self.abon.group, 'pk') and self.abon.group.pk != int(self.kwargs.get('gid')):
return redirect('abonapp:dials', self.abon.group.pk, self.abon.pk)
return redirect('abonapp:dials', self.abon.group.pk, self.abon.username)
return super(DialsListView, self).render_to_response(context, **response_kwargs)
def get(self, request, *args, **kwargs):
@ -754,19 +753,19 @@ class DialsListView(BaseAbonListView):
messages.error(request, e)
return redirect('abonapp:abon_home',
self.kwargs.get('gid'),
self.kwargs.get('uid'))
self.kwargs.get('uname'))
@login_required
@permission_required('abonapp.change_abon')
def save_user_dev_port(request, gid, uid):
def save_user_dev_port(request, gid, uname):
if request.method != 'POST':
messages.error(request, _('Method is not POST'))
return redirect('abonapp:abon_home', gid, uid)
return redirect('abonapp:abon_home', gid, uname)
user_port = mydefs.safe_int(request.POST.get('user_port'))
is_dynamic_ip = request.POST.get('is_dynamic_ip')
try:
abon = models.Abon.objects.get(pk=uid)
abon = models.Abon.objects.get(username=uname)
if user_port == 0:
port = None
else:
@ -775,13 +774,13 @@ def save_user_dev_port(request, gid, uid):
try:
other_abon = models.Abon.objects.get(device=abon.device, dev_port=port)
if other_abon != abon:
user_url = resolve_url('abonapp:abon_home', other_abon.group.id, other_abon.id)
user_url = resolve_url('abonapp:abon_home', other_abon.group.id, other_abon.username)
messages.error(request, _(
"<a href='%(user_url)s'>%(user_name)s</a> already pinned to this port on this device") % {
'user_url': user_url,
'user_name': other_abon.get_full_name()
})
return redirect('abonapp:abon_home', gid, uid)
return redirect('abonapp:abon_home', gid, uname)
except models.Abon.DoesNotExist:
pass
except models.Abon.MultipleObjectsReturned:
@ -802,7 +801,7 @@ def save_user_dev_port(request, gid, uid):
messages.error(request, _('Selected port does not exist'))
except models.Abon.DoesNotExist:
messages.error(request, _('User does not exist'))
return redirect('abonapp:abon_home', gid, uid)
return redirect('abonapp:abon_home', gid, uname)
@login_required
@ -865,28 +864,28 @@ def street_del(request, gid, sid):
@login_required
@permission_required('abonapp.can_view_additionaltelephones')
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
def tels(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
def tels(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname)
telephones = abon.additional_telephones.all()
return render_to_text('abonapp/modal_additional_telephones.html', {
'telephones': telephones,
'gid': gid,
'uid': uid
'uname': uname
}, request=request)
@login_required
@permission_required('abnapp.add_additionaltelephone')
def tel_add(request, gid, uid):
def tel_add(request, gid, uname):
if request.method == 'POST':
frm = forms.AdditionalTelephoneForm(request.POST)
if frm.is_valid():
new_tel = frm.save(commit=False)
abon = get_object_or_404(models.Abon, pk=uid)
abon = get_object_or_404(models.Abon, username=uname)
new_tel.abon = abon
new_tel.save()
messages.success(request, _('New telephone has been saved'))
return redirect('abonapp:abon_home', gid, uid)
return redirect('abonapp:abon_home', gid, uname)
else:
messages.error(request, _('fix form errors'))
else:
@ -894,13 +893,13 @@ def tel_add(request, gid, uid):
return render_to_text('abonapp/modal_add_phone.html', {
'form': frm,
'gid': gid,
'uid': uid
'uname': uname
}, request=request)
@login_required
@permission_required('abnapp.delete_additionaltelephone')
def tel_del(request, gid, uid):
def tel_del(request, gid, uname):
try:
tid = mydefs.safe_int(request.GET.get('tid'))
tel = models.AdditionalTelephone.objects.get(pk=tid)
@ -908,7 +907,7 @@ def tel_del(request, gid, uid):
messages.success(request, _('Additional telephone successfully deleted'))
except models.AdditionalTelephone.DoesNotExist:
messages.error(request, _('Telephone not found'))
return redirect('abonapp:abon_home', gid, uid)
return redirect('abonapp:abon_home', gid, uname)
@login_required
@ -971,8 +970,8 @@ def abon_export(request, gid):
@login_required
@permission_required('abonapp.change_abon')
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
def reset_ip(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
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({
@ -1001,7 +1000,7 @@ def fin_report(request):
@login_required
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
def add_edit_periodic_pay(request, gid, uid, periodic_pay_id=0):
def add_edit_periodic_pay(request, gid, uname, periodic_pay_id=0):
if periodic_pay_id == 0:
if not request.user.has_perm('abonapp.add_periodicpayforid'):
raise PermissionDenied
@ -1013,33 +1012,33 @@ def add_edit_periodic_pay(request, gid, uid, periodic_pay_id=0):
if request.method == 'POST':
frm = forms.PeriodicPayForIdForm(request.POST, instance=periodic_pay_instance)
if frm.is_valid():
abon = get_object_or_404(models.Abon, pk=uid)
abon = get_object_or_404(models.Abon, username=uname)
inst = frm.save(commit=False)
inst.account = abon
inst.save()
messages.success(request, _('Periodic pays has been designated'))
else:
messages.error(request, _('Something wrong in form'))
return redirect('abonapp:abon_services', gid, uid)
return redirect('abonapp:abon_services', gid, uname)
else:
frm = forms.PeriodicPayForIdForm(instance=periodic_pay_instance)
return render_to_text('abonapp/modal_periodic_pay.html', {
'form': frm,
'gid': gid,
'uid': uid
'uname': uname
}, request=request)
@login_required
@permission_required('group_app.can_view_group', (Group, 'pk', 'gid'))
@permission_required('abonapp.delete_periodicpayforid')
def del_periodic_pay(request, gid, uid, periodic_pay_id):
def del_periodic_pay(request, gid, uname, periodic_pay_id):
periodic_pay_instance = get_object_or_404(models.PeriodicPayForId, pk=periodic_pay_id)
if periodic_pay_instance.account.id != uid:
uid = periodic_pay_instance.account.id
if periodic_pay_instance.account.username != uname:
uname = periodic_pay_instance.account.username
periodic_pay_instance.delete()
messages.success(request, _('Periodic pay successfully deleted'))
return redirect('abonapp:abon_services', gid, uid)
return redirect('abonapp:abon_services', gid, uname)
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
@ -1049,16 +1048,16 @@ class EditSibscriberMarkers(UpdateView):
form_class = forms.MarkersForm
def get_object(self, queryset=None):
obj = models.Abon.objects.get(pk=self.kwargs.get('uid'))
obj = models.Abon.objects.get(username=self.kwargs.get('uname'))
return obj
def get_success_url(self):
return resolve_url('abonapp:abon_home', self.kwargs.get('gid'), self.kwargs.get('uid'))
return resolve_url('abonapp:abon_home', self.kwargs.get('gid'), self.kwargs.get('uname'))
def get_context_data(self, **kwargs):
context = super(EditSibscriberMarkers, self).get_context_data(**kwargs)
context['gid'] = self.kwargs.get('gid')
context['uid'] = self.kwargs.get('uid')
context['uname'] = self.kwargs.get('uname')
return context
def form_invalid(self, form):

7
accounts_app/models.py

@ -47,7 +47,12 @@ class MyUserManager(BaseUserManager):
class BaseAccount(AbstractBaseUser, PermissionsMixin):
username = models.CharField(_('profile username'), max_length=127, unique=True)
username = models.CharField(
_('profile username'),
max_length=127,
unique=True,
validators=[RegexValidator(r'^\w{1,127}$')]
)
fio = models.CharField(_('fio'), max_length=256)
birth_day = models.DateField(_('birth day'), auto_now_add=True)
is_active = models.BooleanField(_('Is active'), default=True)

2
devapp/templates/devapp/custom_dev_page/onu.html

@ -21,7 +21,7 @@
{% for da in dev_accs %}
<li class="list-group-item">{% trans 'Attached user' %}:
{% if da.group %}
<a href="{% url 'abonapp:abon_home' da.group.pk da.pk %}"
<a href="{% url 'abonapp:abon_home' da.group.pk da.username %}"
target="_blank">{{ da.get_full_name }}</a>
{% else %}
{{ da.get_full_name }}

2
devapp/templates/devapp/manage_ports/fix_abon_device.html

@ -26,7 +26,7 @@
</div>
<div class="list-group">
{% for abon in abons %}
<a href="{% url 'abonapp:abon_home' abon.group.pk abon.pk %}" class="list-group-item">{{ abon.get_full_name }}</a>
<a href="{% url 'abonapp:abon_home' abon.group.pk abon.username %}" class="list-group-item">{{ abon.get_full_name }}</a>
{% empty %}
{% trans 'Abons not found' %}
{% endfor %}

2
devapp/templates/devapp/manage_ports/modal_show_subscriber_on_port.html

@ -6,7 +6,7 @@
</div>
<div class="modal-body">
<a href="{% url 'abonapp:abon_home' object.group.pk object.pk %}">
<a href="{% url 'abonapp:abon_home' object.group.pk object.username %}">
{{ object.get_full_name }}
</a>
</div>

2
dialing_app/views.py

@ -54,7 +54,7 @@ def to_abon(request, tel):
return redirect('dialapp:home')
abon = abon[0]
if abon.group:
return redirect('abonapp:abon_home', gid=abon.group.pk, uid=abon.pk)
return redirect('abonapp:abon_home', gid=abon.group.pk, uname=abon.username)
else:
return redirect('abonapp:group_list')

2
searchapp/templates/searchapp/index.html

@ -22,7 +22,7 @@
</form>
<div class="list-group">
{% for ab in abons %}
<a href="{% url 'abonapp:abon_home' ab.group.id ab.id %}" target="_blank" class="list-group-item">
<a href="{% url 'abonapp:abon_home' ab.group.id ab.username %}" target="_blank" class="list-group-item">
<h4 class="list-group-item-heading">{{ ab.username|safe }}</h4>
<p class="list-group-item-text">

2
taskapp/templates/taskapp/details.html

@ -28,7 +28,7 @@
{% trans 'Condition' %}: {{ task.get_state_display }}<br>
{% trans 'Subscriber' %}
{% if task.abon %}
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}" target="_blank">{{ task.abon.get_full_name }}</a>
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}" target="_blank">{{ task.abon.get_full_name }}</a>
{% else %}
<i>{% trans 'Not assigned' %}</i>
{% endif %}<br>

2
taskapp/templates/taskapp/tasklist.html

@ -37,7 +37,7 @@
{% endif %}
{% endif %}
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}" title="{{ task.abon.description|default:'' }}" data-toggle="tooltip">
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}" title="{{ task.abon.description|default:'' }}" data-toggle="tooltip">
{{ task.abon.get_full_name }}
</a>
{% if task.comment_count > 0 %}({{ task.comment_count }}){% endif %}

2
taskapp/templates/taskapp/tasklist_all.html

@ -50,7 +50,7 @@
{% endif %}
{% endif %}
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}">
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}">
{{ task.abon.get_full_name }}
</a>
{% if task.comment_count > 0 %}({{ task.comment_count }}){% endif %}

2
taskapp/templates/taskapp/tasklist_failed.html

@ -37,7 +37,7 @@
<td class="hidden-xs"><a href="{% url 'taskapp:edit' task.pk %}">{{ task.pk }}</a></td>
{% if task.abon and task.abon.group %}
<td><a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}">{{ task.abon.get_full_name }}</a></td>
<td><a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}">{{ task.abon.get_full_name }}</a></td>
<td>{{ task.abon.group.title }}, {{ task.abon.street|default:_('Not assigned') }} {{ task.abon.house|default:_('Not assigned') }}</td>
{% else %}
<td>{% trans 'User does not exist' %}</td>

2
taskapp/templates/taskapp/tasklist_finish.html

@ -37,7 +37,7 @@
{% if task.abon and task.abon.group %}
<td>
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}">
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}">
{{ task.abon.get_full_name }}
</a>
</td>

2
taskapp/templates/taskapp/tasklist_own.html

@ -38,7 +38,7 @@
{% if task.abon and task.abon.group %}
<td>
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.pk %}">
<a href="{% url 'abonapp:abon_home' task.abon.group.pk task.abon.username %}">
{{ task.abon.get_full_name }}
</a>
</td>

Loading…
Cancel
Save