Browse Source

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

devel
bashmak 8 years ago
parent
commit
6e6c989691
  1. 4
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 5
      abonapp/templates/abonapp/group_list.html
  3. 2
      abonapp/templates/abonapp/peoples.html
  4. 2
      abonapp/urls.py
  5. 2
      abonapp/urls_abon.py
  6. 98
      abonapp/views.py
  7. 2
      devapp/templates/devapp/manage_ports/list.html
  8. 2
      devapp/urls.py
  9. 8
      devapp/views.py
  10. 2
      docs/install.md

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

@ -1184,3 +1184,7 @@ msgstr "Инфо."
msgid "Dialing"
msgstr "Звонки"
msgid "Multiple users on the same device port"
msgstr "Несколько абонентов на одном и том же порту устройства"

5
abonapp/templates/abonapp/group_list.html

@ -2,7 +2,6 @@
{% load i18n %}
{% block main %}
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li class="active">{% trans 'User groups' %}</li>
@ -18,7 +17,7 @@
<tr>
<th width="50">#</th>
<th>
<a href="{% url 'abonapp:group_list' %}?order_by=title&dir={{ dir|default:"down" }}">
<a href="{% url 'abonapp:group_list' %}?order_by=title&dir={{ dir|default:'down' }}">
{% trans 'Group title' %}
</a>
{% if order_by == 'title' %}<span class="glyphicon glyphicon-filter"></span>{% endif %}
@ -84,6 +83,6 @@
</table>
</div>
{% include 'toolbar_page.html' with pag=groups %}
{% include 'toolbar_page_cbv.html' %}
{% endblock %}

2
abonapp/templates/abonapp/peoples.html

@ -167,6 +167,6 @@
</div>
</div>
{% include 'toolbar_page.html' with pag=peoples %}
{% include 'toolbar_page_cbv.html' %}
{% endblock %}

2
abonapp/urls.py

@ -7,7 +7,7 @@ app_name = 'abonapp'
urlpatterns = [
url(r'^$', views.grouplist, name='group_list'),
url(r'^$', views.GroupListView.as_view(), name='group_list'),
url(r'^addgroup$', views.addgroup, name='add_group'),
url(r'^delgroup', views.delgroup, name='del_group'),

2
abonapp/urls_abon.py

@ -3,7 +3,7 @@ from . import views
urlpatterns = [
url(r'^$', views.peoples, name='people_list'),
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'),

98
abonapp/views.py

@ -2,14 +2,16 @@
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
from django.db import IntegrityError, ProgrammingError, transaction
from django.db.models import Count, Q, signals
from django.db import transaction
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
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
from django.conf import settings
from statistics.models import StatCache
from tariff_app.models import Tariff
@ -24,48 +26,57 @@ from dialing_app.models import AsteriskCDR
from statistics.models import getModel
from guardian.shortcuts import get_objects_for_user, assign_perm
from guardian.decorators import permission_required_or_403 as permission_required
from djing.global_base_views import OrderingMixin
@login_required
@mydefs.only_admins
def peoples(request, gid):
abon_group = get_object_or_404(models.AbonGroup, pk=gid)
if not request.user.has_perm('abonapp.can_view_abongroup', abon_group):
raise PermissionDenied
street_id = mydefs.safe_int(request.GET.get('street'))
PAGINATION_ITEMS_PER_PAGE = getattr(settings, 'PAGINATION_ITEMS_PER_PAGE', 10)
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
class BaseAbonListView(ListView, OrderingMixin):
paginate_by = PAGINATION_ITEMS_PER_PAGE
http_method_names = ['get']
class PeoplesListView(BaseAbonListView):
context_object_name = 'peoples'
template_name = 'abonapp/peoples.html'
def get_queryset(self):
street_id = mydefs.safe_int(self.request.GET.get('street'))
gid = mydefs.safe_int(self.kwargs.get('gid'))
peoples_list = models.Abon.objects.select_related('group', 'street')
if street_id > 0:
peoples_list = peoples_list.filter(group=abon_group, street=street_id)
peoples_list = peoples_list.filter(group__pk=gid, street=street_id)
else:
peoples_list = peoples_list.filter(group=abon_group)
# фильтр
dr, field = mydefs.order_helper(request)
if field:
peoples_list = peoples_list.order_by(field)
peoples_list = peoples_list.filter(group__pk=gid)
try:
peoples_list = mydefs.pag_mn(request, peoples_list)
for abon in peoples_list:
if abon.ip_address is not None:
try:
abon.stat_cache = StatCache.objects.get(ip=abon.ip_address)
except StatCache.DoesNotExist:
pass
except mydefs.LogicError as e:
messages.warning(request, e)
messages.warning(self.request, e)
streets = models.AbonStreet.objects.filter(group=gid)
return peoples_list
return render(request, 'abonapp/peoples.html', {
'peoples': peoples_list,
'abon_group': get_object_or_404(models.AbonGroup, pk=gid),
'streets': streets,
'street_id': street_id,
'dir': dr,
'order_by': request.GET.get('order_by')
})
def get_context_data(self, **kwargs):
gid = mydefs.safe_int(self.kwargs.get('gid'))
if gid == 0:
return HttpResponseBadRequest('group id is broken')
abon_group = get_object_or_404(models.AbonGroup, pk=gid)
if not self.request.user.has_perm('abonapp.can_view_abongroup', abon_group):
raise PermissionDenied
context = super(PeoplesListView, self).get_context_data(**kwargs)
context['streets'] = models.AbonStreet.objects.filter(group=gid)
context['street_id'] = mydefs.safe_int(self.request.GET.get('street'))
context['abon_group'] = abon_group
return context
@login_required
@ -94,24 +105,16 @@ def addgroup(request):
})
@login_required
@mydefs.only_admins
def grouplist(request):
groups = models.AbonGroup.objects.annotate(usercount=Count('abon')).order_by('title')
groups = get_objects_for_user(request.user, 'abonapp.can_view_abongroup', klass=groups, accept_global_perms=False)
# фильтр
directory, field = mydefs.order_helper(request)
if field:
groups = groups.order_by(field)
groups = mydefs.pag_mn(request, groups)
class GroupListView(BaseAbonListView):
context_object_name = 'groups'
template_name = 'abonapp/group_list.html'
queryset = models.AbonGroup.objects.annotate(usercount=Count('abon')).order_by('title')
return render(request, 'abonapp/group_list.html', {
'groups': groups,
'dir': directory,
'order_by': request.GET.get('order_by')
})
def get_queryset(self):
queryset = super(GroupListView, self).get_queryset()
queryset = get_objects_for_user(self.request.user, 'abonapp.can_view_abongroup', klass=queryset,
accept_global_perms=False)
return queryset
@login_required
@ -774,6 +777,9 @@ def save_user_dev_port(request, gid, uid):
return redirect('abonapp:abon_home', gid, uid)
except models.Abon.DoesNotExist:
pass
except models.Abon.MultipleObjectsReturned:
messages.error(request, _('Multiple users on the same device port'))
return redirect('devapp:manage_ports', abon.device.user_group.pk, abon.device.pk)
abon.dev_port = port
if abon.is_dynamic_ip != is_dynamic_ip:

2
devapp/templates/devapp/manage_ports/list.html

@ -22,7 +22,7 @@
<td>{{ port.num }}</td>
<td>{{ port.descr }}</td>
{% if port.num_abons > 1 %}
{% url 'devapp:fix_port_confict' dev.user_group.id dev.id port.id as fixurl %}
{% url 'devapp:fix_port_conflict' dev.user_group.id dev.id port.id as fixurl %}
<td class="text-danger"><b>{{ port.num_abons }}</b>. {% blocktrans with furl=fixurl %}Port should not have more than one subscriber, <a href='{{ furl }}'>fix that</a>{% endblocktrans %}</td>
{% else %}
<td>{{ port.num_abons }}</td>

2
devapp/urls.py

@ -16,7 +16,7 @@ urlpatterns = [
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/add$', views.add_single_port, name='add_port'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/edit$', views.dev, name='edit'),
url(r'^(\d+)/(?P<device_id>\d+)/ports$', views.manage_ports, name='manage_ports'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/ports/(?P<port_id>\d+)/fix_port_confict$', views.fix_port_confict, name='fix_port_confict'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/ports/(?P<port_id>\d+)/fix_port_conflict$', views.fix_port_conflict, name='fix_port_conflict'),
url(r'^(\d+)/(?P<device_id>\d+)/ports_add', views.add_ports, name='add_ports'),
url(r'^(\d+)/(?P<device_id>\d+)/(?P<portid>\d+)_(?P<status>[0-1]{1})$', views.toggle_port, name='port_toggle'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/(?P<portid>\d+)/del$', views.delete_single_port, name='del_port'),

8
devapp/views.py

@ -457,6 +457,8 @@ def fix_onu(request):
if parent is not None:
manobj = parent.get_manager_object()
ports = manobj.get_list_keyval('.1.3.6.1.4.1.3320.101.10.1.1.3')
text = '<span class="glyphicon glyphicon-ok"></span> <span class="hidden-xs">%s</span>' %\
(_('Device with mac address %(mac)s does not exist') % {'mac': mac})
for srcmac, snmpnum in ports:
real_mac = ':'.join(['%x' % ord(i) for i in srcmac])
if mac == real_mac:
@ -465,10 +467,8 @@ def fix_onu(request):
status = 0
text = '<span class="glyphicon glyphicon-ok"></span> <span class="hidden-xs">%s</span>' % _('Fixed')
break
text = '<span class="glyphicon glyphicon-ok"></span> <span class="hidden-xs">%s</span>' %\
(_('Device with mac address %(mac)s does not exist') % {'mac': mac})
else:
text = text + ' %s' % _('Parent device not found')
text = text + '\n%s' % _('Parent device not found')
except Device.DoesNotExist:
pass
return JsonResponse({
@ -478,7 +478,7 @@ def fix_onu(request):
@login_required
def fix_port_confict(request, group_id, device_id, port_id):
def fix_port_conflict(request, group_id, device_id, port_id):
user_group = get_object_or_404(AbonGroup, pk=group_id)
device = get_object_or_404(Device, pk=device_id)
port = get_object_or_404(Port, pk=port_id)

2
docs/install.md

@ -12,7 +12,7 @@
Затем установим зависимости
```
# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb mariadb-devel uwsgi nginx uwsgi-plugin-python3 redis net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config
# dnf -y install python3 python3-devel python3-pip python3-pillow mariadb mariadb-devel uwsgi nginx uwsgi-plugin-python3 net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-python git redhat-rpm-config
```
Лучше чтоб версия python по умолчанию была третья:

Loading…
Cancel
Save