init
This commit is contained in:
@@ -4,6 +4,7 @@ from sqlalchemy import select, func
|
||||
from sqlalchemy.orm import selectinload
|
||||
from typing import Optional, List, Dict, Tuple
|
||||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
from database.database import get_db_session
|
||||
from services.auth_service import get_current_active_user
|
||||
@@ -414,15 +415,15 @@ async def get_finance_summary(
|
||||
) or 0
|
||||
|
||||
return FinanceSummaryResponse(
|
||||
receivable_total=round(float(receivable_total), 2),
|
||||
payable_total=round(float(payable_total), 2),
|
||||
monthly_receipt_total=round(float(monthly_receipt_total), 2),
|
||||
monthly_payment_total=round(float(monthly_payment_total), 2),
|
||||
receivable_total=Decimal(str(receivable_total)),
|
||||
payable_total=Decimal(str(payable_total)),
|
||||
monthly_receipt_total=Decimal(str(monthly_receipt_total)),
|
||||
monthly_payment_total=Decimal(str(monthly_payment_total)),
|
||||
selected_year=selected_year,
|
||||
selected_quarter=selected_quarter,
|
||||
period_label=period_label,
|
||||
period_receipt_total=round(float(period_receipt_total), 2),
|
||||
period_payment_total=round(float(period_payment_total), 2),
|
||||
period_receipt_total=Decimal(str(period_receipt_total)),
|
||||
period_payment_total=Decimal(str(period_payment_total)),
|
||||
overdue_receivable_count=0,
|
||||
overdue_payable_count=0,
|
||||
)
|
||||
@@ -464,9 +465,9 @@ async def get_partner_statement(
|
||||
"outstanding_total": 0.0,
|
||||
},
|
||||
)
|
||||
total_amount = float(order.total_amount or 0)
|
||||
settled_amount = float(order.received_amount or 0)
|
||||
outstanding = max(total_amount - settled_amount, 0.0)
|
||||
total_amount = Decimal(str(order.total_amount or 0))
|
||||
settled_amount = Decimal(str(order.received_amount or 0))
|
||||
outstanding = max(total_amount - settled_amount, Decimal("0"))
|
||||
partner_stat["order_count"] += 1
|
||||
partner_stat["order_total"] += total_amount
|
||||
partner_stat["settled_total"] += settled_amount
|
||||
@@ -495,7 +496,7 @@ async def get_partner_statement(
|
||||
},
|
||||
)
|
||||
partner_stat["transaction_count"] += 1
|
||||
partner_stat["transaction_total"] += float(txn.amount or 0)
|
||||
partner_stat["transaction_total"] += Decimal(str(txn.amount or 0))
|
||||
else:
|
||||
order_rows = await db_session.execute(
|
||||
select(PurchaseOrder, Supplier)
|
||||
@@ -518,9 +519,9 @@ async def get_partner_statement(
|
||||
"outstanding_total": 0.0,
|
||||
},
|
||||
)
|
||||
total_amount = float(order.total_amount or 0)
|
||||
settled_amount = float(order.paid_amount or 0)
|
||||
outstanding = max(total_amount - settled_amount, 0.0)
|
||||
total_amount = Decimal(str(order.total_amount or 0))
|
||||
settled_amount = Decimal(str(order.paid_amount or 0))
|
||||
outstanding = max(total_amount - settled_amount, Decimal("0"))
|
||||
partner_stat["order_count"] += 1
|
||||
partner_stat["order_total"] += total_amount
|
||||
partner_stat["settled_total"] += settled_amount
|
||||
@@ -549,7 +550,7 @@ async def get_partner_statement(
|
||||
},
|
||||
)
|
||||
partner_stat["transaction_count"] += 1
|
||||
partner_stat["transaction_total"] += float(txn.amount or 0)
|
||||
partner_stat["transaction_total"] += Decimal(str(txn.amount or 0))
|
||||
|
||||
missing_partner_ids = [pid for pid, item in stats_map.items() if "#" in item["partner_name"]]
|
||||
if missing_partner_ids:
|
||||
@@ -572,10 +573,10 @@ async def get_partner_statement(
|
||||
partner_name=item["partner_name"],
|
||||
order_count=item["order_count"],
|
||||
transaction_count=item["transaction_count"],
|
||||
order_total=round(float(item["order_total"]), 2),
|
||||
settled_total=round(float(item["settled_total"]), 2),
|
||||
transaction_total=round(float(item["transaction_total"]), 2),
|
||||
outstanding_total=round(float(item["outstanding_total"]), 2),
|
||||
order_total=Decimal(str(item["order_total"])),
|
||||
settled_total=Decimal(str(item["settled_total"])),
|
||||
transaction_total=Decimal(str(item["transaction_total"])),
|
||||
outstanding_total=Decimal(str(item["outstanding_total"])),
|
||||
period_year=selected_year,
|
||||
period_quarter=selected_quarter,
|
||||
)
|
||||
@@ -587,10 +588,10 @@ async def get_partner_statement(
|
||||
year=selected_year,
|
||||
quarter=selected_quarter,
|
||||
period_label=period_label,
|
||||
order_total=round(float(sum(item.order_total for item in items)), 2),
|
||||
settled_total=round(float(sum(item.settled_total for item in items)), 2),
|
||||
transaction_total=round(float(sum(item.transaction_total for item in items)), 2),
|
||||
outstanding_total=round(float(sum(item.outstanding_total for item in items)), 2),
|
||||
order_total=Decimal(str(sum(item.order_total for item in items))),
|
||||
settled_total=Decimal(str(sum(item.settled_total for item in items))),
|
||||
transaction_total=Decimal(str(sum(item.transaction_total for item in items))),
|
||||
outstanding_total=Decimal(str(sum(item.outstanding_total for item in items))),
|
||||
items=items,
|
||||
)
|
||||
|
||||
@@ -642,15 +643,15 @@ async def get_partner_product_statement(
|
||||
},
|
||||
)
|
||||
|
||||
item_amount = float(item.amount or 0)
|
||||
order_total = float(order.total_amount or 0)
|
||||
order_settled = max(float(order.received_amount or 0), 0.0)
|
||||
ratio = (item_amount / order_total) if order_total > 1e-9 else 0.0
|
||||
item_amount = Decimal(str(item.amount or 0))
|
||||
order_total = Decimal(str(order.total_amount or 0))
|
||||
order_settled = max(Decimal(str(order.received_amount or 0)), Decimal("0"))
|
||||
ratio = (item_amount / order_total) if order_total > Decimal("1e-9") else Decimal("0")
|
||||
item_settled = min(item_amount, order_settled * ratio)
|
||||
item_outstanding = max(item_amount - item_settled, 0.0)
|
||||
item_outstanding = max(item_amount - item_settled, Decimal("0"))
|
||||
|
||||
stat["order_ids"].add(order.id)
|
||||
stat["order_quantity"] += float(item.quantity or 0)
|
||||
stat["order_quantity"] += Decimal(str(item.quantity or 0))
|
||||
stat["order_amount"] += item_amount
|
||||
stat["settled_amount"] += item_settled
|
||||
stat["outstanding_amount"] += item_outstanding
|
||||
@@ -686,15 +687,15 @@ async def get_partner_product_statement(
|
||||
},
|
||||
)
|
||||
|
||||
item_amount = float(item.amount or 0)
|
||||
order_total = float(order.total_amount or 0)
|
||||
order_settled = max(float(order.paid_amount or 0), 0.0)
|
||||
ratio = (item_amount / order_total) if order_total > 1e-9 else 0.0
|
||||
item_amount = Decimal(str(item.amount or 0))
|
||||
order_total = Decimal(str(order.total_amount or 0))
|
||||
order_settled = max(Decimal(str(order.paid_amount or 0)), Decimal("0"))
|
||||
ratio = (item_amount / order_total) if order_total > Decimal("1e-9") else Decimal("0")
|
||||
item_settled = min(item_amount, order_settled * ratio)
|
||||
item_outstanding = max(item_amount - item_settled, 0.0)
|
||||
item_outstanding = max(item_amount - item_settled, Decimal("0"))
|
||||
|
||||
stat["order_ids"].add(order.id)
|
||||
stat["order_quantity"] += float(item.quantity or 0)
|
||||
stat["order_quantity"] += Decimal(str(item.quantity or 0))
|
||||
stat["order_amount"] += item_amount
|
||||
stat["settled_amount"] += item_settled
|
||||
stat["outstanding_amount"] += item_outstanding
|
||||
@@ -707,10 +708,10 @@ async def get_partner_product_statement(
|
||||
product_sku=item["product_sku"],
|
||||
product_name=item["product_name"],
|
||||
order_count=len(item["order_ids"]),
|
||||
order_quantity=round(float(item["order_quantity"]), 2),
|
||||
order_amount=round(float(item["order_amount"]), 2),
|
||||
settled_amount=round(float(item["settled_amount"]), 2),
|
||||
outstanding_amount=round(float(item["outstanding_amount"]), 2),
|
||||
order_quantity=Decimal(str(item["order_quantity"])),
|
||||
order_amount=Decimal(str(item["order_amount"])),
|
||||
settled_amount=Decimal(str(item["settled_amount"])),
|
||||
outstanding_amount=Decimal(str(item["outstanding_amount"])),
|
||||
period_year=selected_year,
|
||||
period_quarter=selected_quarter,
|
||||
)
|
||||
@@ -727,9 +728,9 @@ async def get_partner_product_statement(
|
||||
quarter=selected_quarter,
|
||||
period_label=period_label,
|
||||
partner_id=partner_id,
|
||||
order_amount_total=round(float(sum(item.order_amount for item in items)), 2),
|
||||
settled_amount_total=round(float(sum(item.settled_amount for item in items)), 2),
|
||||
outstanding_amount_total=round(float(sum(item.outstanding_amount for item in items)), 2),
|
||||
order_amount_total=Decimal(str(sum(item.order_amount for item in items))),
|
||||
settled_amount_total=Decimal(str(sum(item.settled_amount for item in items))),
|
||||
outstanding_amount_total=Decimal(str(sum(item.outstanding_amount for item in items))),
|
||||
items=items,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user