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'),
# 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 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.contrib.auth.decorators import login_required
from django.utils import timezone
@ -483,3 +483,10 @@ def abons(request):
}
del ablist, tarlist
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 -*-
from datetime import datetime, timedelta
from django import forms
from abonapp.models import Abon
from models import Task
from accounts_app.models import UserProfile
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:
model = Task
@ -15,7 +27,6 @@ class TaskFrm(forms.ModelForm):
'class': "form-control",
'required': ''
}),
'recipient': forms.Select(attrs={'class': 'form-control', 'required':''}),
'device': forms.Select(attrs={'class': 'form-control', 'required':''}),
'priority': forms.Select(attrs={'class': 'form-control'}),
'state': forms.Select(attrs={'class': 'form-control'}),

9
taskapp/handle.sh

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

10
taskapp/models.py

@ -6,6 +6,7 @@ import os
from subprocess import call
from django.db import models
from django.conf import settings
from abonapp.models import Abon
from devapp.models import Device
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])
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])
abon = models.ForeignKey(Abon, on_delete=models.SET_NULL, null=True, blank=True)
def __unicode__(self):
return self.descr
@ -67,12 +69,16 @@ class Task(models.Model):
def task_handler(sender, instance, **kwargs):
cur_dir = os.path.join(BASE_DIR, "taskapp")
if instance.state == 'F':
return
if kwargs['created']:
first_param = 'start'
else:
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)

19
taskapp/views.py

@ -1,6 +1,7 @@
# coding=utf-8
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404
from abonapp.models import Abon
from models import Task
from mydefs import pag_mn, only_admins, safe_int
@ -76,9 +77,11 @@ def task_delete(request, task_id):
@login_required
@only_admins
def task_add_edit(request, task_id=0):
task_id = int(task_id)
task_id = safe_int(task_id)
warntext = ''
uid = request.GET.get('uid')
# чтоб при добавлении сразу был выбран исполнитель
frm_recipient_id = safe_int(request.GET.get('rp'))
if task_id == 0:
@ -96,9 +99,17 @@ def task_add_edit(request, task_id=0):
warntext = u'Исправте ошибки'
else:
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:
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-theme.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">
<script src="/static/js/jquery-2.2.4.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/bootstrap-datetimepicker.min.js"></script>
<script src="/static/js/bootstrap-select.min.js"></script>
<script src="/static/js/my.js"></script>
<link rel="shortcut icon" href="/static/img/favicon_m.ico">
</head>

17
templates/taskapp/add_edit_task.html

@ -7,15 +7,18 @@
<li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li>
</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-heading">
<h3 class="panel-title">Добавьте новую задачу</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
{% if task_id %}
<form role="form" action="{% url 'task_edit' task_id %}"
@ -72,6 +75,14 @@
{{ form.state }}{{ form.state.errors }}
</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">
<label for="id_out_date">Актуальность (дата, до которой нужно завершить задачу)</label>

Loading…
Cancel
Save