# 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)