from flask import ( Blueprint, render_template, request, redirect, url_for, flash, jsonify ) from app.models.subcontractor_model import Subcontractor from app.services.subcontractor_rate_service import SubcontractorRateService from app.constants.messages import SuccessMessage, ErrorMessage engi_bp = Blueprint( "engineering", __name__, url_prefix="/engi" ) @engi_bp.route("/") def engineering_master(): return render_template( "engineering/index.html", title="Engineering Masters" ) # Client rate model @engi_bp.route("/client-rate") def client_rates(): return render_template( "engineering/client_rate.html", 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/", 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/") 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 })