All model filter are work and show bar chat and data table.
This commit is contained in:
@@ -22,6 +22,9 @@ from app.models.laying_model import Laying
|
||||
|
||||
# client models import
|
||||
from app.models.tr_ex_client_model import TrenchExcavationClient
|
||||
from app.models.mh_ex_client_model import ManholeExcavationClient
|
||||
from app.models.mh_dc_client_model import ManholeDomesticChamberClient
|
||||
from app.models.laying_client_model import LayingClient
|
||||
|
||||
|
||||
dashboard_bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
||||
@@ -71,7 +74,6 @@ def live_stats():
|
||||
|
||||
|
||||
|
||||
|
||||
# subcontractor dashboard
|
||||
@dashboard_bp.route("/subcontractor_dashboard")
|
||||
@login_required
|
||||
@@ -137,7 +139,8 @@ def get_ra_bills():
|
||||
def total(records, field):
|
||||
return float(sum(getattr(r, field) or 0 for r in records))
|
||||
|
||||
@dashboard_bp.route("/api/trench-analysis")
|
||||
# category= trench_excavation
|
||||
@dashboard_bp.route("/api/tr-analysis")
|
||||
def trench_analysis():
|
||||
|
||||
subcontractor_id = request.args.get("subcontractor", "").strip()
|
||||
@@ -175,7 +178,6 @@ def trench_analysis():
|
||||
if sub_keys:
|
||||
|
||||
client_query = client_query.filter(
|
||||
|
||||
tuple_(
|
||||
func.upper(func.trim(TrenchExcavationClient.MH_NO)),
|
||||
func.upper(func.trim(TrenchExcavationClient.Location))
|
||||
@@ -186,7 +188,144 @@ def trench_analysis():
|
||||
client_records = client_query.all()
|
||||
|
||||
chart_data = [
|
||||
|
||||
{
|
||||
"label": "Marshi 0 to 1.5",
|
||||
"client": total(client_records, "Marshi_Muddy_Slushy_0_to_1_5_total"),
|
||||
"sub": 0
|
||||
},
|
||||
{
|
||||
"label": "Marshi 1.5 to 3.0",
|
||||
"client": total(client_records, "Marshi_Muddy_Slushy_1_5_to_3_0_total"),
|
||||
"sub": 0
|
||||
},
|
||||
{
|
||||
"label": "Marshi 3.0 to 4.5",
|
||||
"client": total(client_records, "Marshi_Muddy_Slushy_3_0_to_4_5_total"),
|
||||
"sub": 0
|
||||
},
|
||||
|
||||
{
|
||||
"label": "Soft Murum 0 to 1.5",
|
||||
"client": total(client_records, "Soft_Murum_0_to_1_5_total"),
|
||||
"sub": total(sub_records, "Soft_Murum_0_to_1_5_total")
|
||||
},
|
||||
{
|
||||
"label": "Soft Murum 1.5 to 3.0",
|
||||
"client": total(client_records, "Soft_Murum_1_5_to_3_0_total"),
|
||||
"sub": total(sub_records, "Soft_Murum_1_5_to_3_0_total")
|
||||
},
|
||||
{
|
||||
"label": "Soft Murum 3.0 to 4.5",
|
||||
"client": total(client_records, "Soft_Murum_3_0_to_4_5_total"),
|
||||
"sub": total(sub_records, "Soft_Murum_3_0_to_4_5_total")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "Hard Murum 0 to 1.5",
|
||||
"client": total(client_records, "Hard_Murum_0_to_1_5_total"),
|
||||
"sub": total(sub_records, "Hard_Murum_0_to_1_5_total")
|
||||
},
|
||||
{
|
||||
"label": "Hard Murum 1.5 to 3.0",
|
||||
"client": total(client_records, "Hard_Murum_1_5_to_3_0_total"),
|
||||
"sub": total(sub_records, "Hard_Murum_1_5_and_above_total")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "Soft Rock 0 to 1.5",
|
||||
"client": total(client_records, "Soft_Rock_0_to_1_5_total"),
|
||||
"sub": total(sub_records, "Soft_Rock_0_to_1_5_total")
|
||||
},
|
||||
{
|
||||
"label": "Soft Rock 1.5 to 3.0",
|
||||
"client": total(client_records, "Soft_Rock_1_5_to_3_0_total"),
|
||||
"sub": total(sub_records, "Soft_Rock_1_5_and_above_total")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "Hard Rock 0 to 1.5",
|
||||
"client": total(client_records, "Hard_Rock_0_to_1_5_total"),
|
||||
"sub": total(sub_records, "Hard_Rock_0_to_1_5_total")
|
||||
},
|
||||
{
|
||||
"label": "Hard Rock 1.5 to 3.0",
|
||||
"client": total(client_records, "Hard_Rock_1_5_to_3_0_total"),
|
||||
"sub": total(sub_records, "Hard_Rock_1_5_to_3_0_total")
|
||||
},
|
||||
{
|
||||
"label": "Hard Rock 3.0 to 4.5",
|
||||
"client": total(client_records, "Hard_Rock_3_0_to_4_5_total"),
|
||||
"sub": total(sub_records, "Hard_Rock_3_0_to_4_5_total")
|
||||
},
|
||||
{
|
||||
"label": "Hard Rock 4.5 to 6.0",
|
||||
"client": total(client_records, "Hard_Rock_4_5_to_6_0_total"),
|
||||
"sub": total(sub_records, "Hard_Rock_4_5_to_6_0_total")
|
||||
},
|
||||
{
|
||||
"label": "Hard Rock 6.0 to 7.5",
|
||||
"client": total(client_records, "Hard_Rock_6_0_to_7_5_total"),
|
||||
"sub": total(sub_records, "Hard_Rock_6_0_to_7_5_total")
|
||||
}
|
||||
]
|
||||
|
||||
return jsonify({
|
||||
"title": "Trench Excavation Comparison",
|
||||
"y_title": "Excavation Qty (Cum)",
|
||||
"labels": [x["label"] for x in chart_data],
|
||||
"client_qty": [x["client"] for x in chart_data],
|
||||
"sub_qty": [x["sub"] for x in chart_data]
|
||||
})
|
||||
|
||||
# category = manhole_excavation
|
||||
@dashboard_bp.route("/api/mh-analysis")
|
||||
def manhole_analysis():
|
||||
|
||||
subcontractor_id = request.args.get("subcontractor", "").strip()
|
||||
ra_bill = request.args.get("ra_bill", "").strip()
|
||||
|
||||
# Convert "1,2,3" -> ["1", "2", "3"]
|
||||
ra_bill_list = []
|
||||
if ra_bill:
|
||||
ra_bill_list = [x.strip() for x in ra_bill.split(",") if x.strip()]
|
||||
|
||||
# Subcontractor Query
|
||||
sub_query = ManholeExcavation.query
|
||||
if subcontractor_id:
|
||||
sub_query = sub_query.filter(
|
||||
ManholeExcavation.subcontractor_id == int(subcontractor_id)
|
||||
)
|
||||
|
||||
if ra_bill_list:
|
||||
sub_query = sub_query.filter(
|
||||
ManholeExcavation.RA_Bill_No.in_(ra_bill_list)
|
||||
)
|
||||
|
||||
sub_records = sub_query.all()
|
||||
|
||||
sub_keys = [
|
||||
(
|
||||
(r.MH_NO or "").strip().upper(),
|
||||
(r.Location or "").strip().upper()
|
||||
)
|
||||
for r in sub_records
|
||||
]
|
||||
|
||||
client_query = ManholeExcavationClient.query
|
||||
|
||||
if sub_keys:
|
||||
|
||||
client_query = client_query.filter(
|
||||
tuple_(
|
||||
func.upper(func.trim(ManholeExcavationClient.MH_NO)),
|
||||
func.upper(func.trim(ManholeExcavationClient.Location))
|
||||
).in_(sub_keys)
|
||||
|
||||
)
|
||||
|
||||
client_records = client_query.all()
|
||||
|
||||
chart_data = [
|
||||
{
|
||||
"label": "Marshi 0 to 1.5",
|
||||
"client": total(client_records, "Marshi_Muddy_Slushy_0_to_1_5_total"),
|
||||
@@ -269,8 +408,207 @@ def trench_analysis():
|
||||
]
|
||||
|
||||
return jsonify({
|
||||
"title": "Manhole Excavation Comparison",
|
||||
"y_title": "Manhole Qty (Nos)",
|
||||
"labels": [x["label"] for x in chart_data],
|
||||
"client_qty": [x["client"] for x in chart_data],
|
||||
"sub_qty": [x["sub"] for x in chart_data]
|
||||
})
|
||||
|
||||
|
||||
|
||||
# category = Manhole_Domestic_Chamber
|
||||
@dashboard_bp.route("/api/mdc-analysis")
|
||||
def Manhole_Domestic_Chamber_analysis():
|
||||
|
||||
subcontractor_id = request.args.get("subcontractor", "").strip()
|
||||
ra_bill = request.args.get("ra_bill", "").strip()
|
||||
|
||||
# Convert "1,2,3" -> ["1", "2", "3"]
|
||||
ra_bill_list = []
|
||||
if ra_bill:
|
||||
ra_bill_list = [x.strip() for x in ra_bill.split(",") if x.strip()]
|
||||
|
||||
# Subcontractor Query
|
||||
sub_query = ManholeDomesticChamber.query
|
||||
if subcontractor_id:
|
||||
sub_query = sub_query.filter(
|
||||
ManholeDomesticChamber.subcontractor_id == int(subcontractor_id)
|
||||
)
|
||||
|
||||
if ra_bill_list:
|
||||
sub_query = sub_query.filter(
|
||||
ManholeDomesticChamber.RA_Bill_No.in_(ra_bill_list)
|
||||
)
|
||||
|
||||
sub_records = sub_query.all()
|
||||
|
||||
sub_keys = [
|
||||
(
|
||||
(r.MH_NO or "").strip().upper(),
|
||||
(r.Location or "").strip().upper()
|
||||
)
|
||||
for r in sub_records
|
||||
]
|
||||
|
||||
client_query = ManholeDomesticChamberClient.query
|
||||
|
||||
if sub_keys:
|
||||
|
||||
client_query = client_query.filter(
|
||||
tuple_(
|
||||
func.upper(func.trim(ManholeDomesticChamberClient.MH_NO)),
|
||||
func.upper(func.trim(ManholeDomesticChamberClient.Location))
|
||||
).in_(sub_keys)
|
||||
|
||||
)
|
||||
|
||||
client_records = client_query.all()
|
||||
|
||||
chart_data = [
|
||||
{
|
||||
"label": "Depth of MH",
|
||||
"client": total(client_records, "Depth_of_MH"),
|
||||
"sub": total(sub_records, "Depth_of_MH")
|
||||
},
|
||||
{
|
||||
"label": "Domestic_Chambers Total",
|
||||
"client": total(client_records, "Total"),
|
||||
"sub": total(sub_records, "Total")
|
||||
}
|
||||
]
|
||||
|
||||
return jsonify({
|
||||
"title": "Domestic Chamber Comparison",
|
||||
"y_title": "Quantity (Nos)",
|
||||
"labels": [x["label"] for x in chart_data],
|
||||
"client_qty": [x["client"] for x in chart_data],
|
||||
"sub_qty": [x["sub"] for x in chart_data]
|
||||
})
|
||||
|
||||
|
||||
|
||||
# category = Laying
|
||||
@dashboard_bp.route("/api/laying-analysis")
|
||||
def laying_analysis():
|
||||
|
||||
subcontractor_id = request.args.get("subcontractor", "").strip()
|
||||
ra_bill = request.args.get("ra_bill", "").strip()
|
||||
|
||||
# Convert "1,2,3" -> ["1", "2", "3"]
|
||||
ra_bill_list = []
|
||||
if ra_bill:
|
||||
ra_bill_list = [x.strip() for x in ra_bill.split(",") if x.strip()]
|
||||
|
||||
# Subcontractor Query
|
||||
sub_query = Laying.query
|
||||
if subcontractor_id:
|
||||
sub_query = sub_query.filter(
|
||||
Laying.subcontractor_id == int(subcontractor_id)
|
||||
)
|
||||
|
||||
if ra_bill_list:
|
||||
sub_query = sub_query.filter(
|
||||
Laying.RA_Bill_No.in_(ra_bill_list)
|
||||
)
|
||||
|
||||
sub_records = sub_query.all()
|
||||
|
||||
sub_keys = [
|
||||
(
|
||||
(r.MH_NO or "").strip().upper(),
|
||||
(r.Location or "").strip().upper()
|
||||
)
|
||||
for r in sub_records
|
||||
]
|
||||
|
||||
client_query = LayingClient.query
|
||||
|
||||
if sub_keys:
|
||||
|
||||
client_query = client_query.filter(
|
||||
tuple_(
|
||||
func.upper(func.trim(LayingClient.MH_NO)),
|
||||
func.upper(func.trim(LayingClient.Location))
|
||||
).in_(sub_keys)
|
||||
|
||||
)
|
||||
|
||||
client_records = client_query.all()
|
||||
|
||||
chart_data = [
|
||||
{
|
||||
"label": "150 mm",
|
||||
"client": total(client_records, "pipe_150_mm"),
|
||||
"sub": total(sub_records, "pipe_150_mm")
|
||||
},
|
||||
{
|
||||
"label": "200 mm",
|
||||
"client": total(client_records, "pipe_200_mm"),
|
||||
"sub": total(sub_records, "pipe_200_mm")
|
||||
},
|
||||
{
|
||||
"label": "250 mm",
|
||||
"client": total(client_records, "pipe_250_mm"),
|
||||
"sub": total(sub_records, "pipe_250_mm")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "300 mm",
|
||||
"client": total(client_records, "pipe_300_mm"),
|
||||
"sub": total(sub_records, "pipe_300_mm")
|
||||
},
|
||||
{
|
||||
"label": "350 mm",
|
||||
"client": total(client_records, "pipe_350_mm"),
|
||||
"sub": total(sub_records, "pipe_350_mm")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "400 mm",
|
||||
"client": total(client_records, "pipe_400_mm"),
|
||||
"sub": total(sub_records, "pipe_400_mm")
|
||||
},
|
||||
{
|
||||
"label": "450 mm",
|
||||
"client": total(client_records, "pipe_450_mm"),
|
||||
"sub": total(sub_records, "pipe_450_mm")
|
||||
},
|
||||
|
||||
{
|
||||
"label": "500 mm",
|
||||
"client": total(client_records, "pipe_500_mm"),
|
||||
"sub": total(sub_records, "pipe_500_mm")
|
||||
},
|
||||
{
|
||||
"label": "600 mm",
|
||||
"client": total(client_records, "pipe_600_mm"),
|
||||
"sub": total(sub_records, "pipe_600_mm")
|
||||
},
|
||||
{
|
||||
"label": "700 mm",
|
||||
"client": total(client_records, "pipe_700_mm"),
|
||||
"sub": total(sub_records, "pipe_700_mm")
|
||||
},
|
||||
{
|
||||
"label": "900 mm",
|
||||
"client": total(client_records, "pipe_900_mm"),
|
||||
"sub": total(sub_records, "pipe_900_mm")
|
||||
},
|
||||
{
|
||||
"label": "1200 mm",
|
||||
"client": total(client_records, "pipe_1200_mm"),
|
||||
"sub": total(sub_records, "pipe_1200_mm")
|
||||
}
|
||||
]
|
||||
|
||||
return jsonify({
|
||||
"title": "Pipe Laying Comparison",
|
||||
"y_title": "Pipe Length (Mtr)",
|
||||
"labels": [x["label"] for x in chart_data],
|
||||
"client_qty": [x["client"] for x in chart_data],
|
||||
"sub_qty": [x["sub"] for x in chart_data]
|
||||
})
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user