You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

90 lines
3.5 KiB

# coding=utf-8
from __future__ import unicode_literals
from datetime import datetime, timedelta
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
TASK_PRIORITIES = (
(b'A', u'Высший'),
(b'C', u'Средний'),
(b'E', u'Низкий')
)
TASK_STATES = (
(b'S', u'Новая'),
(b'C', u'На выполнении'),
(b'F', u'Выполнена')
)
TASK_TYPES = (
(b'na', u'не выбрано'),
(b'yt', u'жёлтый треугольник'),
(b'rc', u'красный крестик'),
(b'ls', u'слабая скорость'),
(b'cf', u'обрыв кабеля'),
(b'cn', u'подключение'),
(b'pf', u'переодическое пропадание'),
(b'cr', u'настройка роутера'),
(b'co', u'настроить onu'),
(b'fc', u'обжать кабель'),
(b'ot', u'другое')
)
class Task(models.Model):
descr = models.CharField(max_length=128)
recipient = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
device = models.ForeignKey(Device, related_name='dev')
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))
time_of_create = models.DateTimeField(auto_now_add=True)
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, related_name='+')
def __unicode__(self):
return self.descr
class Meta:
db_table = 'task'
ordering = ('-id',)
def finish(self, current_user):
self.state = 'F' # Выполнена
self.out_date = datetime.now() # Время завершения
def begin(self, current_user):
self.state = 'C' # Начата
def task_handler(sender, instance, **kwargs):
cur_dir = os.path.join(BASE_DIR, "taskapp")
if kwargs['created']:
first_param = 'start'
else:
first_param = 'change'
call(['%s/handle.sh' % cur_dir,
first_param, # start or change
instance.get_mode_display(), # mode - Характер поломки
instance.device.ip_address if instance.mode != 'cr' or instance.mode != 'ot' else '', # 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 '<нет телефона>'])
models.signals.post_save.connect(task_handler, sender=Task)