Browse Source

FIXBUG: оповещение о выполении или проваленном задании дублировалось автору столько раз сколько было исполнителей

devel
bashmak 9 years ago
parent
commit
3bc35540a0
  1. 29
      taskapp/handle.py
  2. 2
      taskapp/handle.sh
  3. 12
      taskapp/models.py
  4. 8
      taskapp/views.py

29
taskapp/handle.py

@ -2,28 +2,25 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from chatbot.telebot import send_notify from chatbot.telebot import send_notify
from chatbot.models import ChatException from chatbot.models import ChatException
from mydefs import MultipleException
class TaskException(Exception): class TaskException(Exception):
pass pass
def handle(task, author, recipient, abon_group):
def handle(task, author, recipients, abon_group):
errors = []
for recipient in recipients:
try: try:
dst_account = recipient dst_account = recipient
text = _('Task') text = _('Task')
# Если сигнал самому себе то молчим # Если сигнал самому себе то молчим
if author == recipient: if author == recipient:
return return
# Если задача 'На выполнении' то молчим
if task.state == 'C':
return
# Если задача завершена
elif task.state == 'F':
# Если задача завершена или провалена
elif task.state == 'F' or task.state == 'C':
text = _('Task completed') text = _('Task completed')
# Меняем цель назначения на автора, т.к. при завершении
# идёт оповещение автору о выполнении
dst_account = author
if task.abon is not None: if task.abon is not None:
fulltext = "%s:\n%s\n" % (text, task.abon.get_full_name()) fulltext = "%s:\n%s\n" % (text, task.abon.get_full_name())
else: else:
@ -37,6 +34,18 @@ def handle(task, author, recipient, abon_group):
) )
fulltext += _('Task type - %s.') % task.get_mode_display() + '\n' fulltext += _('Task type - %s.') % task.get_mode_display() + '\n'
fulltext += task.descr if task.descr else '' fulltext += task.descr if task.descr else ''
send_notify(fulltext, dst_account)
print('task.state:', task.state)
if task.state == 'F' or task.state == 'C':
# Если задача завершена или провалена то отправляем одно оповещение автору
try:
send_notify(fulltext, author)
except ChatException as e: except ChatException as e:
raise TaskException(e) raise TaskException(e)
else:
send_notify(fulltext, dst_account)
except ChatException as e:
errors.append(e)
if len(errors) > 0:
raise MultipleException(errors)

2
taskapp/handle.sh

@ -44,6 +44,6 @@ fi
FULLTEXT="$text: $ABON_FIO. $ABON_ADDR $ABON_TEL. $ABON_GRP. $FAIL_MODE. $DESCR" 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 /usr/bin/gammu-smsd-inject EMS $RECIPIENT_TEL -text "$FULLTEXT" -unicode

12
taskapp/models.py

@ -6,8 +6,7 @@ from django.conf import settings
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from abonapp.models import Abon 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 = ( TASK_PRIORITIES = (
@ -121,17 +120,10 @@ def task_handler(sender, instance, **kwargs):
act_type='e', act_type='e',
who=instance.author who=instance.author
) )
errors = []
for recipient in instance.recipients.all():
try:
task_handle( task_handle(
instance, instance.author, instance, instance.author,
recipient, group
instance.recipients.all(), group
) )
except TaskException as e:
errors.append(e)
if len(errors) > 0:
raise MultipleException(errors)
#def task_delete(sender, instance, **kwargs): #def task_delete(sender, instance, **kwargs):

8
taskapp/views.py

@ -6,6 +6,8 @@ from django.contrib import messages
from abonapp.models import Abon from abonapp.models import Abon
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from datetime import date from datetime import date
from .handle import TaskException
from .models import Task from .models import Task
from mydefs import pag_mn, only_admins, safe_int, MultipleException, RuTimedelta from mydefs import pag_mn, only_admins, safe_int, MultipleException, RuTimedelta
from .forms import TaskFrm from .forms import TaskFrm
@ -152,6 +154,8 @@ def task_add_edit(request, task_id=0):
except MultipleException as errs: except MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err) messages.add_message(request, messages.constants.ERROR, err)
except TaskException as e:
messages.error(request, e)
return render(request, 'taskapp/add_edit_task.html', { return render(request, 'taskapp/add_edit_task.html', {
'form': frm, 'form': frm,
@ -169,6 +173,8 @@ def task_finish(request, task_id):
except MultipleException as errs: except MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err) messages.add_message(request, messages.constants.ERROR, err)
except TaskException as e:
messages.error(request, e)
return redirect('taskapp:home') return redirect('taskapp:home')
@ -189,4 +195,6 @@ def remind(request, task_id):
except MultipleException as errs: except MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.add_message(request, messages.constants.ERROR, err) messages.add_message(request, messages.constants.ERROR, err)
except TaskException as e:
messages.error(request, e)
return redirect('taskapp:home') return redirect('taskapp:home')
Loading…
Cancel
Save