42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from flask import Blueprint, request, jsonify
|
|
from flask_jwt_extended import jwt_required, get_jwt_identity
|
|
from models.order_out import OrdersOut # Your plain SQL model
|
|
from datetime import datetime
|
|
|
|
report_bp = Blueprint("report", __name__, url_prefix="/report")
|
|
|
|
@report_bp.route("/profit", methods=["GET"])
|
|
@jwt_required()
|
|
def get_profit_report():
|
|
try:
|
|
user_id = get_jwt_identity()
|
|
# Get filters from query params
|
|
date_from = request.args.get("date_from")
|
|
date_to = request.args.get("date_to")
|
|
client_id = request.args.get("client_id")
|
|
transporter_id = request.args.get("transporter_id")
|
|
|
|
# Use the plain SQL method that returns filtered orders list
|
|
filters = {
|
|
"user_id": user_id,
|
|
"date_from": date_from,
|
|
"date_to": date_to,
|
|
"client_id": client_id,
|
|
"transporter_id": transporter_id
|
|
}
|
|
|
|
orders = OrdersOut.get_filtered_orders(filters) # Implement this method in your model
|
|
|
|
total_received = sum(float(o.get("price_received", 0) or 0) for o in orders)
|
|
total_paid = sum(float(o.get("price_paid", 0) or 0) for o in orders)
|
|
profit = total_received - total_paid
|
|
|
|
return jsonify({
|
|
"total_received": total_received,
|
|
"total_paid": total_paid,
|
|
"profit": profit,
|
|
"orders_count": len(orders)
|
|
})
|
|
|
|
except Exception as e:
|
|
return jsonify({"error": str(e)}), 500 |