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.
 
 
 
 
 

84 lines
2.9 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'B', u'Выше среднего'),
(b'C', u'Средний'),
(b'D', 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'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)
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 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 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)