Browse Source

Add feautures & fix bugs

devel
Dmitry Novikov 8 years ago
parent
commit
8ccc430d01
  1. 8
      abonapp/locale/ru/LC_MESSAGES/django.po
  2. 9
      abonapp/templates/abonapp/editAbon.html
  3. 2
      abonapp/templates/abonapp/ext.htm
  4. 11
      abonapp/templates/abonapp/peoples.html
  5. 2
      abonapp/urls_abon.py
  6. 39
      abonapp/views.py
  7. 21
      accounts_app/templates/accounts/acc_list.html
  8. 2
      accounts_app/templates/accounts/index.html
  9. 3
      chatbot/telebot.py
  10. 3
      clientsideapp/templates/clientsideapp/ext.html
  11. 12
      clientsideapp/templates/clientsideapp/services.html
  12. 12
      clientsideapp/views.py
  13. 2
      devapp/views.py
  14. 13
      dialing_app/locale/ru/LC_MESSAGES/django.po
  15. 12
      dialing_app/templates/ext.html
  16. 10
      dialing_app/templates/vmail.html
  17. 3
      dialing_app/urls.py
  18. 15
      dialing_app/views.py
  19. 2
      taskapp/handle.py
  20. 6
      taskapp/locale/ru/LC_MESSAGES/django.po
  21. 2
      taskapp/models.py

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

@ -1012,3 +1012,11 @@ msgstr "Может видеть дополнительные телефоны"
msgid "IP Conflict! %d/%d results" msgid "IP Conflict! %d/%d results"
msgstr "IP Конфликт! ping %d из %d" msgstr "IP Конфликт! ping %d из %d"
msgid "Phonebook"
msgstr "Телефонная книга"
msgid "Reset ip"
msgstr "Сбросить ip"
msgid "Export to csv"
msgstr "Сохранить в csv"

9
abonapp/templates/abonapp/editAbon.html

@ -49,7 +49,14 @@
<div class="form-group-sm{% if is_bad_ip %} has-error{% endif %}"> <div class="form-group-sm{% if is_bad_ip %} has-error{% endif %}">
<label for="id_ip" class="col-sm-4 control-label">{% trans 'Ip Address' %}</label> <label for="id_ip" class="col-sm-4 control-label">{% trans 'Ip Address' %}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input type="text" value="{{ ip|default:'' }}" class="form-control" name="ip" placeholder="{% trans 'Not assigned' %}" 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 %}/>
<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' abon_group.pk abon.pk %}" class="btn btn-default btn-cmd" data-toggle="tooltip" title="{% trans 'Reset ip' %}" onclick="$('#ipfield').val('');">
<span class="glyphicon glyphicon-refresh"></span>
</a>
</span>
</div>
</div> </div>
</div> </div>

2
abonapp/templates/abonapp/ext.htm

@ -14,7 +14,7 @@
<div class="page-header"> <div class="page-header">
<h2>{{ abon.fio|default:_("Long name") }} <h2>{{ abon.fio|default:_("Long name") }}
<small>{% trans 'Ballance' %} <i class="glyphicon glyphicon-ruble"></i> <small>{% trans 'Ballance' %} <i class="glyphicon glyphicon-ruble"></i>
<b>{{ abon.ballance }}</b>
<b>{{ abon.ballance|floatformat:2 }}</b>
</small> </small>
</h2> </h2>
</div> </div>

11
abonapp/templates/abonapp/peoples.html

@ -102,7 +102,7 @@
{% else %}&mdash;&mdash;&mdash; {% else %}&mdash;&mdash;&mdash;
{% endif %} {% endif %}
</td> </td>
<td class="hidden-xs">{{ human.ballance }}</td>
<td class="hidden-xs">{{ human.ballance|floatformat:2 }}</td>
<td class="hidden-xs"> <td class="hidden-xs">
{% if can_del_trf %} {% if can_del_trf %}
<a href="{% url 'abonapp:del_abon' %}?id={{ human.pk }}" class="btn btn-danger btn-sm"> <a href="{% url 'abonapp:del_abon' %}?id={{ human.pk }}" class="btn btn-danger btn-sm">
@ -125,15 +125,18 @@
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="11" class="btn-group">
<td colspan="11" class="btn-group btn-group-sm">
{% if perms.abonapp.add_abon %} {% if perms.abonapp.add_abon %}
<a href="{% url 'abonapp:add_abon' abon_group.pk %}" class="btn btn-sm btn-default" title="{% trans 'Add' %}" data-toggle="tooltip">
<a href="{% url 'abonapp:add_abon' abon_group.pk %}" class="btn btn-default" title="{% trans 'Add' %}" data-toggle="tooltip">
<span class="glyphicon glyphicon-plus"></span> {% trans 'Add abon' %} <span class="glyphicon glyphicon-plus"></span> {% trans 'Add abon' %}
</a> </a>
{% endif %} {% endif %}
<a href="{% url 'abonapp:ch_group_tariff' abon_group.pk %}" class="btn btn-sm btn-default" title="{% trans 'User groups' %}" data-toggle="tooltip">
<a href="{% url 'abonapp:ch_group_tariff' abon_group.pk %}" class="btn btn-default" title="{% trans 'User groups' %}" data-toggle="tooltip">
<span class="glyphicon glyphicon-subscript"></span> {% trans 'Tariffs in groups' %} <span class="glyphicon glyphicon-subscript"></span> {% trans 'Tariffs in groups' %}
</a> </a>
<a href="{% url 'abonapp:phonebook' abon_group.pk %}" class="btn btn-default btn-modal">
<span class="glyphicon glyphicon-earphone"></span> {% trans 'Phonebook' %}
</a>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>

2
abonapp/urls_abon.py

@ -6,6 +6,7 @@ urlpatterns = [
url(r'^$', views.peoples, name='people_list'), url(r'^$', views.peoples, name='people_list'),
url(r'^addabon$', views.addabon, name='add_abon'), url(r'^addabon$', views.addabon, name='add_abon'),
url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'), url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^phonebook$', views.phonebook, name='phonebook'),
url(r'^street/add$', views.street_add, name='street_add'), url(r'^street/add$', views.street_add, name='street_add'),
url(r'^street/edit', views.street_edit, name='street_edit'), 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'^street/(?P<sid>\d+)/delete$', views.street_del, name='street_del'),
@ -21,6 +22,7 @@ urlpatterns = [
url(r'^(?P<uid>\d+)/passport_view$', views.passport_view, name='passport_view'), 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+)/chart$', views.charts, name='charts'),
url(r'^(?P<uid>\d+)/dials$', views.dials, name='dials'), url(r'^(?P<uid>\d+)/dials$', views.dials, 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$', 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/(?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+)/extra_field/edit$', views.extra_field_change, name='extra_field_edit'),

39
abonapp/views.py

@ -3,7 +3,7 @@ from json import dumps
from django.contrib.gis.shortcuts import render_to_text from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import IntegrityError, ProgrammingError from django.db import IntegrityError, ProgrammingError
from django.db.models import Count, Q
from django.db.models import Count, Q, signals
from django.db.transaction import atomic from django.db.transaction import atomic
from django.shortcuts import render, redirect, get_object_or_404, resolve_url from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@ -870,6 +870,43 @@ def tel_del(request, gid, uid):
return redirect('abonapp:abon_home', gid, uid) return redirect('abonapp:abon_home', gid, uid)
@login_required
@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid'))
def phonebook(request, gid):
res_format = request.GET.get('f')
t1 = models.Abon.objects.filter(group__id=int(gid)).only('telephone', 'fio').values_list('telephone', 'fio')
t2 = models.AdditionalTelephone.objects.filter(abon__group__id=gid).only('telephone', 'owner_name').values_list('telephone', 'owner_name')
tels = list(t1) + list(t2)
if res_format == 'csv':
import csv
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="phones.csv"'
writer = csv.writer(response, quoting=csv.QUOTE_NONNUMERIC)
for row in tels:
writer.writerow(row)
return response
return render_to_text('abonapp/modal_phonebook.html', {
'tels': tels,
'gid': gid
}, request=request)
@login_required
@permission_required('abonapp.change_abon')
@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid'))
def reset_ip(request, gid, uid):
abon = get_object_or_404(models.Abon, pk=uid)
signals.post_save.disconnect(models.abon_post_save, sender=models.Abon)
abon.ip_address = None
abon.save(update_fields=['ip_address'])
signals.post_save.connect(models.abon_post_save, sender=models.Abon)
return HttpResponse(dumps({
'status': 0,
'dat': "<span class='glyphicon glyphicon-refresh'></span>"
}))
# API's # API's
def abons(request): def abons(request):

21
accounts_app/templates/accounts/acc_list.html

@ -34,27 +34,20 @@
Нету{% endif %}</td> Нету{% endif %}</td>
<td class="hidden-xs">{% if usr.email %}<a href="mailto:{{ usr.email }}">{{ usr.email }}{% else %} <td class="hidden-xs">{% if usr.email %}<a href="mailto:{{ usr.email }}">{{ usr.email }}{% else %}
Нету{% endif %}</a></td> Нету{% endif %}</a></td>
<td class="btn-group hidden-xs">
<a href="#" class="btn btn-sm btn-default disabled"
title="Дать задание">
<span class="glyphicon glyphicon-tasks"></span>
</a>
<a href="{ % url 'django_messages:messages_compose' % }?a={{ usr.id }}" class="btn btn-sm btn-info"
title="Отправить сообщение">
<span class="glyphicon glyphicon-envelope"></span>
</a>
{% if usr.id == request.user.id or perms.acc_app.delete_userprofile %}
{% if usr.id == request.user.id or perms.acc_app.delete_userprofile %}
<td class="btn-group hidden-xs">
<a href="{% url 'acc_app:delete_profile' usr.id %}" class="btn btn-sm btn-danger"> <a href="{% url 'acc_app:delete_profile' usr.id %}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove"></span> <span class="glyphicon glyphicon-remove"></span>
</a> </a>
{% else %}
</td>
{% else %}
<td class="btn-group hidden-xs">
<a href="#" class="btn btn-sm btn-danger disabled" title="Не прав на удаление"> <a href="#" class="btn btn-sm btn-danger disabled" title="Не прав на удаление">
<span class="glyphicon glyphicon-remove"></span> <span class="glyphicon glyphicon-remove"></span>
</a> </a>
{% endif %}
</td>
{% endif %}
</td>
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>

2
accounts_app/templates/accounts/index.html

@ -3,7 +3,7 @@
{% block content %} {% block content %}
<div class="table"> <div class="table">
<table class="table table-striped table-bordered">
<table class="table-striped table-bordered">
<tbody> <tbody>
<tr> <tr>
<td class="col-sm-4">{% trans 'Telephone' %}</td> <td class="col-sm-4">{% trans 'Telephone' %}</td>

3
chatbot/telebot.py

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from telepot import helper, glance, Bot from telepot import helper, glance, Bot
from telepot.exception import TelegramError
import os import os
import socket import socket
import collections import collections
@ -142,4 +143,6 @@ def send_notify(msg_text, account):
raise ChatException(_("Recipient '%s' does not subscribed on notifications") % account.get_full_name()) raise ChatException(_("Recipient '%s' does not subscribed on notifications") % account.get_full_name())
except ProtocolError as e: except ProtocolError as e:
raise ChatException(e) raise ChatException(e)
except TelegramError as e:
raise ChatException("%s - %s" % (e, tb.user.get_full_name()))

3
clientsideapp/templates/clientsideapp/ext.html

@ -49,6 +49,7 @@
<a href="{{ client_side_services }}">Услуги</a> <a href="{{ client_side_services }}">Услуги</a>
</li> </li>
<!--<li> <!--<li>
<a href="#"> <a href="#">
Сообщения из администрации Сообщения из администрации
@ -70,7 +71,7 @@
</ul> </ul>
</li> </li>
</ul> </ul>
<span class="navbar-text">Ваш балланс <b>{{ subscriber.ballance }}</b> руб.</span>
<span class="navbar-text">Ваш балланс <b>{{ subscriber.ballance|floatformat:2 }}</b> руб.</span>
</div><!--/.nav-collapse --> </div><!--/.nav-collapse -->
</div> </div>
</div> </div>

12
clientsideapp/templates/clientsideapp/services.html

@ -6,7 +6,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-lg-5">
<div class="col-lg-7">
{% if current_service %} {% if current_service %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
@ -27,6 +27,8 @@
<p>{{ current_service.tariff.descr }}</p> <p>{{ current_service.tariff.descr }}</p>
</div> </div>
</div> </div>
{% else %} {% else %}
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
<span class="glyphicon glyphicon-exclamation-sign"></span> <span class="glyphicon glyphicon-exclamation-sign"></span>
@ -34,7 +36,7 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
<div class="col-lg-7">
<div class="col-lg-5">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
Доступные для заказа услуги Доступные для заказа услуги
@ -66,12 +68,15 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% include 'clientsideapp/services_ext.txt' %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="panel panel-info"> <div class="panel panel-info">
@ -89,5 +94,4 @@
</div> </div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

12
clientsideapp/views.py

@ -28,12 +28,16 @@ def pays(request):
@login_required @login_required
def services(request): def services(request):
abon = Abon.objects.get(pk=request.user.pk)
all_tarifs = abon.group.tariffs.filter(is_admin=False)
try:
abon = Abon.objects.get(pk=request.user.pk)
all_tarifs = abon.group.tariffs.filter(is_admin=False)
current_service = abon.active_tariff()
except:
all_tarifs = None
current_service = None
return render(request, 'clientsideapp/services.html', { return render(request, 'clientsideapp/services.html', {
'tarifs': all_tarifs, 'tarifs': all_tarifs,
'current_service': abon.active_tariff()
'current_service': current_service
}) })

2
devapp/views.py

@ -357,7 +357,7 @@ def toggle_port(request, did, portid, status=0):
try: try:
if ping(dev.ip_address): if ping(dev.ip_address):
if dev.man_passw: if dev.man_passw:
manager = dev.get_manager_klass()(dev.ip_address, dev.man_passw)
manager = dev.get_manager_object()
ports = manager.get_ports() ports = manager.get_ports()
if status: if status:
ports[portid - 1].enable() ports[portid - 1].enable()

13
dialing_app/locale/ru/LC_MESSAGES/django.po

@ -95,14 +95,9 @@ msgstr "Несколько абонентов с указанным номеро
msgid "User with the telephone number not found" msgid "User with the telephone number not found"
msgstr "Абонент с таким номером телефона не найден" msgstr "Абонент с таким номером телефона не найден"
msgid "Voice mail"
msgstr "Оставленные сообщения"
msgid "Voice mail request"
msgstr "Заявки на подключение"
msgid "Type"
msgstr "Тип"
msgid "Voice mail report"
msgstr "Заявки на поломки"
msgid "Request"
msgstr "Заявка"
msgid "Report"
msgstr "Поломка"

12
dialing_app/templates/ext.html

@ -22,13 +22,21 @@
</a> </a>
</li> </li>
{% url 'dialapp:vmail' as dialmail %}
{% url 'dialapp:vmail_request' as dialmail %}
<li{% if dialmail == request.path %} class="active"{% endif %}> <li{% if dialmail == request.path %} class="active"{% endif %}>
<a href="{{ dialmail }}"> <a href="{{ dialmail }}">
{% trans 'Voice mail' %}
{% trans 'Voice mail request' %}
</a> </a>
</li> </li>
{% url 'dialapp:vmail_report' as dialmail %}
<li{% if dialmail == request.path %} class="active"{% endif %}>
<a href="{{ dialmail }}">
{% trans 'Voice mail report' %}
</a>
</li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">

10
dialing_app/templates/vmail.html

@ -10,7 +10,6 @@
<th>{% trans 'Play' %}</th> <th>{% trans 'Play' %}</th>
<th>{% trans 'calldate' %}</th> <th>{% trans 'calldate' %}</th>
<th>{% trans 'src' %}</th> <th>{% trans 'src' %}</th>
<th>{% trans 'Type' %}</th>
<th>{% trans 'duration' %}</th> <th>{% trans 'duration' %}</th>
<th>{% trans 'start' %}</th> <th>{% trans 'start' %}</th>
<th>{% trans 'answer' %}</th> <th>{% trans 'answer' %}</th>
@ -21,7 +20,7 @@
<tbody> <tbody>
{% for vmail in vmessages %} {% for vmail in vmessages %}
<tr> <tr>
<td class="btn-group btn-group-sm">
<td class="btn-group btn-group-xs">
<button class="btn btn-default player-btn disabled"> <button class="btn btn-default player-btn disabled">
<span class="glyphicon glyphicon-play"></span> <span class="glyphicon glyphicon-play"></span>
<audio preload="metadata" src="{{ vmail.path_to_media }}/{{ vmail.calldate|date:"YmdHi" }}-{{ vmail.src }}-{{ vmail.dst }}.wav"></audio> <audio preload="metadata" src="{{ vmail.path_to_media }}/{{ vmail.calldate|date:"YmdHi" }}-{{ vmail.src }}-{{ vmail.dst }}.wav"></audio>
@ -32,11 +31,6 @@
</td> </td>
<td>{{ vmail.calldate|date:'d E Y, H:i:s' }}</td> <td>{{ vmail.calldate|date:'d E Y, H:i:s' }}</td>
<td>{{ vmail.src|abon_if_telephone|safe }}</td> <td>{{ vmail.src|abon_if_telephone|safe }}</td>
<td>
{% if vmail.userfield == 'request' %}{% trans 'Request' %}
{% elif vmail.userfield == 'report' %}{% trans 'Report' %}
{% else %}{{ vmail.userfield }}{% endif %}
</td>
<td>{{ vmail.duration }}</td> <td>{{ vmail.duration }}</td>
<td>{{ vmail.start|date:'d E Y, H:i:s' }}</td> <td>{{ vmail.start|date:'d E Y, H:i:s' }}</td>
<td>{{ vmail.answer|date:'d E Y, H:i:s' }}</td> <td>{{ vmail.answer|date:'d E Y, H:i:s' }}</td>
@ -45,7 +39,7 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="9">{% trans 'Calls was not found' %}</td>
<td colspan="8">{% trans 'Calls was not found' %}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

3
dialing_app/urls.py

@ -6,5 +6,6 @@ urlpatterns = [
url(r'^$', views.home, name='home'), url(r'^$', views.home, name='home'),
url(r'^filter$', views.vfilter, name='vfilter'), url(r'^filter$', views.vfilter, name='vfilter'),
url(r'^to_abon(?P<tel>\+?\d+)$', views.to_abon, name='to_abon'), url(r'^to_abon(?P<tel>\+?\d+)$', views.to_abon, name='to_abon'),
url(r'^voicemail$', views.vmail, name='vmail')
url(r'^requests$', views.vmail_request, name='vmail_request'),
url(r'^reports$', views.vmail_report, name='vmail_report')
] ]

15
dialing_app/views.py

@ -42,8 +42,8 @@ def to_abon(request, tel):
@login_required @login_required
@only_admins @only_admins
def vmail(request):
title = _('Voice mail')
def vmail_request(request):
title = _('Voice mail request')
cdr = AsteriskCDR.objects.filter(userfield='request').order_by('-calldate') cdr = AsteriskCDR.objects.filter(userfield='request').order_by('-calldate')
cdr = pag_mn(request, cdr) cdr = pag_mn(request, cdr)
return render(request, 'vmail.html', { return render(request, 'vmail.html', {
@ -51,6 +51,17 @@ def vmail(request):
'vmessages': cdr 'vmessages': cdr
}) })
@login_required
@only_admins
def vmail_report(request):
title = _('Voice mail report')
cdr = AsteriskCDR.objects.filter(userfield='report').order_by('-calldate')
cdr = pag_mn(request, cdr)
return render(request, 'vmail.html', {
'title': title,
'vmessages': cdr
})
@login_required @login_required
@only_admins @only_admins

2
taskapp/handle.py

@ -35,8 +35,6 @@ def handle(task, author, recipients, abon_group):
fulltext += _('Task type - %s.') % task.get_mode_display() + '\n' fulltext += _('Task type - %s.') % task.get_mode_display() + '\n'
fulltext += task.descr if task.descr else '' fulltext += task.descr if task.descr else ''
print('task.state:', task.state)
if task.state == 'F' or task.state == 'C': if task.state == 'F' or task.state == 'C':
# Если задача завершена или провалена то отправляем одно оповещение автору # Если задача завершена или провалена то отправляем одно оповещение автору
try: try:

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

@ -378,3 +378,9 @@ msgstr "Задачи, которые необходимо выполнить"
msgid "locality %s. Task type - %s. " msgid "locality %s. Task type - %s. "
msgstr "с. %s. Тип задачи - %s. " msgstr "с. %s. Тип задачи - %s. "
msgid "ip conflict"
msgstr "Ip конфликт"
msgid "Internet crash"
msgstr "Нет интернета"

2
taskapp/models.py

@ -23,6 +23,7 @@ TASK_STATES = (
TASK_TYPES = ( TASK_TYPES = (
('na', _('not chosen')), ('na', _('not chosen')),
('ic', _('ip conflict')),
('yt', _('yellow triangle')), ('yt', _('yellow triangle')),
('rc', _('red cross')), ('rc', _('red cross')),
('ls', _('weak speed')), ('ls', _('weak speed')),
@ -32,6 +33,7 @@ TASK_TYPES = (
('cr', _('router setup')), ('cr', _('router setup')),
('co', _('configure onu')), ('co', _('configure onu')),
('fc', _('crimp cable')), ('fc', _('crimp cable')),
('ni', _('Internet crash')),
('ot', _('other')) ('ot', _('other'))
) )

Loading…
Cancel
Save