def usage_for_all_services(): form = RequiredDateFilterForm() if form.validate_on_submit(): start_date = form.start_date.data end_date = form.end_date.data headers = [ "organisation_id", "organisation_name", "service_id", "service_name", "sms_cost", "sms_fragments", "letter_cost", "letter_breakdown" ] result = billing_api_client.get_usage_for_all_services( start_date, end_date) rows = [[ r['organisation_id'], r["organisation_name"], r["service_id"], r["service_name"], r["sms_cost"], r['sms_fragments'], r["letter_cost"], r["letter_breakdown"].strip() ] for r in result] if rows: return Spreadsheet.from_rows([headers] + rows).as_csv_data, 200, { 'Content-Type': 'text/csv; charset=utf-8', 'Content-Disposition': 'attachment; filename="Usage for all services from {} to {}.csv"' .format(start_date, end_date) } else: flash('No results for dates') return render_template('views/platform-admin/usage_for_all_services.html', form=form)
def notifications_sent_by_service(): form = RequiredDateFilterForm() if form.validate_on_submit(): start_date = form.start_date.data end_date = form.end_date.data headers = [ 'date_created', 'service_id', 'service_name', 'notification_type', 'count_sending', 'count_delivered', 'count_technical_failure', 'count_temporary_failure', 'count_permanent_failure', 'count_sent' ] result = notification_api_client.get_notification_status_by_service( start_date, end_date) for row in result: row[0] = datetime.strptime( row[0], '%a, %d %b %Y %X %Z').strftime('%Y-%m-%d') return Spreadsheet.from_rows([headers] + result).as_csv_data, 200, { 'Content-Type': 'text/csv; charset=utf-8', 'Content-Disposition': 'attachment; filename="{} to {} notification status per service report.csv"' .format(start_date, end_date) } return render_template( 'views/platform-admin/notifications_by_service.html', form=form)
def send_method_stats_by_service(): form = RequiredDateFilterForm() if form.validate_on_submit(): start_date = form.start_date.data end_date = form.end_date.data headers = [ "service_id", "service_name", "org_name", "notification_type", "send_method", "count", ] result = platform_stats_api_client.get_send_method_stats_by_service(start_date, end_date) return ( Spreadsheet.from_rows([headers] + result).as_csv_data, 200, { "Content-Type": "text/csv; charset=utf-8", "Content-Disposition": 'attachment; filename="{} to {} send method per service report.csv"'.format( start_date, end_date ), }, ) return render_template("views/platform-admin/send_method_stats_by_service.html", form=form)
def get_billing_report(): form = RequiredDateFilterForm() if form.validate_on_submit(): start_date = form.start_date.data end_date = form.end_date.data headers = [ "organisation_id", "organisation_name", "service_id", "service_name", "sms_cost", "sms_fragments", "letter_cost", "letter_breakdown", "purchase_order_number", "contact_names", "contact_email_addresses", "billing_reference" ] try: result = billing_api_client.get_data_for_billing_report( start_date, end_date) except HTTPError as e: message = 'Date must be in a single financial year.' if e.status_code == 400 and e.message == message: flash(message) return render_template( 'views/platform-admin/get-billing-report.html', form=form) else: raise e rows = [[ r["organisation_id"], r["organisation_name"], r["service_id"], r["service_name"], r["sms_cost"], r["sms_fragments"], r["letter_cost"], r["letter_breakdown"].strip(), r.get("purchase_order_number"), r.get("contact_names"), r.get("contact_email_addresses"), r.get("billing_reference") ] for r in result] if rows: return Spreadsheet.from_rows([headers] + rows).as_csv_data, 200, { 'Content-Type': 'text/csv; charset=utf-8', 'Content-Disposition': 'attachment; filename="Billing Report from {} to {}.csv"'. format(start_date, end_date) } else: flash('No results for dates') return render_template('views/platform-admin/get-billing-report.html', form=form)
def notifications_sent_by_service(): form = RequiredDateFilterForm() if form.validate_on_submit(): start_date = form.start_date.data end_date = form.end_date.data headers = [ "date_created", "service_id", "service_name", "notification_type", "count_sending", "count_delivered", "count_technical_failure", "count_temporary_failure", "count_permanent_failure", "count_sent", ] result = notification_api_client.get_notification_status_by_service(start_date, end_date) for row in result: row[0] = datetime.strptime(row[0], "%a, %d %b %Y %X %Z").strftime("%Y-%m-%d") return ( Spreadsheet.from_rows([headers] + result).as_csv_data, 200, { "Content-Type": "text/csv; charset=utf-8", "Content-Disposition": 'attachment; filename="{} to {} notification status per service report.csv"'.format( start_date, end_date ), }, ) return render_template("views/platform-admin/notifications_by_service.html", form=form)