Browse Source

Теперь ответственные за задачу выбираются из групп абонентов на которые назначены эти работники

devel
Dmitry 9 years ago
parent
commit
a8392e655f
  1. 9
      taskapp/forms.py
  2. 2
      taskapp/handle.sh
  3. 38
      taskapp/models.py
  4. 1
      taskapp/urls.py
  5. 79
      taskapp/views.py
  6. 20
      templates/taskapp/add_edit_task.html
  7. 12
      templates/taskapp/tasklist.html
  8. 13
      templates/taskapp/tasklist_active.html
  9. 12
      templates/taskapp/tasklist_all.html
  10. 13
      templates/taskapp/tasklist_finish.html
  11. 13
      templates/taskapp/tasklist_own.html

9
taskapp/forms.py

@ -2,25 +2,20 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django import forms from django import forms
from models import Task from models import Task
from accounts_app.models import UserProfile
class TaskFrm(forms.ModelForm): class TaskFrm(forms.ModelForm):
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
exclude = ['time_of_create', 'author']
exclude = ['time_of_create', 'author', 'recipients', 'device']
widgets = { widgets = {
'descr': forms.TextInput(attrs={ 'descr': forms.TextInput(attrs={
'placeholder': u'Краткое описание', 'placeholder': u'Краткое описание',
'class': "form-control", 'class': "form-control",
'required': '' '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'}),
'out_date': forms.DateInput(attrs={'class': 'form-control'}), 'out_date': forms.DateInput(attrs={'class': 'form-control'}),

2
taskapp/handle.sh

@ -2,7 +2,7 @@
FIRST="$1" # $1 - 'start' or 'change' FIRST="$1" # $1 - 'start' or 'change'
FAIL_MODE="$2" # $2 - mode FAIL_MODE="$2" # $2 - mode
DEVICE_IP="$3" # $3 - dev ip
RESERVED="$3" # $3 - (dev ip)
STATE="$4" # $4 - state STATE="$4" # $4 - state
AUTHOR_TEL="$5" # $5 - author telephone AUTHOR_TEL="$5" # $5 - author telephone
RECIPIENT_TEL="$6" # $6 - recipient telephone RECIPIENT_TEL="$6" # $6 - recipient telephone

38
taskapp/models.py

@ -8,7 +8,7 @@ from django.db import models
from django.conf import settings from django.conf import settings
from abonapp.models import Abon 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
@ -41,20 +41,17 @@ TASK_TYPES = (
class Task(models.Model): class Task(models.Model):
descr = models.CharField(max_length=128) descr = models.CharField(max_length=128)
recipient = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
recipients = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='them_task')
author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+') author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
device = models.ForeignKey(Device, related_name='dev')
#device = models.ForeignKey(Device, related_name='dev')
priority = models.CharField(max_length=1, choices=TASK_PRIORITIES, default=TASK_PRIORITIES[2][0]) priority = models.CharField(max_length=1, choices=TASK_PRIORITIES, default=TASK_PRIORITIES[2][0])
out_date = models.DateField(null=True, blank=True, default=datetime.now() + timedelta(days=7))
out_date = models.DateField(null=True, blank=True, default=datetime.now() + timedelta(days=3))
time_of_create = models.DateTimeField(auto_now_add=True) time_of_create = models.DateTimeField(auto_now_add=True)
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, related_name='+') abon = models.ForeignKey(Abon, on_delete=models.SET_NULL, null=True, blank=True, related_name='+')
def __unicode__(self):
return self.descr
class Meta: class Meta:
db_table = 'task' db_table = 'task'
ordering = ('-id',) ordering = ('-id',)
@ -105,19 +102,20 @@ def task_handler(sender, instance, **kwargs):
act_type=b'e', act_type=b'e',
who=instance.author who=instance.author
) )
call(['%s/handle.sh' % cur_dir,
first_param, # start or change
instance.get_mode_display(), # mode - Характер поломки
instance.device.ip_address, # ip устройства
instance.state, # Состояние задачи (новая|выполнена)
instance.author.telephone, # Телефон автора задачи
instance.recipient.telephone, # Телефон ответственного монтажника
instance.descr, # Описание задачи
# Если указан абонент то инфа о нём
instance.abon.fio if instance.abon else '<нет фио>',
instance.abon.address if instance.abon else '<нет адреса>',
instance.abon.telephone if instance.abon else '<нет телефона>',
group_name]) # Имя группы абонента
for recipient in instance.recipients.all():
call(['%s/handle.sh' % cur_dir,
first_param, # start or change
instance.get_mode_display(), # mode - Характер поломки
'N', # (ip устройства) Зарезервировано
instance.state, # Состояние задачи (новая|выполнена)
instance.author.telephone, # Телефон автора задачи
recipient.telephone, # Телефон ответственного монтажника
instance.descr, # Описание задачи
# Если указан абонент то инфа о нём
instance.abon.fio if instance.abon else '<нет фио>',
instance.abon.address if instance.abon else '<нет адреса>',
instance.abon.telephone if instance.abon else '<нет телефона>',
group_name]) # Имя группы абонента
models.signals.post_save.connect(task_handler, sender=Task) models.signals.post_save.connect(task_handler, sender=Task)

1
taskapp/urls.py

@ -5,6 +5,7 @@ import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'), url(r'^$', views.home, name='home'),
url(r'^(?P<task_id>\d+)$', views.view, name='view'),
url(r'^(?P<task_id>\d+)/edit$', views.task_add_edit, name='edit'), url(r'^(?P<task_id>\d+)/edit$', views.task_add_edit, name='edit'),
url(r'^(?P<task_id>\d+)/delete$', views.task_delete, name='delete'), url(r'^(?P<task_id>\d+)/delete$', views.task_delete, name='delete'),
url(r'^(?P<task_id>\d+)/fin$', views.task_finish, name='finish'), url(r'^(?P<task_id>\d+)/fin$', views.task_finish, name='finish'),

79
taskapp/views.py

@ -2,7 +2,7 @@
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_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 abonapp.models import Abon
from datetime import date
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
from forms import TaskFrm from forms import TaskFrm
@ -11,7 +11,7 @@ from forms import TaskFrm
@login_required @login_required
@only_admins @only_admins
def home(request): def home(request):
tasks = Task.objects.filter(recipient=request.user, state='S') # Новые задачи
tasks = Task.objects.filter(recipients=request.user, state='S') # Новые задачи
# filter # filter
# dir, field = order_helper(request) # dir, field = order_helper(request)
@ -28,7 +28,7 @@ def home(request):
@login_required @login_required
@only_admins @only_admins
def active_tasks(request): def active_tasks(request):
tasks = Task.objects.filter(recipient=request.user, state='C') # На выполнении
tasks = Task.objects.filter(recipients=request.user, state='C') # На выполнении
tasks = pag_mn(request, tasks) tasks = pag_mn(request, tasks)
return render(request, 'taskapp/tasklist_active.html', { return render(request, 'taskapp/tasklist_active.html', {
'tasks': tasks 'tasks': tasks
@ -38,7 +38,7 @@ def active_tasks(request):
@login_required @login_required
@only_admins @only_admins
def finished_tasks(request): def finished_tasks(request):
tasks = Task.objects.filter(recipient=request.user, state='F') # Выполненные
tasks = Task.objects.filter(recipients=request.user, state='F') # Выполненные
tasks = pag_mn(request, tasks) tasks = pag_mn(request, tasks)
return render(request, 'taskapp/tasklist_finish.html', { return render(request, 'taskapp/tasklist_finish.html', {
'tasks': tasks 'tasks': tasks
@ -58,7 +58,7 @@ def own_tasks(request):
@login_required @login_required
@only_admins @only_admins
def my_tasks(request): def my_tasks(request):
tasks = Task.objects.filter(recipient=request.user) # Все задачи
tasks = Task.objects.filter(recipients=request.user) # Все задачи
tasks = pag_mn(request, tasks) tasks = pag_mn(request, tasks)
return render(request, 'taskapp/tasklist.html', { return render(request, 'taskapp/tasklist.html', {
'tasks': tasks 'tasks': tasks
@ -78,52 +78,73 @@ def all_tasks(request):
@permission_required('taskapp.can_delete_task') @permission_required('taskapp.can_delete_task')
def task_delete(request, task_id): def task_delete(request, task_id):
task = get_object_or_404(Task, id=task_id) task = get_object_or_404(Task, id=task_id)
if request.user != task.recipient:
# нельзя удалить назначенную мне задачу
if request.user not in task.recipients.all():
task.delete() task.delete()
return redirect('taskapp:home') return redirect('taskapp:home')
@login_required
@only_admins
def view(request, task_id):
tsk = get_object_or_404(Task, id=task_id)
toc = date(tsk.time_of_create.year, tsk.time_of_create.month, tsk.time_of_create.day)
time_diff = tsk.out_date - toc
return render(request, 'taskapp/view.html', {
'task': tsk,
'time_diff': time_diff
})
@login_required @login_required
@permission_required('taskapp.can_change_task') @permission_required('taskapp.can_change_task')
def task_add_edit(request, task_id=0): def task_add_edit(request, task_id=0):
task_id = safe_int(task_id) task_id = safe_int(task_id)
warntext = '' warntext = ''
uid = request.GET.get('uid') uid = request.GET.get('uid')
selected_abon = None selected_abon = None
frm = TaskFrm()
# чтоб при добавлении сразу был выбран исполнитель # чтоб при добавлении сразу был выбран исполнитель
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:
tsk = Task() tsk = Task()
tsk.author = request.user
else: else:
tsk = get_object_or_404(Task, id=task_id) tsk = get_object_or_404(Task, id=task_id)
frm = TaskFrm(instance=tsk)
selected_abon = tsk.abon
if uid:
selected_abon = get_object_or_404(Abon, username=str(uid))
if request.method == 'POST': if request.method == 'POST':
tsk.author = request.user
frm = TaskFrm(request.POST, request.FILES, instance=tsk) frm = TaskFrm(request.POST, request.FILES, instance=tsk)
if frm.is_valid(): if frm.is_valid():
frm.save()
return redirect('taskapp:home')
else:
warntext = u'Исправте ошибки'
else:
if task_id == 0:
try:
uid = int(uid or 0)
selected_abon = None if uid == 0 else get_object_or_404(Abon, username=str(uid))
frm = TaskFrm(initial={
'recipient': frm_recipient_id,
'abon': selected_abon
})
except ValueError:
warntext=u'Передаваемый логин абонента должен состоять только из цифр'
frm = TaskFrm(initial={
'recipient': frm_recipient_id
})
task_instance = frm.save()
# получим абонента, выбранного в форме
selected_abon = task_instance.abon
if selected_abon:
# получаем аккаунты назначенные на группу выбранного абонента
profiles = selected_abon.group.profiles.filter(is_active=True).filter(is_admin=True)
# если нашли кого-нибудь
if profiles.count() > 0:
# выбираем их id в базе
profile_ids = [prof.id for prof in profiles]
# добавляем найденных работников в задачу
task_instance.recipients.add(*profile_ids)
# окончательно сохраняемся
task_instance.save()
return redirect('taskapp:home')
else:
warntext=u'Нет ответственных за группу, в которой находится выбранный абонент'
else:
warntext=u'Нужно выбрать абонента'
else: else:
frm = TaskFrm(instance=tsk)
selected_abon = tsk.abon
warntext = u'Ошибка в полях формы в задаче'
return render(request, 'taskapp/add_edit_task.html', { return render(request, 'taskapp/add_edit_task.html', {
'warntext': warntext, 'warntext': warntext,

20
templates/taskapp/add_edit_task.html

@ -21,10 +21,10 @@
<div class="panel-body"> <div class="panel-body">
{% if task_id %} {% if task_id %}
<form role="form" action="{% url 'taskapp:edit' task_id %}"
<form role="form" action="{% url 'taskapp:edit' task_id %}" method="post" enctype="multipart/form-data">
{% else %} {% else %}
<form role="form" action="{% url 'taskapp:add' %}"
{% endif %} method="post" enctype="multipart/form-data">
<form role="form" action="{% url 'taskapp:add' %}" method="post" enctype="multipart/form-data">
{% endif %}
{% csrf_token %}<input type="hidden" name="MAX_FILE_SIZE" value="409600"/> {% csrf_token %}<input type="hidden" name="MAX_FILE_SIZE" value="409600"/>
<div class="form-group"> <div class="form-group">
@ -35,22 +35,14 @@
{{ form.descr }}{{ form.descr.errors }} {{ form.descr }}{{ form.descr.errors }}
</div> </div>
</div> </div>
<div class="form-group">
<label for="id_recipient">Ответственный за выполнение задачи</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
{{ form.recipient }}{{ form.recipient.errors }}
</div>
</div>
<div class="form-group">
<!--<div class="form-group">
<label for="id_device">С каким устройством связано</label> <label for="id_device">С каким устройством связано</label>
<div class="input-group"> <div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-hdd"></span></span> <span class="input-group-addon"><span class="glyphicon glyphicon-hdd"></span></span>
{{ form.device }}{{ form.device.errors }}
{ { form.device }}{ { form.device.errors }}
</div> </div>
</div>
</div>-->
<div class="form-group"> <div class="form-group">
<label for="id_mode">Характер поломки</label> <label for="id_mode">Характер поломки</label>

12
templates/taskapp/tasklist.html

@ -6,13 +6,11 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th class="col-sm-2">Пару слов..</th>
<th class="col-sm-1">Кому назначена</th>
<th class="col-sm-4">Пару слов..</th>
<th class="col-sm-1">Кто назначил</th> <th class="col-sm-1">Кто назначил</th>
<th class="col-sm-1">Характер поломки</th> <th class="col-sm-1">Характер поломки</th>
<th class="col-sm-1">Состояние</th> <th class="col-sm-1">Состояние</th>
<th class="col-sm-1">Приоритет</th> <th class="col-sm-1">Приоритет</th>
<th class="col-sm-1">Устройство</th>
<th class="col-sm-1">Дата создания</th> <th class="col-sm-1">Дата создания</th>
<th class="col-sm-1">Приложение</th> <th class="col-sm-1">Приложение</th>
<th class="col-sm-2" colspan="3">Действия</th> <th class="col-sm-2" colspan="3">Действия</th>
@ -30,14 +28,12 @@
{% else %} {% else %}
<tr>{% endif %} <tr>{% endif %}
<td>{{ task.id }}</td>
<td><a href="{% url 'taskapp:view' task.id %}" target="_blank">{{ task.id }}</a></td>
<td>{{ task.descr }}</td> <td>{{ task.descr }}</td>
<td><a href="{% url 'acc_app:other_profile' task.recipient.id %}" title="{{ task.recipient.get_full_name }}">{{ task.recipient.username }}</a></td>
<td><a href="{% url 'acc_app:other_profile' task.author.id %}" title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td> <td><a href="{% url 'acc_app:other_profile' task.author.id %}" title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td>
<td>{{ task.get_mode_display }}</td> <td>{{ task.get_mode_display }}</td>
<td>{{ task.get_state_display }}</td> <td>{{ task.get_state_display }}</td>
<td>{{ task.get_priority_display }}</td> <td>{{ task.get_priority_display }}</td>
<td><a href="{% url 'devapp:view' task.device.id %}" target="_blank">{{ task.device.ip_address }}</a></td>
<td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td> <td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td>
<td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td> <td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td>
<td colspan="3" class="btn-group btn-group-justified"> <td colspan="3" class="btn-group btn-group-justified">
@ -56,13 +52,13 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="13">Список пуст</td>
<td colspan="11">Список пуст</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="13">
<td colspan="11">
{% include 'taskapp/footer_btns.html' %} {% include 'taskapp/footer_btns.html' %}
</td> </td>
</tr> </tr>

13
templates/taskapp/tasklist_active.html

@ -6,13 +6,11 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th class="col-sm-2">Пару слов..</th>
<th class="col-sm-1">Кому назначена</th>
<th class="col-sm-4">Пару слов..</th>
<th class="col-sm-1">Кто назначил</th> <th class="col-sm-1">Кто назначил</th>
<th class="col-sm-1">Характер поломки</th> <th class="col-sm-1">Характер поломки</th>
<th class="col-sm-1">Состояние</th> <th class="col-sm-1">Состояние</th>
<th class="col-sm-1">Приоритет</th> <th class="col-sm-1">Приоритет</th>
<th class="col-sm-1">Устройство</th>
<th class="col-sm-1">Дата создания</th> <th class="col-sm-1">Дата создания</th>
<th class="col-sm-1">Приложение</th> <th class="col-sm-1">Приложение</th>
<th class="col-sm-2" colspan="3">Действия</th> <th class="col-sm-2" colspan="3">Действия</th>
@ -30,16 +28,13 @@
{% else %} {% else %}
<tr>{% endif %} <tr>{% endif %}
<td>{{ task.id }}</td>
<td><a href="{% url 'taskapp:view' task.id %}" target="_blank">{{ task.id }}</a></td>
<td>{{ task.descr }}</td> <td>{{ task.descr }}</td>
<td><a href="{% url 'acc_app:other_profile' task.recipient.id %}"
title="{{ task.recipient.get_full_name }}">{{ task.recipient.username }}</a></td>
<td><a href="{% url 'acc_app:other_profile' task.author.id %}" <td><a href="{% url 'acc_app:other_profile' task.author.id %}"
title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td> title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td>
<td>{{ task.get_mode_display }}</td> <td>{{ task.get_mode_display }}</td>
<td>{{ task.get_state_display }}</td> <td>{{ task.get_state_display }}</td>
<td>{{ task.get_priority_display }}</td> <td>{{ task.get_priority_display }}</td>
<td><a href="{% url 'devapp:view' task.device.id %}" target="_blank">{{ task.device.ip_address }}</a></td>
<td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td> <td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td>
<td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td> <td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td>
<td colspan="3" class="btn-group"> <td colspan="3" class="btn-group">
@ -60,13 +55,13 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="13">Список пуст</td>
<td colspan="11">Список пуст</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="13">
<td colspan="11">
{% include 'taskapp/footer_btns.html' %} {% include 'taskapp/footer_btns.html' %}
</td> </td>
</tr> </tr>

12
templates/taskapp/tasklist_all.html

@ -23,13 +23,11 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th class="col-sm-2">Пару слов..</th>
<th class="col-sm-1">Кому назначена</th>
<th class="col-sm-4">Пару слов..</th>
<th class="col-sm-1">Кто назначил</th> <th class="col-sm-1">Кто назначил</th>
<th class="col-sm-1">Характер поломки</th> <th class="col-sm-1">Характер поломки</th>
<th class="col-sm-1">Состояние</th> <th class="col-sm-1">Состояние</th>
<th class="col-sm-1">Приоритет</th> <th class="col-sm-1">Приоритет</th>
<th class="col-sm-1">Устройство</th>
<th class="col-sm-1">Дата создания</th> <th class="col-sm-1">Дата создания</th>
<th class="col-sm-1">Приложение</th> <th class="col-sm-1">Приложение</th>
<th class="col-sm-2" colspan="3">Действия</th> <th class="col-sm-2" colspan="3">Действия</th>
@ -47,14 +45,12 @@
{% else %} {% else %}
<tr>{% endif %} <tr>{% endif %}
<td>{{ task.id }}</td>
<td><a href="{% url 'taskapp:view' task.id %}" target="_blank">{{ task.id }}</a></td>
<td>{{ task.descr }}</td> <td>{{ task.descr }}</td>
<td><a href="{% url 'acc_app:other_profile' task.recipient.id %}" title="{{ task.recipient.get_full_name }}">{{ task.recipient.username }}</a></td>
<td><a href="{% url 'acc_app:other_profile' task.author.id %}" title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td> <td><a href="{% url 'acc_app:other_profile' task.author.id %}" title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td>
<td>{{ task.get_mode_display }}</td> <td>{{ task.get_mode_display }}</td>
<td>{{ task.get_state_display }}</td> <td>{{ task.get_state_display }}</td>
<td>{{ task.get_priority_display }}</td> <td>{{ task.get_priority_display }}</td>
<td><a href="{% url 'devapp:view' task.device.id %}" target="_blank">{{ task.device.ip_address }}</a></td>
<td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td> <td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td>
<td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td> <td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td>
<td colspan="3" class="btn-group btn-group-justified"> <td colspan="3" class="btn-group btn-group-justified">
@ -67,13 +63,13 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="13">Список пуст</td>
<td colspan="12">Список пуст</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="13">
<td colspan="12">
{% include 'taskapp/footer_btns.html' %} {% include 'taskapp/footer_btns.html' %}
</td> </td>
</tr> </tr>

13
templates/taskapp/tasklist_finish.html

@ -6,13 +6,11 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th class="col-sm-2">Пару слов..</th>
<th class="col-sm-1">Кому назначена</th>
<th class="col-sm-4">Пару слов..</th>
<th class="col-sm-1">Кто назначил</th> <th class="col-sm-1">Кто назначил</th>
<th class="col-sm-1">Характер поломки</th> <th class="col-sm-1">Характер поломки</th>
<th class="col-sm-1">Состояние</th> <th class="col-sm-1">Состояние</th>
<th class="col-sm-1">Приоритет</th> <th class="col-sm-1">Приоритет</th>
<th class="col-sm-1">Устройство</th>
<th class="col-sm-1">Дата создания</th> <th class="col-sm-1">Дата создания</th>
<th class="col-sm-1">Приложение</th> <th class="col-sm-1">Приложение</th>
<th class="col-sm-2" colspan="3">Действия</th> <th class="col-sm-2" colspan="3">Действия</th>
@ -30,16 +28,13 @@
{% else %} {% else %}
<tr>{% endif %} <tr>{% endif %}
<td>{{ task.id }}</td>
<td><a href="{% url 'taskapp:view' task.id %}" target="_blank">{{ task.id }}</a></td>
<td>{{ task.descr }}</td> <td>{{ task.descr }}</td>
<td><a href="{% url 'acc_app:other_profile' task.recipient.id %}"
title="{{ task.recipient.get_full_name }}">{{ task.recipient.username }}</a></td>
<td><a href="{% url 'acc_app:other_profile' task.author.id %}" <td><a href="{% url 'acc_app:other_profile' task.author.id %}"
title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td> title="{{ task.author.get_full_name }}">{{ task.author.username }}</a></td>
<td>{{ task.get_mode_display }}</td> <td>{{ task.get_mode_display }}</td>
<td>{{ task.get_state_display }}</td> <td>{{ task.get_state_display }}</td>
<td>{{ task.get_priority_display }}</td> <td>{{ task.get_priority_display }}</td>
<td><a href="{% url 'devapp:view' task.device.id %}" target="_blank">{{ task.device.ip_address }}</a></td>
<td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td> <td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td>
<td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td> <td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td>
<td colspan="3" class="btn-group"> <td colspan="3" class="btn-group">
@ -53,13 +48,13 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="13">Список пуст</td>
<td colspan="11">Список пуст</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="13">
<td colspan="11">
{% include 'taskapp/footer_btns.html' %} {% include 'taskapp/footer_btns.html' %}
</td> </td>
</tr> </tr>

13
templates/taskapp/tasklist_own.html

@ -6,12 +6,10 @@
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
<th class="col-sm-4">Пару слов..</th>
<th class="col-sm-1">Кому назначена</th>
<th class="col-sm-6">Пару слов..</th>
<th class="col-sm-1">Характер поломки</th> <th class="col-sm-1">Характер поломки</th>
<th class="col-sm-1">Состояние</th> <th class="col-sm-1">Состояние</th>
<th class="col-sm-1">Приоритет</th> <th class="col-sm-1">Приоритет</th>
<th class="col-sm-1">Устройство</th>
<th class="col-sm-1">Дата создания</th> <th class="col-sm-1">Дата создания</th>
<th class="col-sm-1">Приложение</th> <th class="col-sm-1">Приложение</th>
<th class="col-sm-1">Действия</th> <th class="col-sm-1">Действия</th>
@ -29,14 +27,11 @@
{% else %} {% else %}
<tr>{% endif %} <tr>{% endif %}
<td>{{ task.id }}</td>
<td><a href="{% url 'taskapp:view' task.id %}" target="_blank">{{ task.id }}</a></td>
<td>{{ task.descr }}</td> <td>{{ task.descr }}</td>
<td><a href="{% url 'acc_app:other_profile' task.recipient.id %}"
title="{{ task.recipient.get_full_name }}">{{ task.recipient.username }}</a></td>
<td>{{ task.get_mode_display }}</td> <td>{{ task.get_mode_display }}</td>
<td>{{ task.get_state_display }}</td> <td>{{ task.get_state_display }}</td>
<td>{{ task.get_priority_display }}</td> <td>{{ task.get_priority_display }}</td>
<td><a href="{% url 'devapp:view' task.device.id %}" target="_blank">{{ task.device.ip_address }}</a></td>
<td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td> <td>{{ task.time_of_create|date:'d N yг H:i:s' }}</td>
<td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td> <td>{% if task.attachment %}<a href="{{ task.attachment.url }}" target="_blank">{{ task.attachment.name }}</a>{% else %}&horbar;{% endif %}</td>
<td class="btn-group"> <td class="btn-group">
@ -50,13 +45,13 @@
</tr> </tr>
{% empty %} {% empty %}
<tr> <tr>
<td colspan="10">Все ваши задачи выполнены</td>
<td colspan="8">Все ваши задачи выполнены</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
<tfoot> <tfoot>
<tr> <tr>
<td colspan="10">
<td colspan="8">
{% include 'taskapp/footer_btns.html' %} {% include 'taskapp/footer_btns.html' %}
</td> </td>
</tr> </tr>

Loading…
Cancel
Save