diff --git a/taskapp/handle.py b/taskapp/handle.py index be59da7..e31303f 100644 --- a/taskapp/handle.py +++ b/taskapp/handle.py @@ -2,41 +2,50 @@ from django.utils.translation import ugettext as _ from chatbot.telebot import send_notify from chatbot.models import ChatException +from mydefs import MultipleException class TaskException(Exception): pass -def handle(task, author, recipient, abon_group): - try: - dst_account = recipient - text = _('Task') - # Если сигнал самому себе то молчим - if author == recipient: - return - # Если задача 'На выполнении' то молчим - if task.state == 'C': - return - # Если задача завершена - elif task.state == 'F': - text = _('Task completed') - # Меняем цель назначения на автора, т.к. при завершении - # идёт оповещение автору о выполнении - dst_account = author - if task.abon is not None: - fulltext="%s:\n%s\n" % (text, task.abon.get_full_name()) - else: - fulltext="%s\n" % text - fulltext += _('locality %s.\n') % abon_group.title - if task.abon: - fulltext += _('address %s %s.\ntelephone %s\n') % ( - task.abon.street.name if task.abon.street is not None else '<'+_('not chosen')+'>', - task.abon.house, - task.abon.telephone - ) - fulltext += _('Task type - %s.') % task.get_mode_display() + '\n' - fulltext += task.descr if task.descr else '' - send_notify(fulltext, dst_account) - except ChatException as e: - raise TaskException(e) +def handle(task, author, recipients, abon_group): + errors = [] + for recipient in recipients: + try: + dst_account = recipient + text = _('Task') + # Если сигнал самому себе то молчим + if author == recipient: + return + # Если задача завершена или провалена + elif task.state == 'F' or task.state == 'C': + text = _('Task completed') + if task.abon is not None: + fulltext = "%s:\n%s\n" % (text, task.abon.get_full_name()) + else: + fulltext = "%s\n" % text + fulltext += _('locality %s.\n') % abon_group.title + if task.abon: + fulltext += _('address %s %s.\ntelephone %s\n') % ( + task.abon.street.name if task.abon.street is not None else '<'+_('not chosen')+'>', + task.abon.house, + task.abon.telephone + ) + fulltext += _('Task type - %s.') % task.get_mode_display() + '\n' + fulltext += task.descr if task.descr else '' + + print('task.state:', task.state) + + if task.state == 'F' or task.state == 'C': + # Если задача завершена или провалена то отправляем одно оповещение автору + try: + send_notify(fulltext, author) + except ChatException as e: + raise TaskException(e) + else: + send_notify(fulltext, dst_account) + except ChatException as e: + errors.append(e) + if len(errors) > 0: + raise MultipleException(errors) diff --git a/taskapp/handle.sh b/taskapp/handle.sh index e08b533..8ac380f 100755 --- a/taskapp/handle.sh +++ b/taskapp/handle.sh @@ -44,6 +44,6 @@ fi FULLTEXT="$text: $ABON_FIO. $ABON_ADDR $ABON_TEL. $ABON_GRP. $FAIL_MODE. $DESCR" -echo "TO $RECIPIENT_TEL: $FULLTEXT" >> /tmp/task_sms.log +echo "TO $RECIPIENT_TEL: $FULLTEXT" /usr/bin/gammu-smsd-inject EMS $RECIPIENT_TEL -text "$FULLTEXT" -unicode diff --git a/taskapp/models.py b/taskapp/models.py index f4db733..37e30f6 100644 --- a/taskapp/models.py +++ b/taskapp/models.py @@ -6,8 +6,7 @@ from django.conf import settings from django.utils import timezone from django.utils.translation import ugettext as _ from abonapp.models import Abon -from .handle import handle as task_handle, TaskException -from mydefs import MultipleException +from .handle import handle as task_handle TASK_PRIORITIES = ( @@ -121,17 +120,10 @@ def task_handler(sender, instance, **kwargs): act_type='e', who=instance.author ) - errors = [] - for recipient in instance.recipients.all(): - try: - task_handle( - instance, instance.author, - recipient, group - ) - except TaskException as e: - errors.append(e) - if len(errors) > 0: - raise MultipleException(errors) + task_handle( + instance, instance.author, + instance.recipients.all(), group + ) #def task_delete(sender, instance, **kwargs): diff --git a/taskapp/views.py b/taskapp/views.py index c4e1966..d8ec471 100644 --- a/taskapp/views.py +++ b/taskapp/views.py @@ -6,6 +6,8 @@ from django.contrib import messages from abonapp.models import Abon from django.utils.translation import ugettext as _ from datetime import date + +from .handle import TaskException from .models import Task from mydefs import pag_mn, only_admins, safe_int, MultipleException, RuTimedelta from .forms import TaskFrm @@ -152,6 +154,8 @@ def task_add_edit(request, task_id=0): except MultipleException as errs: for err in errs.err_list: messages.add_message(request, messages.constants.ERROR, err) + except TaskException as e: + messages.error(request, e) return render(request, 'taskapp/add_edit_task.html', { 'form': frm, @@ -169,6 +173,8 @@ def task_finish(request, task_id): except MultipleException as errs: for err in errs.err_list: messages.add_message(request, messages.constants.ERROR, err) + except TaskException as e: + messages.error(request, e) return redirect('taskapp:home') @@ -189,4 +195,6 @@ def remind(request, task_id): except MultipleException as errs: for err in errs.err_list: messages.add_message(request, messages.constants.ERROR, err) + except TaskException as e: + messages.error(request, e) return redirect('taskapp:home')