Browse Source

continue...

devel
Dmitry 9 years ago
parent
commit
5cd333c36b
  1. 4
      abonapp/urls.py
  2. 9
      abonapp/views.py
  3. 6
      static/css/bootstrap-select.min.css
  4. 9
      static/js/bootstrap-select.min.js
  5. 13
      taskapp/forms.py
  6. 9
      taskapp/handle.sh
  7. 10
      taskapp/models.py
  8. 19
      taskapp/views.py
  9. 2
      templates/base.html
  10. 17
      templates/taskapp/add_edit_task.html

4
abonapp/urls.py

@ -20,6 +20,6 @@ urlpatterns = [
url(r'^debtors$', views.debtors, name='abonapp_debtors'), url(r'^debtors$', views.debtors, name='abonapp_debtors'),
# Api's # Api's
url(r'^api/abons$', views.abons)
url(r'^api/abons$', views.abons),
url(r'^api/abon_filter$', views.search_abon)
] ]

9
abonapp/views.py

@ -2,7 +2,7 @@
from json import dumps from json import dumps
from django.db import IntegrityError from django.db import IntegrityError
from django.db.models import Count
from django.db.models import Count, Q
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
from django.utils import timezone from django.utils import timezone
@ -483,3 +483,10 @@ def abons(request):
} }
del ablist, tarlist del ablist, tarlist
return HttpResponse(dumps(data)) return HttpResponse(dumps(data))
def search_abon(request):
word = request.GET.get('s')
results = models.Abon.objects.filter(fio__icontains=word)
results = [{'id':usr.id, 'fio':usr.fio} for usr in results]
return HttpResponse(dumps(results))

6
static/css/bootstrap-select.min.css
File diff suppressed because it is too large
View File

9
static/js/bootstrap-select.min.js
File diff suppressed because it is too large
View File

13
taskapp/forms.py

@ -1,10 +1,22 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django import forms from django import forms
from abonapp.models import Abon
from models import Task from models import Task
from accounts_app.models import UserProfile
class TaskFrm(forms.ModelForm): class TaskFrm(forms.ModelForm):
abon = forms.ModelChoiceField(
queryset=Abon.objects.all(),
required=False,
widget=forms.Select(attrs={'class': 'form-control selectpicker',
'data-live-search':'true','title':"Выберите абонента"})
)
recipient = forms.ModelChoiceField(
queryset=UserProfile.objects.filter(is_admin=True),
widget=forms.Select(attrs={'class': 'form-control', 'required':''})
)
class Meta: class Meta:
model = Task model = Task
@ -15,7 +27,6 @@ class TaskFrm(forms.ModelForm):
'class': "form-control", 'class': "form-control",
'required': '' 'required': ''
}), }),
'recipient': forms.Select(attrs={'class': 'form-control', 'required':''}),
'device': forms.Select(attrs={'class': 'form-control', 'required':''}), 'device': forms.Select(attrs={'class': 'form-control', 'required':''}),
'priority': forms.Select(attrs={'class': 'form-control'}), 'priority': forms.Select(attrs={'class': 'form-control'}),
'state': forms.Select(attrs={'class': 'form-control'}), 'state': forms.Select(attrs={'class': 'form-control'}),

9
taskapp/handle.sh

@ -6,17 +6,20 @@
# $4 - state # $4 - state
# $5 - recipient telephone # $5 - recipient telephone
# $6 - description # $6 - description
# $7 - abon fio
# $8 - abon address
# $9 - abon telephone
text='' text=''
if [[ "$1" == "start" ]] if [[ "$1" == "start" ]]
then then
text="Новая задача"
text="Нов:"
else else
text="Изменение задачи"
text="Изм:"
fi fi
FULLTEXT="TO $5: $text: $3, $2. $6"
FULLTEXT="TO $5: $text: $7. $8 $9. $2. $6"
echo "$FULLTEXT" >> /tmp/task_sms.log echo "$FULLTEXT" >> /tmp/task_sms.log

10
taskapp/models.py

@ -6,6 +6,7 @@ import os
from subprocess import call from subprocess import call
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
from abonapp.models import Abon
from devapp.models import Device from devapp.models import Device
from djing.settings import BASE_DIR from djing.settings import BASE_DIR
@ -49,6 +50,7 @@ class Task(models.Model):
state = models.CharField(max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0]) state = models.CharField(max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0])
attachment = models.ImageField(upload_to='task_attachments/%Y.%m.%d', blank=True, null=True) attachment = models.ImageField(upload_to='task_attachments/%Y.%m.%d', blank=True, null=True)
mode = models.CharField(max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0]) mode = models.CharField(max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0])
abon = models.ForeignKey(Abon, on_delete=models.SET_NULL, null=True, blank=True)
def __unicode__(self): def __unicode__(self):
return self.descr return self.descr
@ -67,12 +69,16 @@ class Task(models.Model):
def task_handler(sender, instance, **kwargs): def task_handler(sender, instance, **kwargs):
cur_dir = os.path.join(BASE_DIR, "taskapp") cur_dir = os.path.join(BASE_DIR, "taskapp")
if instance.state == 'F':
return
if kwargs['created']: if kwargs['created']:
first_param = 'start' first_param = 'start'
else: else:
first_param = 'change' first_param = 'change'
call(['%s/handle.sh' % cur_dir, first_param, instance.get_mode_display(), instance.device.ip_address,
instance.state, instance.recipient.telephone, instance.descr])
call(['%s/handle.sh' % cur_dir, first_param, instance.get_mode_display(),
instance.device.ip_address if instance.mode != 'cr' or instance.mode != 'ot' else '',
instance.state, instance.recipient.telephone, instance.descr, instance.abon.fio, instance.abon.address,
instance.abon.telephone])
models.signals.post_save.connect(task_handler, sender=Task) models.signals.post_save.connect(task_handler, sender=Task)

19
taskapp/views.py

@ -1,6 +1,7 @@
# coding=utf-8 # coding=utf-8
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from abonapp.models import Abon
from models import Task from models import Task
from mydefs import pag_mn, only_admins, safe_int from mydefs import pag_mn, only_admins, safe_int
@ -76,9 +77,11 @@ def task_delete(request, task_id):
@login_required @login_required
@only_admins @only_admins
def task_add_edit(request, task_id=0): def task_add_edit(request, task_id=0):
task_id = int(task_id)
task_id = safe_int(task_id)
warntext = '' warntext = ''
uid = request.GET.get('uid')
# чтоб при добавлении сразу был выбран исполнитель # чтоб при добавлении сразу был выбран исполнитель
frm_recipient_id = safe_int(request.GET.get('rp')) frm_recipient_id = safe_int(request.GET.get('rp'))
if task_id == 0: if task_id == 0:
@ -96,9 +99,17 @@ def task_add_edit(request, task_id=0):
warntext = u'Исправте ошибки' warntext = u'Исправте ошибки'
else: else:
if task_id == 0: if task_id == 0:
frm = TaskFrm(initial={
'recipient': frm_recipient_id
})
try:
uid = int(uid or 0)
frm = TaskFrm(initial={
'recipient': frm_recipient_id,
'abon': None if uid == 0 else get_object_or_404(Abon, username=str(uid))
})
except ValueError:
warntext=u'Передаваемый логин абонента должен состоять только из цифр'
frm = TaskFrm(initial={
'recipient': frm_recipient_id
})
else: else:
frm = TaskFrm(instance=tsk) frm = TaskFrm(instance=tsk)

2
templates/base.html

@ -8,11 +8,13 @@
<link rel="stylesheet" href="/static/css/bootstrap.min.css"> <link rel="stylesheet" href="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-theme.min.css"> <link rel="stylesheet" href="/static/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-datetimepicker.min.css"> <link rel="stylesheet" href="/static/css/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-select.min.css">
<link rel="stylesheet" href="/static/css/custom.css"> <link rel="stylesheet" href="/static/css/custom.css">
<script src="/static/js/jquery-2.2.4.min.js"></script> <script src="/static/js/jquery-2.2.4.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script> <script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/moment-with-locales.min.js"></script> <script src="/static/js/moment-with-locales.min.js"></script>
<script src="/static/js/bootstrap-datetimepicker.min.js"></script> <script src="/static/js/bootstrap-datetimepicker.min.js"></script>
<script src="/static/js/bootstrap-select.min.js"></script>
<script src="/static/js/my.js"></script> <script src="/static/js/my.js"></script>
<link rel="shortcut icon" href="/static/img/favicon_m.ico"> <link rel="shortcut icon" href="/static/img/favicon_m.ico">
</head> </head>

17
templates/taskapp/add_edit_task.html

@ -7,15 +7,18 @@
<li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li> <li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li>
</ol> </ol>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Добавьте новую задачу</h3> <h3 class="panel-title">Добавьте новую задачу</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
{% if task_id %} {% if task_id %}
<form role="form" action="{% url 'task_edit' task_id %}" <form role="form" action="{% url 'task_edit' task_id %}"
@ -72,6 +75,14 @@
{{ form.state }}{{ form.state.errors }} {{ form.state }}{{ form.state.errors }}
</div> </div>
</div> </div>
<div class="form-group">
<label for="id_abon">Абонент</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
{{ form.abon }}{{ form.abon.errors }}
</div>
</div>
<div class="form-group"> <div class="form-group">
<label for="id_out_date">Актуальность (дата, до которой нужно завершить задачу)</label> <label for="id_out_date">Актуальность (дата, до которой нужно завершить задачу)</label>

Loading…
Cancel
Save