Beispiel #1
0
def send_notification_to_service_users(service_id,
                                       template_id,
                                       personalisation=None,
                                       include_user_fields=None):
    personalisation = personalisation or {}
    include_user_fields = include_user_fields or []
    template = dao_get_template_by_id(template_id)
    service = dao_fetch_service_by_id(service_id)
    active_users = dao_fetch_active_users_for_service(service.id)
    notify_service = dao_fetch_service_by_id(
        current_app.config['NOTIFY_SERVICE_ID'])

    for user in active_users:
        personalisation = _add_user_fields(user, personalisation,
                                           include_user_fields)
        notification = persist_notification(
            template_id=template.id,
            template_version=template.version,
            recipient=user.email_address
            if template.template_type == EMAIL_TYPE else user.mobile_number,
            service=notify_service,
            personalisation=personalisation,
            notification_type=template.template_type,
            api_key_id=None,
            key_type=KEY_TYPE_NORMAL,
            reply_to_text=notify_service.get_default_reply_to_email_address())
        send_notification_to_queue(notification,
                                   False,
                                   queue=QueueNames.NOTIFY)
Beispiel #2
0
def test_dao_fetch_active_users_for_service_returns_active_only(notify_db_session):
    active_user = create_user(email='*****@*****.**', state='active')
    pending_user = create_user(email='*****@*****.**', state='pending')
    service = create_service(user=active_user)
    dao_add_user_to_service(service, pending_user)
    users = dao_fetch_active_users_for_service(service.id)

    assert len(users) == 1
Beispiel #3
0
def get_service_domains(service_id):
    domains = set()
    for user in dao_fetch_active_users_for_service(service_id):
        parts = user.email_address.split('@')
        if len(parts) != 2:
            continue
        domains.add(parts[1].lower())
    return sorted(list(domains))
Beispiel #4
0
def get_detailed_services(start_date,
                          end_date,
                          only_active=False,
                          include_from_test_key=True):
    if start_date == datetime.utcnow().date():
        stats = dao_fetch_todays_stats_for_all_services(
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    else:

        stats = fetch_stats_by_date_range_for_all_services(
            start_date=start_date,
            end_date=end_date,
            include_from_test_key=include_from_test_key,
            only_active=only_active)
    results = []
    for service_id, rows in itertools.groupby(stats, lambda x: x.service_id):
        rows = list(rows)
        if rows[0].count is None:
            s = statistics.create_zeroed_stats_dicts()
        else:
            s = statistics.format_statistics(rows)
        sid = str(rows[0].service_id)

        s[EMAIL_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, EMAIL_TYPE))
        s[SMS_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, SMS_TYPE))
        s[LETTER_TYPE]['templates'] = len(
            dao_get_all_templates_for_service(sid, LETTER_TYPE))

        domains = set()
        for user in dao_fetch_active_users_for_service(sid):
            parts = user.email_address.split('@')
            if len(parts) != 2:
                continue
            domains.add(parts[1].lower())

        results.append({
            'id': sid,
            'name': rows[0].name,
            'notification_type': rows[0].notification_type,
            'research_mode': rows[0].research_mode,
            'restricted': rows[0].restricted,
            'active': rows[0].active,
            'created_at': rows[0].created_at,
            'statistics': s,
            'domains': sorted(list(domains)),
            'organisation_type': rows[0].organisation_type
        })
    return results