136 lines
4.1 KiB
Python
136 lines
4.1 KiB
Python
# import matplotlib
|
|
# matplotlib.use("Agg")
|
|
|
|
# from flask import Blueprint, render_template, session, redirect, url_for
|
|
# import matplotlib.pyplot as plt
|
|
# import io
|
|
# import base64
|
|
# from app.utils.plot_utils import plot_to_base64
|
|
# from app.services.dashboard_service import DashboardService
|
|
|
|
# dashboard_bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
|
|
|
# # dashboard_bp = Blueprint("dashboard", __name__)
|
|
|
|
# # charts
|
|
# # def plot_to_base64():
|
|
# # img = io.BytesIO()
|
|
# # plt.savefig(img, format="png", bbox_inches="tight")
|
|
# # plt.close()
|
|
# # img.seek(0)
|
|
# # return base64.b64encode(img.getvalue()).decode()
|
|
|
|
# # bar chart
|
|
# def bar_chart():
|
|
# categories = ["Trench", "Manhole", "Pipe Laying", "Restoration"]
|
|
# values = [120, 80, 150, 60]
|
|
|
|
# plt.figure()
|
|
# plt.bar(categories, values)
|
|
# plt.title("Work Category Report")
|
|
# plt.xlabel("test Category")
|
|
# plt.ylabel("test Quantity")
|
|
|
|
|
|
# return plot_to_base64(plt)
|
|
|
|
# # Pie chart
|
|
# def pie_chart():
|
|
# labels = ["Completed", "In Progress", "Pending"]
|
|
# sizes = [55, 20, 25]
|
|
|
|
# plt.figure()
|
|
# plt.pie(sizes, labels=labels, autopct="%1.1f%%", startangle=140)
|
|
# plt.title("Project Status")
|
|
|
|
# return plot_to_base64(plt)
|
|
|
|
# # Histogram chart
|
|
# def histogram_chart():
|
|
# daily_work = [5, 10, 15, 20, 20, 25, 30, 35, 40, 45, 50]
|
|
|
|
# plt.figure()
|
|
# plt.hist(daily_work, bins=5)
|
|
# plt.title("Daily Work Distribution")
|
|
# plt.xlabel("Work Units")
|
|
# plt.ylabel("Frequency")
|
|
|
|
# return plot_to_base64(plt)
|
|
|
|
# # Dashboaed page
|
|
# @dashboard_bp.route("/")
|
|
# def dashboard():
|
|
# if not session.get("user_id"):
|
|
# return redirect(url_for("auth.login"))
|
|
|
|
# return render_template(
|
|
# "dashboard.html",
|
|
# title="Dashboard",
|
|
# bar_chart=bar_chart(),
|
|
# pie_chart=pie_chart(),
|
|
# histogram=histogram_chart()
|
|
# )
|
|
|
|
# # subcontractor dashboard
|
|
# @dashboard_bp.route("/subcontractor_dashboard", methods=["GET", "POST"])
|
|
# def subcontractor_dashboard():
|
|
# if not session.get("user_id"):
|
|
# return redirect(url_for("auth.login"))
|
|
|
|
# tr_dash = DashboardService().bar_chart_of_tr_ex
|
|
|
|
|
|
# return render_template(
|
|
# "subcontractor_dashboard.html",
|
|
# title="Dashboard",
|
|
# bar_chart=tr_dash
|
|
# )
|
|
|
|
from flask import Blueprint, render_template, session, redirect, url_for, jsonify
|
|
from sqlalchemy import func
|
|
from app import db
|
|
from app.models.trench_excavation_model import TrenchExcavation
|
|
from app.models.manhole_excavation_model import ManholeExcavation
|
|
from app.models.laying_model import Laying
|
|
|
|
dashboard_bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
|
|
|
@dashboard_bp.route("/api/live-stats")
|
|
def live_stats():
|
|
try:
|
|
# 1. Overall Volume
|
|
t_count = TrenchExcavation.query.count()
|
|
m_count = ManholeExcavation.query.count()
|
|
l_count = Laying.query.count()
|
|
|
|
# 2. Location Distribution (Business reach)
|
|
loc_results = db.session.query(
|
|
TrenchExcavation.Location,
|
|
func.count(TrenchExcavation.id)
|
|
).group_by(TrenchExcavation.Location).all()
|
|
|
|
# 3. Work Timeline (Business productivity trend)
|
|
# Assuming your models have a 'created_at' field
|
|
timeline_results = db.session.query(
|
|
func.date(TrenchExcavation.created_at),
|
|
func.count(TrenchExcavation.id)
|
|
).group_by(func.date(TrenchExcavation.created_at)).order_by(func.date(TrenchExcavation.created_at)).all()
|
|
|
|
return jsonify({
|
|
"summary": {
|
|
"trench": t_count,
|
|
"manhole": m_count,
|
|
"laying": l_count,
|
|
"total": t_count + m_count + l_count
|
|
},
|
|
"locations": {row[0]: row[1] for row in loc_results if row[0]},
|
|
"timeline": {str(row[0]): row[1] for row in timeline_results}
|
|
})
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500
|
|
|
|
@dashboard_bp.route("/")
|
|
def dashboard():
|
|
if not session.get("user_id"):
|
|
return redirect(url_for("auth.login"))
|
|
return render_template("dashboard.html", title="Business Intelligence Dashboard") |