subctr location filter, MH NO. search, subctr manadatory field removed, added select all for delete and also all edit at once feature added

This commit is contained in:
2026-08-07 13:01:38 +05:30
7 changed files with 584 additions and 312 deletions

View File

@@ -4,7 +4,7 @@ from flask import (
request,
redirect,
url_for,
flash
flash, jsonify
)
from app.models.subcontractor_model import Subcontractor
@@ -26,26 +26,8 @@ def engineering_master():
"engineering/index.html",
title="Engineering Masters"
)
@engi_bp.route("/subcontractor-rate")
def add_subcontractor_rates():
subcontractors = Subcontractor.query.filter_by(status="Active").all()
if request.method == "POST":
try:
SubcontractorRateService.save_rate(request.form)
flash(SuccessMessage.SAVE, "success")
return redirect(url_for("engineering.add_subcontractor_rates"))
except Exception as e:
flash(ErrorMessage.INTERNAL_SERVER_ERROR, "danger")
return render_template(
"engineering/add_rate.html",
title="Subcontractor Rate Master",
subcontractors=subcontractors
)
# Client rate model
@engi_bp.route("/client-rate")
def client_rates():
@@ -54,3 +36,72 @@ def client_rates():
title="Client Rate Master"
)
@engi_bp.route("/subcontractor-rate", methods=["GET", "POST"])
def add_subcontractor_rates():
subcontractors = Subcontractor.query.filter_by(status="Active").all()
if request.method == "POST":
result = SubcontractorRateService.save_or_update(request.form)
if result["success"]:
flash(result["message"], "success")
return redirect(url_for("engineering.add_subcontractor_rates"))
else:
flash(result["message"], "danger")
rates = SubcontractorRateService.get_all_rates()
return render_template(
"engineering/contractor_rate.html",
title="Subcontractor Rate Master",
subcontractors=subcontractors,
rates=rates
)
@engi_bp.route("/subcontractor-rate/edit/<int:rate_id>", methods=["GET", "POST"])
def edit_rate(rate_id):
subcontractors = Subcontractor.query.filter_by(status="Active").all()
if request.method == "POST":
result = SubcontractorRateService.save_or_update(request.form)
if result["success"]:
flash(result["message"], "success")
return redirect(url_for("engineering.add_subcontractor_rates"))
flash(result["message"], "danger")
rate = SubcontractorRateService.get_rate(rate_id)
rates = SubcontractorRateService.get_all_rates()
return render_template(
"engineering/contractor_rate.html",
subcontractors=subcontractors,
rate=rate,
rates=rates
)
@engi_bp.route("/subcontractor-rate/delete/<int:rate_id>")
def delete_rate(rate_id):
SubcontractorRateService.delete_rate(rate_id)
flash("Rate deleted successfully.", "success")
return redirect(url_for("engineering.add_subcontractor_rates"))
@engi_bp.route("/check-rate")
def check_rate():
exists = SubcontractorRateService.check_duplicate(
subcontractor_id=request.args.get("subcontractor_id"),
category=request.args.get("category"),
item_name=request.args.get("item_name"),
rate_id=request.args.get("rate_id")
)
return jsonify({
"exists": exists
})