from flask import Blueprint, render_template, request, redirect, url_for, jsonify from flask_login import login_required from model.Subcontractor import Subcontractor subcontractor_bp = Blueprint('subcontractor', __name__) # ---------------------------------------------------------- # Helpers (unchanged) # ---------------------------------------------------------- class HtmlHelper: @staticmethod def json_response(data, status=200): return jsonify(data), status class ResponseHandler: @staticmethod def fetch_failure(entity): return {"status": "error", "message": f"Failed to fetch {entity}"} @staticmethod def add_failure(entity): return {"status": "error", "message": f"Failed to add {entity}"} @staticmethod def update_failure(entity): return {"status": "error", "message": f"Failed to update {entity}"} @staticmethod def delete_failure(entity): return {"status": "error", "message": f"Failed to delete {entity}"} # ---------------------------------------------------------- # LIST + ADD # ---------------------------------------------------------- @subcontractor_bp.route('/subcontractor', methods=['GET', 'POST']) @login_required def subcontract(): sub = Subcontractor() # ---------------- GET ---------------- if request.method == 'GET': subcontractor = sub.GetAllSubcontractors(request) if not sub.isSuccess: return HtmlHelper.json_response( ResponseHandler.fetch_failure("Subcontractor"), 500 ) return render_template('add_subcontractor.html', subcontractor=subcontractor) # ---------------- POST (ADD) ---------------- if request.method == 'POST': sub.AddSubcontractor(request) if not sub.isSuccess: return HtmlHelper.json_response( ResponseHandler.add_failure("Subcontractor"), 500 ) # Reload list after insert subcontractor = sub.GetAllSubcontractors(request) return render_template('add_subcontractor.html', subcontractor=subcontractor) # ---------------------------------------------------------- # EDIT # ---------------------------------------------------------- @subcontractor_bp.route('/edit_subcontractor/', methods=['GET', 'POST']) @login_required def edit_subcontractor(id): sub = Subcontractor() # Fetch data subcontractor = sub.GetSubcontractorByID(id) if not subcontractor: return HtmlHelper.json_response( ResponseHandler.fetch_failure("Subcontractor"), 404 ) # ---------------- POST (UPDATE) ---------------- if request.method == 'POST': sub.EditSubcontractor(request, id) if not sub.isSuccess: return HtmlHelper.json_response( ResponseHandler.update_failure("Subcontractor"), 500 ) return redirect(url_for('subcontractor.subcontract')) return render_template('edit_subcontractor.html', subcontractor=subcontractor) # ---------------------------------------------------------- # DELETE # ---------------------------------------------------------- @subcontractor_bp.route('/deleteSubContractor/', methods=['GET', 'POST']) @login_required def deleteSubContractor(id): sub = Subcontractor() sub.DeleteSubcontractor(request, id) if not sub.isSuccess: return HtmlHelper.json_response( ResponseHandler.delete_failure("Subcontractor"), 500 ) return redirect(url_for('subcontractor.subcontract'))