from flask import ( Blueprint, render_template, request, redirect, url_for, flash, jsonify ) from app.constants.messages import SuccessMessage, ErrorMessage from app.models.subcontractor_model import Subcontractor from app.services.subcontractor_rate_service import SubcontractorRateService from app.services.client_rate_service import ClientRateService 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", methods=["GET", "POST"]) def client_rate_master(): if request.method == "POST": result = ClientRateService.save_or_update(request.form) if result["success"]: flash(result["message"], "success") return redirect(url_for("engineering.client_rate_master")) else: flash(result["message"], "danger") rates = ClientRateService.get_all_rates() return render_template( "engineering/client_rate.html", title="Client Rate Master", rates=rates ) @engi_bp.route("/client-rate/edit/", methods=["GET", "POST"]) def client_edit_rate(rate_id): if request.method == "POST": result = ClientRateService.save_or_update(request.form) if result["success"]: flash(result["message"], "success") return redirect(url_for("engineering.client_rate_master")) flash(result["message"], "danger") rate = ClientRateService.get_rate(rate_id) rates = ClientRateService.get_all_rates() return render_template( "engineering/client_rate.html", rate=rate, rates=rates ) @engi_bp.route("/client-rate/delete/") def client_delete_rate(rate_id): ClientRateService.delete_rate(rate_id) flash("Rate deleted successfully.", "success") return redirect(url_for("engineering.client_rate_master")) # -------------------- Sub-Contractor ------------------------------------- @engi_bp.route("/subcontractor-rate", methods=["GET", "POST"]) def subcontractor_rate_master(): 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.subcontractor_rate_master")) 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 subcontractor_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.subcontractor_rate_master")) 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 subcontractor_delete_rate(rate_id): SubcontractorRateService.delete_rate(rate_id) flash("Rate deleted successfully.", "success") return redirect(url_for("engineering.subcontractor_rate_master")) @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 })