Пример #1
0
def send_out_resolution(need):
    """
    Sends out a resolution for a need to providers.
    """
    alert = need.alert
    advocate = alert.user
    message = ""
    if need.resolve_message != "":
        message = "\nMsg: " + need.resolve_message
    gender = "" if alert.gender == "unspecified" else " " + alert.gender
    args = (advocate.name, advocate.organization, need.service.name, alert.age, gender)
    accepted = ("15th Night help accepted!\n" "%s with %s selected you to provide %s for a " "%d y/o%s%s") % (
        args + (message,)
    )
    denied = (
        "15th Night help not needed\n" "%s with %s does not need your help to provide %s for a " "%d y/o%s"
    ) % args

    selected = set()
    users = set(map(lambda provision: provision.response.user, need.provisions))
    for provision in need.provisions:
        if provision.selected:
            selected.add(provision.response.user_id)

    for provider in users:
        body = accepted if provider.id in selected else denied
        queue_send_message.apply_async(
            kwargs=dict(
                email=advocate.email, number=advocate.phone_number, subject="15th Night Need Resolution", body=body
            )
        )
Пример #2
0
def resolve_need(need):
    """
    Resolve a need and trigger an alert closed if necessary.
    """
    alert = need.alert
    advocate = alert.user
    message = ''
    if need.resolve_message != '':
        message = '\nMsg: ' + need.resolve_message
    gender = alert.get_gender()
    args = (advocate.name, advocate.organization, need.service.name, alert.age,
            gender)
    accepted = ('15th Night help accepted!\n'
                '%s with %s selected you to provide %s for a '
                '%d y/o%s%s') % (args + (message, ))
    denied = ('15th Night help not needed\n'
              '%s with %s does not need your help to provide %s for a '
              '%d y/o%s') % args

    selected = set()
    users = set(map(lambda provision: provision.response.user,
                    need.provisions))
    for provision in need.provisions:
        if provision.selected:
            selected.add(provision.response.user_id)

    for provider in users:
        body = accepted if provider.id in selected else denied
        queue_send_message.apply_async(
            kwargs=dict(email=advocate.email,
                        number=advocate.phone_number,
                        subject='15th Night Need Resolution',
                        body=body))
    # Check if alert is closed, if so, send out resolution notices
    _send_alert_resolution_notice(need)
Пример #3
0
def respond_to_alert(provider, needs_provided, alert):
    """
    Send a response from a provider to an advocate.
    """
    advocate = alert.user

    body = provider.email
    if provider.phone_number:
        body += ", %s" % provider.phone_number

    response = Response(user=provider, alert=alert)
    response.save()

    services_provided = []
    for provision in needs_provided:
        need = Need.get(provision["need_id"])
        need_provided = NeedProvided(need=need, response=response, message=provision["message"])
        need_provided.save()
        services_provided.append("%s: %s\n" % (need.service.name, provision["message"]))

    body += (" is availible for:\n\n%s") % ("\n".join(services_provided))

    queue_send_message.apply_async(
        kwargs=dict(email=advocate.email, number=advocate.phone_number, subject="15th Night Alert Response", body=body)
    )

    return response
Пример #4
0
def respond_to_alert(provider, needs_provided, alert):
    """
    Send a response from a provider to an advocate.
    """
    advocate = alert.user

    body = provider.email
    if provider.phone_number:
        body += ", %s" % provider.phone_number

    response = Response(user=provider, alert=alert)
    response.save()

    services_provided = []
    for provision in needs_provided:
        need = Need.get(provision['need_id'])
        need_provided = NeedProvided(need=need,
                                     response=response,
                                     message=provision['message'])
        need_provided.save()
        services_provided.append('%s: %s\n' %
                                 (need.service.name, provision['message']))

    body += (" is availible for:\n\n%s") % ("\n".join(services_provided))

    queue_send_message.apply_async(
        kwargs=dict(email=advocate.email,
                    number=advocate.phone_number,
                    subject='15th Night Alert Response',
                    body=body))

    return response
Пример #5
0
def send_out_alert(alert_form):
    """
    Send out an alert to providers.
    """
    alert = Alert(
        description=alert_form.description.data,
        gender=alert_form.gender.data,
        age=alert_form.age.data,
        user=current_user,
    )
    alert.save()
    need_ids = alert_form.needs.data
    for service in Service.get_by_ids(need_ids):
        need = Need(alert=alert, service=service)
        need.save()
    providers = User.providers_with_services(need_ids)
    for provider in providers:
        needs_provided = [
            need_ for need_ in provider.services if need_.id in need_ids
        ]
        gender = alert.get_gender()
        needs = ", ".join(
            [need_provided.name for need_provided in needs_provided])
        body = ('New 15th night alert!\n'
                '%d y/o%s\n'
                'Needs: %s\n'
                'Desc: %s\n'
                'Respond at %sr/%s') % (
                    alert.age, gender, needs,
                    alert_form.description.data,
                    url_for('index', _external=True), str(alert.id)
                )
        provider_notified = ProviderNotified(
            provider=provider,
            alert=alert,
            needs=Need.get_by_ids([need_id.id for need_id in needs_provided])
        )
        # TODO: test
        provider_notified.save()
        queue_send_message.apply_async(
            kwargs=dict(
                email=provider.email,
                number=provider.phone_number,
                subject='15th Night Alert',
                body=body
            )
        )
Пример #6
0
def send_out_alert_closed(alert):
    #TODO: Better date formatting
    #TODO: Send out which needs were just resolved, to the outstanding providers
    gender = '' if alert.gender == 'unspecified' else ' ' + alert.gender
    body = ('15th Night was alert closed.\n'
            'Alert for %d y/o%s sent on %d/%d is now closed.\n') % \
            (alert.age, gender, alert.created_at.month, alert.created_at.day)

    providers = set(
        [notified.provider for notified in alert.providers_notified])

    for provider in providers:
        queue_send_message.apply_async(
            kwargs=dict(email=provider.email,
                        number=provider.phone_number,
                        subject='15th Night Alert Closed',
                        body=body))
Пример #7
0
def _send_alert_resolution_notice(need):
    """
    Check if need.alert is closed and trigger an alert closed notification.
    """
    if need.alert.is_closed:
        alert = need.alert
        age = alert.age
        gender = alert.get_gender()
        created = alert.created_at.strftime("%m/%d at %I:%M %p")
        body = ("Alert sent on %s for a %syo%s has been closed."
                "\nSee: %s" % (created, age, gender, alert.url))
        providers = [
            provider_notified.provider
            for provider_notified in alert.providers_notified
        ]
        subject = "Alert has been closed."

        for provider in providers:
            queue_send_message.apply_async(
                args=[provider.email, provider.phone_number, subject, body])
Пример #8
0
def send_out_alert(alert_form):
    """
    Send out an alert to providers.
    """
    alert = Alert(
        description=alert_form.description.data,
        gender=alert_form.gender.data,
        age=alert_form.age.data,
        user=current_user,
    )
    alert.save()
    need_ids = alert_form.needs.data
    for service in Service.get_by_ids(need_ids):
        need = Need(alert=alert, service=service)
        need.save()
    providers = User.providers_with_services(need_ids)
    for provider in providers:
        needs_provided = [
            need_ for need_ in provider.services if need_.id in need_ids
        ]
        gender = alert.get_gender()
        needs = ", ".join(
            [need_provided.name for need_provided in needs_provided])
        body = ('New 15th night alert!\n'
                '%d y/o%s\n'
                'Needs: %s\n'
                'Desc: %s\n'
                'Respond at %sr/%s') % (
                    alert.age, gender, needs, alert_form.description.data,
                    url_for('index', _external=True), str(alert.id))
        provider_notified = ProviderNotified(
            provider=provider,
            alert=alert,
            needs=Need.get_by_ids([need_id.id for need_id in needs_provided]))
        # TODO: test
        provider_notified.save()
        queue_send_message.apply_async(
            kwargs=dict(email=provider.email,
                        number=provider.phone_number,
                        subject='15th Night Alert',
                        body=body))
Пример #9
0
def _send_alert_resolution_notice(need):
    """
    Check if need.alert is closed and trigger an alert closed notification.
    """
    if need.alert.is_closed:
        alert = need.alert
        age = alert.age
        gender = alert.get_gender()
        created = alert.created_at.strftime("%m/%d at %I:%M %p")
        body = (
            "Alert sent on %s for a %syo%s has been closed."
            "\nSee: %s"
            % (created, age, gender, alert.url))
        providers = [
            provider_notified.provider for provider_notified
            in alert.providers_notified
        ]
        subject = "Alert has been closed."

        for provider in providers:
            queue_send_message.apply_async(args=[
                provider.email, provider.phone_number, subject, body])
Пример #10
0
def resolve_need(need):
    """
    Resolve a need and trigger an alert closed if necessary.
    """
    alert = need.alert
    advocate = alert.user
    message = ''
    if need.resolve_message != '':
        message = '\nMsg: ' + need.resolve_message
    gender = alert.get_gender()
    args = (advocate.name, advocate.organization,
            need.service.name, alert.age, gender)
    accepted = ('15th Night help accepted!\n'
                '%s with %s selected you to provide %s for a '
                '%d y/o%s%s') % (args + (message,))
    denied = ('15th Night help not needed\n'
              '%s with %s does not need your help to provide %s for a '
              '%d y/o%s') % args

    selected = set()
    users = set(map(
        lambda provision: provision.response.user, need.provisions))
    for provision in need.provisions:
        if provision.selected:
            selected.add(provision.response.user_id)

    for provider in users:
        body = accepted if provider.id in selected else denied
        queue_send_message.apply_async(
            kwargs=dict(
                email=advocate.email,
                number=advocate.phone_number,
                subject='15th Night Need Resolution',
                body=body
            )
        )
    # Check if alert is closed, if so, send out resolution notices
    _send_alert_resolution_notice(need)
Пример #11
0
def send_out_alert(alert_form):
    """
    Send out an alert to providers.
    """
    alert = Alert(
        description=alert_form.description.data,
        gender=alert_form.gender.data,
        age=alert_form.age.data,
        user=current_user,
    )
    alert.save()
    need_ids = alert_form.needs.data
    for service in Service.get_by_ids(need_ids):
        need = Need(alert=alert, service=service)
        need.save()
    providers = User.providers_with_services(need_ids)
    for provider in providers:
        needs_provided = [need for need in provider.services if need.id in need_ids]
        gender = " " + alert.gender if alert.gender != "unspecified" else ""
        needs = ", ".join([need.name for need in needs_provided])
        body = ("New 15th night alert!\n" "%d y/o%s\n" "Needs: %s\n" "Desc: %s\n" "Respond at %s/r/%s") % (
            alert.age,
            gender,
            needs,
            alert_form.description.data,
            HOST_NAME,
            str(alert.id),
        )
        provider_notified = ProviderNotified(
            provider=provider, alert=alert, needs=Need.get_by_ids([need.id for need in needs_provided])
        )
        # TODO: test
        provider_notified.save()
        queue_send_message.apply_async(
            kwargs=dict(email=provider.email, number=provider.phone_number, subject="15th Night Alert", body=body)
        )