Exemplo n.º 1
0
def notify_new_comment_slack(instance):
    instance = clean_instance(instance, Comment)

    if ContentType.objects.get_for_model(
            Task) != ContentType.objects.get_for_model(
                instance.content_object):
        return

    task = instance.content_object
    if not slack_utils.is_task_notification_enabled(task,
                                                    slugs.EVENT_COMMUNICATION):
        return

    task_url = '{}/work/{}/'.format(TUNGA_URL, task.id)

    slack_msg = '{} | <{}|View on Tunga>'.format(instance.text_body, task_url)
    extras = dict(author_name=instance.user.display_name)

    try:
        if instance.user.avatar_url:
            extras['author_icon'] = instance.user.avatar_url
    except:
        pass

    slack_utils.send_integration_message(instance.content_object,
                                         message=slack_msg,
                                         **extras)
Exemplo n.º 2
0
def notify_new_task_application_slack(instance):
    instance = clean_instance(instance, Application)

    if not slack_utils.is_task_notification_enabled(instance.task,
                                                    slugs.EVENT_APPLICATION):
        return

    application_url = '%s/work/%s/applications/' % (TUNGA_URL,
                                                    instance.task_id)
    slack_msg = "New application from %s" % instance.user.short_name
    attachments = [{
        slack_utils.KEY_TITLE:
        instance.task.summary,
        slack_utils.KEY_TITLE_LINK:
        application_url,
        slack_utils.KEY_TEXT:
        '%s%s%s%s\n\n<%s|View details on Tunga>' %
        (truncatewords(convert_to_text(instance.pitch),
                       100), instance.hours_needed
         and '\n*Workload:* {} hrs'.format(instance.hours_needed)
         or '', instance.deliver_at and '\n*Delivery Date:* {}'.format(
             instance.deliver_at.strftime("%d %b, %Y at %H:%M GMT"))
         or '', instance.remarks and '\n*Remarks:* {}'.format(
             truncatewords(convert_to_text(instance.remarks), 100))
         or '', application_url),
        slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
        slack_utils.KEY_COLOR:
        SLACK_ATTACHMENT_COLOR_TUNGA
    }]
    slack_utils.send_integration_message(instance.task,
                                         message=slack_msg,
                                         attachments=attachments)
Exemplo n.º 3
0
def notify_new_progress_report_slack(instance, updated=False):
    instance = clean_instance(instance, ProgressReport)

    is_pm_report = instance.event.type in [
        PROGRESS_EVENT_TYPE_PM, PROGRESS_EVENT_TYPE_MILESTONE_INTERNAL
    ]
    is_client_report = instance.event.type == PROGRESS_EVENT_TYPE_CLIENT
    is_pm_or_client_report = is_pm_report or is_client_report
    is_dev_report = not is_pm_or_client_report

    # if not (slack_utils.is_task_notification_enabled(instance.event.task, slugs.EVENT_PROGRESS)):
    #    return

    # All reports go to Tunga #updates Slack
    slack_msg, attachments = create_progress_report_slack_message(
        instance, updated=updated)
    slack_utils.send_incoming_webhook(
        SLACK_STAFF_INCOMING_WEBHOOK, {
            slack_utils.KEY_TEXT: slack_msg,
            slack_utils.KEY_CHANNEL: SLACK_STAFF_UPDATES_CHANNEL,
            slack_utils.KEY_ATTACHMENTS: attachments
        })

    if is_dev_report:
        # Re-create report for clients
        slack_msg, attachments = create_progress_report_slack_message(
            instance, updated=updated, to_client=True)
        slack_utils.send_integration_message(instance.event.task,
                                             message=slack_msg,
                                             attachments=attachments)
Exemplo n.º 4
0
def notify_task_invitation_response_slack(instance):
    instance = clean_instance(instance, Participation)

    if not slack_utils.is_task_notification_enabled(instance.task, slugs.EVENT_APPLICATION):
        return

    task_url = '%s/work/%s/' % (TUNGA_URL, instance.task_id)
    slack_msg = "Task invitation %s by %s %s\n\n<%s|View on Tunga>" % (
        instance.status == STATUS_ACCEPTED and 'accepted' or 'rejected', instance.user.short_name,
        instance.status == STATUS_ACCEPTED and ':smiley: :fireworks:' or ':unamused:',
        task_url
    )
    slack_utils.send_integration_message(instance.task, message=slack_msg)
Exemplo n.º 5
0
def notify_task_application_response_slack(instance, admin=True):
    instance = clean_instance(instance, Application)

    application_url = '%s/work/%s/applications/' % (TUNGA_URL,
                                                    instance.task_id)
    task_url = '%s/work/%s/' % (TUNGA_URL, instance.task.id)
    slack_msg = "Task Application {} | <{}|View on Tunga>".format(
        instance.status == STATUS_ACCEPTED and 'accepted' or 'rejected',
        task_url)

    attachments = [{
        slack_utils.KEY_TITLE:
        instance.task.summary,
        slack_utils.KEY_TITLE_LINK:
        application_url,
        slack_utils.KEY_TEXT:
        '%s%s%s%s\n\n<%s|View on Tunga>' %
        (truncatewords(convert_to_text(instance.pitch),
                       100), instance.hours_needed
         and '\n*Workload:* {} hrs'.format(instance.hours_needed)
         or '', instance.deliver_at and '\n*Delivery Date:* {}'.format(
             instance.deliver_at.strftime("%d %b, %Y"))
         or '', instance.remarks and '\n*Remarks:* {}'.format(
             truncatewords(convert_to_text(instance.remarks), 100))
         or '', application_url),
        slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
        slack_utils.KEY_COLOR:
        SLACK_ATTACHMENT_COLOR_TUNGA
    }]
    if admin:
        slack_utils.send_incoming_webhook(
            SLACK_STAFF_INCOMING_WEBHOOK, {
                slack_utils.KEY_TEXT: slack_msg,
                slack_utils.KEY_ATTACHMENTS: attachments,
                slack_utils.KEY_CHANNEL: SLACK_STAFF_LEADS_CHANNEL
            })
    else:
        slack_utils.send_integration_message(instance.task,
                                             message=slack_msg,
                                             attachments=attachments)
Exemplo n.º 6
0
def notify_task_application_response_slack(instance, admin=True):
    instance = clean_instance(instance, Application)

    application_url = '%s/work/%s/applications/' % (TUNGA_URL, instance.task_id)
    task_url = '%s/work/%s/' % (TUNGA_URL, instance.task.id)
    slack_msg = "Task Application {} | <{}|View on Tunga>".format(
        instance.status == STATUS_ACCEPTED and 'accepted' or 'rejected',
        task_url
    )

    attachments = [
        {
            slack_utils.KEY_TITLE: instance.task.summary,
            slack_utils.KEY_TITLE_LINK: application_url,
            slack_utils.KEY_TEXT: '%s%s%s%s\n\n<%s|View on Tunga>' %
                                  (truncatewords(convert_to_text(instance.pitch), 100),
                                   instance.hours_needed and '\n*Workload:* {} hrs'.format(instance.hours_needed) or '',
                                   instance.deliver_at and '\n*Delivery Date:* {}'.format(
                                       instance.deliver_at.strftime("%d %b, %Y")
                                   ) or '',
                                   instance.remarks and '\n*Remarks:* {}'.format(
                                       truncatewords(convert_to_text(instance.remarks), 100)
                                   ) or '',
                                   application_url),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_TUNGA
        }
    ]
    if admin:
        slack_utils.send_incoming_webhook(
            SLACK_STAFF_INCOMING_WEBHOOK,
            {
                slack_utils.KEY_TEXT: slack_msg,
                slack_utils.KEY_ATTACHMENTS: attachments,
                slack_utils.KEY_CHANNEL: SLACK_STAFF_LEADS_CHANNEL
            }
        )
    else:
        slack_utils.send_integration_message(instance.task, message=slack_msg, attachments=attachments)
Exemplo n.º 7
0
def notify_new_comment_slack(instance):
    instance = clean_instance(instance, Comment)

    if ContentType.objects.get_for_model(Task) != ContentType.objects.get_for_model(instance.content_object):
        return

    task = instance.content_object
    if not slack_utils.is_task_notification_enabled(task, slugs.EVENT_COMMUNICATION):
        return

    task_url = '{}/work/{}/'.format(TUNGA_URL, task.id)

    slack_msg = '{} | <{}|View on Tunga>'.format(instance.text_body, task_url)
    extras = dict(author_name=instance.user.display_name)

    try:
        if instance.user.avatar_url:
            extras['author_icon'] = instance.user.avatar_url
    except:
        pass

    slack_utils.send_integration_message(instance.content_object, message=slack_msg, **extras)
Exemplo n.º 8
0
def notify_new_progress_report_slack(instance, updated=False):
    instance = clean_instance(instance, ProgressReport)

    is_pm_report = instance.event.type in [LEGACY_PROGRESS_EVENT_TYPE_PM, LEGACY_PROGRESS_EVENT_TYPE_MILESTONE_INTERNAL]
    is_client_report = instance.event.type in [LEGACY_PROGRESS_EVENT_TYPE_CLIENT, LEGACY_PROGRESS_EVENT_TYPE_CLIENT_MID_SPRINT]
    is_pm_or_client_report = is_pm_report or is_client_report
    is_dev_report = not is_pm_or_client_report

    # if not (slack_utils.is_task_notification_enabled(instance.event.task, slugs.EVENT_PROGRESS)):
    #    return

    # All reports go to Tunga #updates Slack
    slack_msg, attachments = create_progress_report_slack_message(instance, updated=updated)
    slack_utils.send_incoming_webhook(SLACK_STAFF_INCOMING_WEBHOOK, {
        slack_utils.KEY_TEXT: slack_msg,
        slack_utils.KEY_CHANNEL: SLACK_STAFF_UPDATES_CHANNEL,
        slack_utils.KEY_ATTACHMENTS: attachments
    })

    if is_dev_report:
        # Re-create report for clients
        slack_msg, attachments = create_progress_report_slack_message(instance, updated=updated, to_client=True)
        slack_utils.send_integration_message(instance.event.task, message=slack_msg, attachments=attachments)
Exemplo n.º 9
0
def notify_new_task_application_slack(instance, admin=True):
    instance = clean_instance(instance, Application)

    if not slack_utils.is_task_notification_enabled(instance.task, slugs.EVENT_APPLICATION):
        return

    application_url = '%s/work/%s/applications/' % (TUNGA_URL, instance.task_id)
    slack_msg = "New application from %s" % instance.user.short_name
    attachments = [
        {
            slack_utils.KEY_TITLE: instance.task.summary,
            slack_utils.KEY_TITLE_LINK: application_url,
            slack_utils.KEY_TEXT: '%s%s%s%s\n\n<%s|View on Tunga>' %
                                  (truncatewords(convert_to_text(instance.pitch), 100),
                                   instance.hours_needed and '\n*Workload:* {} hrs'.format(instance.hours_needed) or '',
                                   instance.deliver_at and '\n*Delivery Date:* {}'.format(
                                       instance.deliver_at.strftime("%d %b, %Y")
                                   ) or '',
                                   instance.remarks and '\n*Remarks:* {}'.format(
                                       truncatewords(convert_to_text(instance.remarks), 100)
                                   ) or '',
                                   application_url),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_TUNGA
        }
    ]
    if admin:
        slack_utils.send_incoming_webhook(
            SLACK_STAFF_INCOMING_WEBHOOK,
            {
                slack_utils.KEY_TEXT: slack_msg,
                slack_utils.KEY_ATTACHMENTS: attachments,
                slack_utils.KEY_CHANNEL: SLACK_STAFF_LEADS_CHANNEL
            }
        )
    else:
        slack_utils.send_integration_message(instance.task, message=slack_msg, attachments=attachments)
Exemplo n.º 10
0
def notify_new_progress_report_slack(instance):
    instance = clean_instance(instance, ProgressReport)

    if not slack_utils.is_task_notification_enabled(instance.event.task,
                                                    slugs.EVENT_PROGRESS):
        return

    report_url = '%s/work/%s/event/%s/' % (TUNGA_URL, instance.event.task_id,
                                           instance.event_id)
    slack_msg = "%s submitted a Progress Report | %s" % (
        instance.user.display_name,
        '<{}|View details on Tunga>'.format(report_url))
    attachments = [{
        slack_utils.KEY_TITLE:
        instance.event.task.summary,
        slack_utils.KEY_TITLE_LINK:
        report_url,
        slack_utils.KEY_TEXT:
        '*Status:* %s'
        '\n*Percentage completed:* %s%s' %
        (instance.get_status_display(), instance.percentage, '%'),
        slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
        slack_utils.KEY_COLOR:
        SLACK_ATTACHMENT_COLOR_BLUE
    }]
    if instance.accomplished:
        attachments.append({
            slack_utils.KEY_TITLE:
            'What has been accomplished since last update?',
            slack_utils.KEY_TEXT:
            convert_to_text(instance.accomplished),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR:
            SLACK_ATTACHMENT_COLOR_GREEN
        })
    if instance.next_steps:
        attachments.append({
            slack_utils.KEY_TITLE:
            'What are the next next steps?',
            slack_utils.KEY_TEXT:
            convert_to_text(instance.next_steps),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR:
            SLACK_ATTACHMENT_COLOR_BLUE
        })
    if instance.obstacles:
        attachments.append({
            slack_utils.KEY_TITLE:
            'What obstacles are impeding your progress?',
            slack_utils.KEY_TEXT:
            convert_to_text(instance.obstacles),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR:
            SLACK_ATTACHMENT_COLOR_RED
        })
    if instance.remarks:
        attachments.append({
            slack_utils.KEY_TITLE:
            'Other remarks or questions',
            slack_utils.KEY_TEXT:
            convert_to_text(instance.remarks),
            slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT],
            slack_utils.KEY_COLOR:
            SLACK_ATTACHMENT_COLOR_NEUTRAL
        })
    slack_utils.send_integration_message(instance.event.task,
                                         message=slack_msg,
                                         attachments=attachments)