Refactored reports to use pregenerated docs instead (#2831)

* Refactored reports to use pregenerated docs instead

* Fixed e2e test

* Fixed anothr bug

* Cleanup

* Fixed timezone conversion

* Updated ref files

* Updated reference files, refreshed ui/ux for report generation. Buttons toggle on and off based on if report exists

* Fixed linting errors, removed pytz

* Fixed test failure

* e2e test fix

* Speeding up unit tests

* Removed python time library that was causing performance issues with unit tests

* Updated poetry lock

* Unit test improvements

* Made change that ken reccomended
This commit is contained in:
Alex Janousek
2025-08-15 15:02:54 -04:00
committed by GitHub
parent 748c35d2df
commit 8d33f28b76
50 changed files with 632 additions and 204 deletions

View File

@@ -3,7 +3,6 @@ from datetime import datetime, timedelta
from itertools import chain
from numbers import Number
import pytz
from flask import render_template, request
from flask_login import current_user
from flask_wtf import FlaskForm as Form
@@ -62,7 +61,7 @@ from app.main.validators import (
)
from app.models.organization import Organization
from app.utils import merge_jsonlike
from app.utils.csv import get_user_preferred_timezone
from app.utils.csv import get_user_preferred_timezone, get_user_preferred_timezone_obj
from app.utils.user_permissions import all_ui_permissions, permission_options
from notifications_utils.formatters import strip_all_whitespace
from notifications_utils.insensitive_dict import InsensitiveDict
@@ -70,7 +69,7 @@ from notifications_utils.recipients import InvalidPhoneError, validate_phone_num
def get_time_value_and_label(future_time):
preferred_tz = pytz.timezone(get_user_preferred_timezone())
preferred_tz = get_user_preferred_timezone_obj()
return (
future_time.astimezone(preferred_tz).isoformat(),
"{} at {} {}".format(
@@ -90,7 +89,7 @@ def get_human_time(time):
def get_human_day(time, prefix_today_with="T"):
# Add 1 hour to get midnight today instead of midnight tomorrow
preferred_tz = pytz.timezone(get_user_preferred_timezone())
preferred_tz = get_user_preferred_timezone_obj()
time = (time - timedelta(hours=1)).strftime("%A")
if time == datetime.now(preferred_tz).strftime("%A"):
return "{}oday".format(prefix_today_with)
@@ -101,12 +100,12 @@ def get_human_day(time, prefix_today_with="T"):
def get_furthest_possible_scheduled_time():
# We want local time to find date boundaries
preferred_tz = pytz.timezone(get_user_preferred_timezone())
preferred_tz = get_user_preferred_timezone_obj()
return (datetime.now(preferred_tz) + timedelta(days=4)).replace(hour=0)
def get_next_hours_until(until):
preferred_tz = pytz.timezone(get_user_preferred_timezone())
preferred_tz = get_user_preferred_timezone_obj()
now = datetime.now(preferred_tz)
hours = int((until - now).total_seconds() / (60 * 60))
return [
@@ -116,7 +115,7 @@ def get_next_hours_until(until):
def get_next_days_until(until):
preferred_tz = pytz.timezone(get_user_preferred_timezone())
preferred_tz = get_user_preferred_timezone_obj()
now = datetime.now(preferred_tz)
days = int((until - now).total_seconds() / (60 * 60 * 24))
return [