diff --git a/app/projects/urls.py b/app/projects/urls.py index 642f48b6f..0d99e6bdd 100644 --- a/app/projects/urls.py +++ b/app/projects/urls.py @@ -280,4 +280,5 @@ # User Feedback path("user_feedback", user_feedback, name="user_feedback"), path("sponsor/feature", sponsor_feature, name="sponsor_feature"), + path("timeseries_dashboard", timeseries_dashboard, name="timeseries_dashboard"), ] diff --git a/app/projects/views.py b/app/projects/views.py index f2d036c09..7c58f498c 100644 --- a/app/projects/views.py +++ b/app/projects/views.py @@ -84,6 +84,29 @@ logger = logging.getLogger(__name__) +# views.py +@login_required +def timeseries_dashboard(request): + timeseries_qs = Timeseries.objects.filter(user=request.user).order_by("name", "id") + + selected_id = request.GET.get("selected") + selected_timeseries = None + + if selected_id: + try: + selected_timeseries = timeseries_qs.get(pk=selected_id) + except Timeseries.DoesNotExist: + selected_timeseries = None + else: + selected_timeseries = timeseries_qs.first() + + context = { + "timeseries_list": timeseries_qs, + "selected_timeseries": selected_timeseries, + } + return render(request, "asset/timeseries_dashboard.html", context) + + @require_http_methods(["GET"]) def not_implemented(request): """Function returns a message""" diff --git a/app/templates/asset/timeseries_dashboard.html b/app/templates/asset/timeseries_dashboard.html new file mode 100644 index 000000000..75750a829 --- /dev/null +++ b/app/templates/asset/timeseries_dashboard.html @@ -0,0 +1,296 @@ +{% extends 'base.html' %} + +{% block head_block %} + + + Time Series Dashboard + + +{% endblock head_block %} + +{% block content %} + +
+
+
+

Time Series

+
Manage uploaded series and inspect metadata.
+
+ + +
+ +
+
+
Total
+
{{ timeseries_list|length }}
+
+
+
Open source
+
+ {% with open_count=0 %} + {# placeholder card; replace later with real count from view #} + - + {% endwith %} +
+
+
+
Selected
+
+ {% if selected_timeseries %}{{ selected_timeseries.name|default:"Unnamed" }}{% else %}-{% endif %} +
+
+
+ + {% if timeseries_list %} +
+
+

My time series

+ + + + + + + + + + + {% for ts in timeseries_list %} + + + + + + + {% endfor %} + +
NameAsset typeTime stepPoints
+ + {{ ts.name|default:"Unnamed" }} + + {{ ts.get_asset_type_display|default:"-" }}{{ ts.time_step|default:"-" }}{{ ts.values|length }}
+
+ +
+ {% if selected_timeseries %} +

Details

+
+ Selected time series +
+ +
+
Name
+
{{ selected_timeseries.name|default:"Unnamed" }}
+ +
Category
+
{{ selected_timeseries.get_category_display|default:"-" }}
+ +
Asset type
+
{{ selected_timeseries.get_asset_type_display|default:"-" }}
+ +
Type
+
{{ selected_timeseries.get_ts_type_display|default:"-" }}
+ +
Units
+
{{ selected_timeseries.units|default:"-" }}
+ +
Scenario
+
+ {% if selected_timeseries.scenario %} + {{ selected_timeseries.scenario }} + {% else %} + - + {% endif %} +
+ +
Open source
+
{{ selected_timeseries.open_source|yesno:"Yes,No" }}
+ +
Start date
+
{{ selected_timeseries.start_date|date:"Y-m-d H:i"|default:"-" }}
+ +
End date
+
{{ selected_timeseries.end_date|date:"Y-m-d H:i"|default:"-" }}
+ +
Time step
+
{{ selected_timeseries.time_step|default:"-" }}
+ +
Length
+
{{ selected_timeseries.values|length }} points
+
+ +
+ Preview chart placeholder
+ + Later this could show a sparkline or mini line chart for the selected series. + +
+ +
+ First values preview placeholder
+ + Example: show first 10 values, min/max, mean, missing values. + +
+ + + {% else %} +

Details

+
No time series selected.
+ {% endif %} +
+
+ {% else %} +
+

No time series yet

+

Upload your first time series or create one manually.

+ +
+ {% endif %} +
+ +{% endblock content %}