# 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 "
  • No subcontractor found
  • " output = "".join( f"
  • {row['Contractor_Name']}
  • " for row in results ) return output # ------------------- Get Hold Types ------------------- @invoice_bp.route('/get_hold_types', methods=['GET']) @login_required def get_hold_types(): hold_types = get_all_hold_types() LogHelper.log_action("Get hold type", f"User {current_user.id} Get hold type '{hold_types}'") return jsonify(hold_types) # ------------------- Edit Invoice ------------------- @invoice_bp.route('/edit_invoice/', methods=['GET', 'POST']) @login_required def edit_invoice(invoice_id): if request.method == 'POST': data = request.form update_invoice(data, invoice_id) update_inpayment(data) LogHelper.log_action("Edit invoice", f"User {current_user.id} Edit invoice '{invoice_id}'") return jsonify({"status": "success", "message": "Invoice updated successfully"}), 200 invoice = get_invoice_by_id(invoice_id) return render_template('edit_invoice.html', invoice=invoice) # ------------------- Delete Invoice ------------------- @invoice_bp.route('/delete_invoice/', methods=['GET']) @login_required def delete_invoice_route(invoice_id): try: delete_invoice_data(invoice_id, current_user.id) LogHelper.log_action("Delete Invoice", f"User {current_user.id} deleted Invoice '{invoice_id}'") return jsonify({ "message": f"Invoice {invoice_id} deleted successfully.", "status": "success" }) except Exception as e: return jsonify({ "message": str(e), "status": "error" }), 500