Browse Source

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

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

73
taskapp/handle.py

@ -2,41 +2,50 @@
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):
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)

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

18
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(
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): #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