diff --git a/containers/backupchecks/src/backend/app/__init__.py b/containers/backupchecks/src/backend/app/__init__.py index 43857f0..0bca4b2 100644 --- a/containers/backupchecks/src/backend/app/__init__.py +++ b/containers/backupchecks/src/backend/app/__init__.py @@ -63,6 +63,57 @@ def create_app(): app.register_blueprint(auth_bp) app.register_blueprint(main_bp) + @app.template_filter("local_datetime") + def format_local_datetime(utc_dt, format="%Y-%m-%d %H:%M:%S"): + """Convert UTC datetime to UI timezone and format as string. + + Args: + utc_dt: datetime object in UTC (or None) + format: strftime format string (default: '%Y-%m-%d %H:%M:%S') + + Returns: + Formatted datetime string in UI timezone, or empty string if input is None + """ + if utc_dt is None: + return "" + + from datetime import datetime + + try: + from zoneinfo import ZoneInfo + except ImportError: + ZoneInfo = None # type: ignore + + # Get UI timezone from settings + tz_name = "Europe/Amsterdam" + try: + from .models import SystemSettings + + settings = SystemSettings.query.first() + if settings and getattr(settings, "ui_timezone", None): + tz_name = settings.ui_timezone + except Exception: + pass + + # Convert UTC to UI timezone + if ZoneInfo: + try: + utc_tz = ZoneInfo("UTC") + local_tz = ZoneInfo(tz_name) + + # Ensure utc_dt is timezone-aware (assume UTC if naive) + if utc_dt.tzinfo is None: + utc_dt = utc_dt.replace(tzinfo=utc_tz) + + # Convert to local timezone + local_dt = utc_dt.astimezone(local_tz) + return local_dt.strftime(format) + except Exception: + pass + + # Fallback: return UTC time if conversion fails + return utc_dt.strftime(format) + @app.before_request def _redirect_to_dashboard_on_first_open_each_day(): """Redirect the first authenticated page view of the day to the dashboard. diff --git a/containers/backupchecks/src/templates/main/admin_all_mail.html b/containers/backupchecks/src/templates/main/admin_all_mail.html index c871b97..c822c40 100644 --- a/containers/backupchecks/src/templates/main/admin_all_mail.html +++ b/containers/backupchecks/src/templates/main/admin_all_mail.html @@ -126,7 +126,7 @@ {% if rows %} {% for row in rows %} - {{ row.received_at }} + {{ row.received_at|local_datetime }} {{ row.from_address }} {{ row.subject }} {{ row.backup_software }} @@ -139,7 +139,7 @@ Unlinked {% endif %} - {{ row.parsed_at }} + {{ row.parsed_at|local_datetime }} {% if row.has_eml %} EML diff --git a/containers/backupchecks/src/templates/main/archived_jobs.html b/containers/backupchecks/src/templates/main/archived_jobs.html index 479fdb7..c269d90 100644 --- a/containers/backupchecks/src/templates/main/archived_jobs.html +++ b/containers/backupchecks/src/templates/main/archived_jobs.html @@ -24,7 +24,7 @@ {{ j.job_name }} - {{ j.archived_at }} + {{ j.archived_at|local_datetime }}
diff --git a/containers/backupchecks/src/templates/main/customers.html b/containers/backupchecks/src/templates/main/customers.html index ae5644e..e2509ce 100644 --- a/containers/backupchecks/src/templates/main/customers.html +++ b/containers/backupchecks/src/templates/main/customers.html @@ -88,7 +88,7 @@ {% endif %} {% if c.autotask_last_sync_at %} -
Checked: {{ c.autotask_last_sync_at }}
+
Checked: {{ c.autotask_last_sync_at|local_datetime }}
{% endif %} {% if can_manage %} @@ -104,7 +104,7 @@ data-autotask-company-id="{{ c.autotask_company_id or '' }}" data-autotask-company-name="{{ c.autotask_company_name or '' }}" data-autotask-mapping-status="{{ c.autotask_mapping_status or '' }}" - data-autotask-last-sync-at="{{ c.autotask_last_sync_at or '' }}" + data-autotask-last-sync-at="{{ c.autotask_last_sync_at|local_datetime if c.autotask_last_sync_at else '' }}" > Edit diff --git a/containers/backupchecks/src/templates/main/feedback.html b/containers/backupchecks/src/templates/main/feedback.html index cd59203..c2757af 100644 --- a/containers/backupchecks/src/templates/main/feedback.html +++ b/containers/backupchecks/src/templates/main/feedback.html @@ -87,8 +87,8 @@ {% endif %} -
{{ i.created_at }}
-
Updated {{ i.updated_at }}
+
{{ i.created_at|local_datetime }}
+
Updated {{ i.updated_at|local_datetime }}
{% endfor %} diff --git a/containers/backupchecks/src/templates/main/feedback_detail.html b/containers/backupchecks/src/templates/main/feedback_detail.html index d6cebf7..4e80c45 100644 --- a/containers/backupchecks/src/templates/main/feedback_detail.html +++ b/containers/backupchecks/src/templates/main/feedback_detail.html @@ -32,12 +32,12 @@