# controllers/invoice_controller.py from flask import Blueprint, request, jsonify, render_template from flask_login import login_required, current_user from model.Invoice import * from model.Log import LogHelper invoice_bp = Blueprint('invoice', __name__) # -------------------------------- Add Invoice --------------------------------- @invoice_bp.route('/add_invoice', methods=['GET', 'POST']) @login_required def add_invoice(): if request.method == 'POST': try: village_name = request.form.get('village') village_result = get_village_id(village_name) if not village_result: return jsonify({"status": "error", "message": f"Village '{village_name}' not found"}), 400 village_id = village_result['Village_Id'] data = request.form invoice_id = insert_invoice(data, village_id) assign_subcontractor(data, village_id) insert_hold_types(data, invoice_id) LogHelper.log_action("Add invoice", f"User {current_user.id} Added invoice '{data.get('pmc_no')}'") return jsonify({"status": "success", "message": "Invoice added successfully"}), 201 except Exception as e: return jsonify({"status": "error", "message": str(e)}), 500 invoices = get_all_invoice_details() villages = get_all_villages() return render_template('add_invoice.html', invoices=invoices, villages=villages) # ------------------- Search Subcontractor ------------------- @invoice_bp.route('/search_subcontractor', methods=['POST']) @login_required def search_subcontractor(): sub_query = request.form.get("query") results = search_contractors(sub_query) if not results: return "