def test_fetch_usage_year_for_organisation(notify_db_session):
    fixtures = set_up_usage_data(datetime(2019, 5, 1))
    service_with_emails_for_org = create_service(
        service_name='Service with emails for org')
    dao_add_service_to_organisation(service=service_with_emails_for_org,
                                    organisation_id=fixtures["org_1"].id)
    template = create_template(service=service_with_emails_for_org,
                               template_type='email')
    create_ft_billing(bst_date=datetime(2019, 5, 1),
                      template=template,
                      notifications_sent=1100)
    results = fetch_usage_year_for_organisation(fixtures["org_1"].id, 2019)

    assert len(results) == 2
    first_row = results[str(fixtures["service_1_sms_and_letter"].id)]
    assert first_row['service_id'] == fixtures["service_1_sms_and_letter"].id
    assert first_row['service_name'] == fixtures[
        "service_1_sms_and_letter"].name
    assert first_row['free_sms_limit'] == 10
    assert first_row['sms_remainder'] == 10
    assert first_row['chargeable_billable_sms'] == 0
    assert first_row['sms_cost'] == 0.0
    assert first_row['letter_cost'] == 3.4
    assert first_row['emails_sent'] == 0

    second_row = results[str(service_with_emails_for_org.id)]
    assert second_row['service_id'] == service_with_emails_for_org.id
    assert second_row['service_name'] == service_with_emails_for_org.name
    assert second_row['free_sms_limit'] == 0
    assert second_row['sms_remainder'] == 0
    assert second_row['chargeable_billable_sms'] == 0
    assert second_row['sms_cost'] == 0
    assert second_row['letter_cost'] == 0
    assert second_row['emails_sent'] == 1100
예제 #2
0
def get_organisation_services_usage(organisation_id):
    try:
        year = int(request.args.get('year', 'none'))
    except ValueError:
        return jsonify(result='error', message='No valid year provided'), 400
    services = fetch_usage_year_for_organisation(organisation_id, year)
    list_services = services.values()
    sorted_services = sorted(list_services, key=lambda s: (-s['active'], s['service_name'].lower()))
    return jsonify(services=sorted_services)
def test_fetch_usage_year_for_organisation_only_returns_data_for_live_services(
        notify_db_session):
    org = create_organisation(name='Organisation without live services')
    live_service = create_service(restricted=False)
    sms_template = create_template(service=live_service)
    trial_service = create_service(restricted=True,
                                   service_name='trial_service')
    email_template = create_template(service=trial_service,
                                     template_type='email')
    trial_sms_template = create_template(service=trial_service,
                                         template_type='sms')
    trial_letter_template = create_template(service=trial_service,
                                            template_type='letter')
    dao_add_service_to_organisation(service=live_service,
                                    organisation_id=org.id)
    dao_add_service_to_organisation(service=trial_service,
                                    organisation_id=org.id)
    create_ft_billing(bst_date=datetime.utcnow().date(),
                      template=sms_template,
                      rate=0.0158,
                      billable_unit=19,
                      notifications_sent=19)
    create_ft_billing(bst_date=datetime.utcnow().date(),
                      template=email_template,
                      billable_unit=0,
                      notifications_sent=100)
    create_ft_billing(bst_date=datetime.utcnow().date(),
                      template=trial_sms_template,
                      billable_unit=200,
                      rate=0.0158,
                      notifications_sent=100)
    create_ft_billing(bst_date=datetime.utcnow().date(),
                      template=trial_letter_template,
                      billable_unit=40,
                      rate=0.30,
                      notifications_sent=20)

    results = fetch_usage_year_for_organisation(organisation_id=org.id,
                                                year=2019)

    assert len(results) == 1
    assert results[str(live_service.id)]['sms_billable_units'] == 19
    assert results[str(live_service.id)]['emails_sent'] == 0
def test_fetch_usage_year_for_organisation_populates_ft_billing_for_today(
        notify_db_session):
    create_letter_rate(start_date=datetime.utcnow() - timedelta(days=1))
    create_rate(start_date=datetime.utcnow() - timedelta(days=1),
                value=0.65,
                notification_type='sms')
    new_org = create_organisation(name='New organisation')
    service = create_service()
    template = create_template(service=service)
    dao_add_service_to_organisation(service=service,
                                    organisation_id=new_org.id)
    current_year = datetime.utcnow().year
    create_annual_billing(service_id=service.id,
                          free_sms_fragment_limit=10,
                          financial_year_start=current_year)

    assert FactBilling.query.count() == 0

    create_notification(template=template, status='delivered')

    results = fetch_usage_year_for_organisation(organisation_id=new_org.id,
                                                year=current_year)
    assert len(results) == 1
    assert FactBilling.query.count() == 1