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)
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
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))
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