From f1413e0a5d3bcc05e610765fc39acd92a949c8a8 Mon Sep 17 00:00:00 2001 From: NguyenND Date: Fri, 12 Jun 2026 12:00:21 -0400 Subject: [PATCH] 06/12 Redesign dashboard 3 --- app/routes/issues.py | 57 ++++++++-- app/templates/dashboard.html | 202 +++++++++++++++++++-------------- app/templates/issues/list.html | 14 ++- 3 files changed, 172 insertions(+), 101 deletions(-) diff --git a/app/routes/issues.py b/app/routes/issues.py index ea98427..4be573b 100644 --- a/app/routes/issues.py +++ b/app/routes/issues.py @@ -1,5 +1,6 @@ import os import logging +from datetime import datetime from app.utils.time_utils import now_eastern from flask import (Blueprint, render_template, redirect, url_for, flash, request, current_app, jsonify, abort, Response) @@ -102,12 +103,14 @@ def export_list_pdf(): db.and_(Issue.area_id.isnot(None), Area.facility_id.in_(customer_facility_ids)), )) - issue_id_filter = request.args.get('issue_id', '').strip() - severity_filter = request.args.get('severity', '') - status_filter = request.args.get('status', '') - sla_filter = request.args.get('sla', '') - facility_filter = request.args.get('facility_id', '') - contract_filter = request.args.get('contract_id', '') + issue_id_filter = request.args.get('issue_id', '').strip() + severity_filter = request.args.get('severity', '') + status_filter = request.args.get('status', '') + sla_filter = request.args.get('sla', '') + facility_filter = request.args.get('facility_id', '') + contract_filter = request.args.get('contract_id', '') + date_from_filter = request.args.get('date_from', '') + date_to_filter = request.args.get('date_to', '') if issue_id_filter.isdigit(): q = q.filter(Issue.id == int(issue_id_filter)) @@ -115,6 +118,17 @@ def export_list_pdf(): q = q.filter(Issue.severity == severity_filter) if status_filter: q = q.filter(Issue.status == status_filter) + if date_from_filter: + try: + q = q.filter(Issue.reported_at >= datetime.strptime(date_from_filter, '%Y-%m-%d')) + except ValueError: + date_from_filter = '' + if date_to_filter: + try: + _dt = datetime.strptime(date_to_filter, '%Y-%m-%d').replace(hour=23, minute=59, second=59) + q = q.filter(Issue.reported_at <= _dt) + except ValueError: + date_to_filter = '' if contract_filter.isdigit(): _contract_fids = [ f.id for f in Facility.query.filter_by(project_id=int(contract_filter)).all() @@ -139,6 +153,10 @@ def export_list_pdf(): filter_parts.append(f'Severity: {severity_filter.title()}') if status_filter: filter_parts.append(f'Status: {status_filter.replace("_", " ").title()}') + if date_from_filter: + filter_parts.append(f'From: {date_from_filter}') + if date_to_filter: + filter_parts.append(f'To: {date_to_filter}') if sla_filter: filter_parts.append(f'SLA: {sla_filter.replace("_", " ").title()}') if contract_filter.isdigit(): @@ -209,12 +227,14 @@ def index(): ) ) - issue_id_filter = request.args.get('issue_id', '').strip() - severity_filter = request.args.get('severity', '') - status_filter = request.args.get('status', '') - sla_filter = request.args.get('sla', '') - facility_filter = request.args.get('facility_id', '') - contract_filter = request.args.get('contract_id', '') + issue_id_filter = request.args.get('issue_id', '').strip() + severity_filter = request.args.get('severity', '') + status_filter = request.args.get('status', '') + sla_filter = request.args.get('sla', '') + facility_filter = request.args.get('facility_id', '') + contract_filter = request.args.get('contract_id', '') + date_from_filter = request.args.get('date_from', '') + date_to_filter = request.args.get('date_to', '') if issue_id_filter.isdigit(): q = q.filter(Issue.id == int(issue_id_filter)) @@ -222,6 +242,17 @@ def index(): q = q.filter(Issue.severity == severity_filter) if status_filter: q = q.filter(Issue.status == status_filter) + if date_from_filter: + try: + q = q.filter(Issue.reported_at >= datetime.strptime(date_from_filter, '%Y-%m-%d')) + except ValueError: + date_from_filter = '' + if date_to_filter: + try: + _dt = datetime.strptime(date_to_filter, '%Y-%m-%d').replace(hour=23, minute=59, second=59) + q = q.filter(Issue.reported_at <= _dt) + except ValueError: + date_to_filter = '' if contract_filter.isdigit(): _contract_fids = [ f.id for f in Facility.query.filter_by(project_id=int(contract_filter)).all() @@ -302,6 +333,8 @@ def index(): sla_filter=sla_filter, facility_filter=facility_filter, contract_filter=contract_filter, + date_from_filter=date_from_filter, + date_to_filter=date_to_filter, facilities=facilities, projects=projects, staff=staff, diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html index ca7db77..a74b44a 100644 --- a/app/templates/dashboard.html +++ b/app/templates/dashboard.html @@ -11,143 +11,171 @@ -{# ── Top stat cards ─────────────────────────────────────────────────────── #} +{# ── Inspections section ─────────────────────────────────────────────────── #} +
+ + Inspections +
+
+
- +
+ +{# ── Issues section ──────────────────────────────────────────────────────── #} +
+ + Issues +
+
+
+
-{# ── Second stat row ────────────────────────────────────────────────────── #} -
- -
-
- + + + {% if current_user.role != 'customer' %}
-
-
- - +
-
- {# ── SLA Summary ─────────────────────────────────────────────────────────── #} diff --git a/app/templates/issues/list.html b/app/templates/issues/list.html index 4f5fc38..8a8de6f 100644 --- a/app/templates/issues/list.html +++ b/app/templates/issues/list.html @@ -63,6 +63,16 @@ {% endfor %}
+
+ + +
+
+ + +
Clear @@ -157,7 +167,7 @@ class="d-inline" title="Unfollow this issue"> - +