feat: 部门经营表新增项目现金流/部门费用已付/部门现金流

- 部门毛利 → 项目毛利
- 新增行: 项目现金流、部门费用(已付)、部门现金流
- 后端 expense_paid_sum 计算平台费用已付(排除暂不计入)
- 总工作台同步兼容
- 版本号 v1.0.0.8
This commit is contained in:
mac
2026-07-07 19:00:53 +08:00
parent 76da3a2106
commit 6853b755b8
3 changed files with 64 additions and 6 deletions

View File

@@ -359,6 +359,27 @@ def bootstrap():
all_metrics[-1]["cashflow_month"] = all_metrics[-1]["payment_month"] - all_metrics[-1]["paid_month"]
all_metrics[-1]["cashflow_prev_q"] = all_metrics[-1]["payment_prev_q"] - all_metrics[-1]["paid_prev_q"]
all_metrics[-1]["cashflow_prev_month"] = all_metrics[-1]["payment_prev_month"] - all_metrics[-1]["paid_prev_month"]
def t_expense_paid_sum(m_range):
total = 0
for r in t_expense:
if (r.get("status") or "") == "暂不计入": continue
m = (r.get("expense_month") or "").strip()
if not m or "-" not in m: continue
try:
if int(m.split("-")[1]) in m_range:
total += float(r.get("incurred_amount") or 0)
except: pass
return total
all_metrics[-1]["expense_paid_annual"] = t_expense_paid_sum(range(1, 13))
all_metrics[-1]["expense_paid_q2"] = t_expense_paid_sum(_q_range)
all_metrics[-1]["expense_paid_month"] = t_expense_paid_sum([_now_month])
all_metrics[-1]["expense_paid_prev_q"] = t_expense_paid_sum(_prev_q_range)
all_metrics[-1]["expense_paid_prev_month"] = t_expense_paid_sum([_prev_month]) if _prev_month else 0
all_metrics[-1]["dept_cf_annual"] = all_metrics[-1]["cashflow_annual"] - all_metrics[-1]["expense_paid_annual"]
all_metrics[-1]["dept_cf_q2"] = all_metrics[-1]["cashflow_q2"] - all_metrics[-1]["expense_paid_q2"]
all_metrics[-1]["dept_cf_month"] = all_metrics[-1]["cashflow_month"] - all_metrics[-1]["expense_paid_month"]
all_metrics[-1]["dept_cf_prev_q"] = all_metrics[-1]["cashflow_prev_q"] - all_metrics[-1]["expense_paid_prev_q"]
all_metrics[-1]["dept_cf_prev_month"] = all_metrics[-1]["cashflow_prev_month"] - all_metrics[-1]["expense_paid_prev_month"]
all_metrics[-1]["profit_annual"] = all_metrics[-1]["gross_annual"] - all_metrics[-1]["proj_expense_annual"]
all_metrics[-1]["profit_q2"] = all_metrics[-1]["gross_q2"] - all_metrics[-1]["proj_expense_q2"]
all_metrics[-1]["profit_month"] = all_metrics[-1]["monthly_net_profit"] - all_metrics[-1]["proj_expense_month"]
@@ -367,7 +388,7 @@ def bootstrap():
all_monthly.append(monthly_finance(conn, t))
all_recent.extend(rows(conn, "SELECT * FROM follow_up_records WHERE tenant=? ORDER BY id DESC LIMIT 4", [t]))
agg = {}
for key in ["total_projects","total_proposals","total_products","upcoming_products","signed_amount","signed_annual","signed_q2","signed_month","signed_prev_q","signed_prev_month","revenue_annual","revenue_q2","monthly_revenue","revenue_prev_q","revenue_prev_month","gross_annual","gross_q2","monthly_net_profit","gross_prev_q","gross_prev_month","payment_annual","payment_q2","payment_month","payment_prev_q","payment_prev_month","cost_annual","cost_q2","cost_month","cost_prev_q","cost_prev_month","expense_annual","expense_q2","expense_month","expense_prev_q","expense_prev_month","paid_annual","paid_q2","paid_month","paid_prev_q","paid_prev_month","cashflow_annual","cashflow_q2","cashflow_month","cashflow_prev_q","cashflow_prev_month","profit_annual","profit_q2","profit_month","profit_prev_q","profit_prev_month","proj_expense_annual","proj_expense_q2","proj_expense_month","proj_expense_prev_q","proj_expense_prev_month"]:
for key in ["total_projects","total_proposals","total_products","upcoming_products","signed_amount","signed_annual","signed_q2","signed_month","signed_prev_q","signed_prev_month","revenue_annual","revenue_q2","monthly_revenue","revenue_prev_q","revenue_prev_month","gross_annual","gross_q2","monthly_net_profit","gross_prev_q","gross_prev_month","payment_annual","payment_q2","payment_month","payment_prev_q","payment_prev_month","cost_annual","cost_q2","cost_month","cost_prev_q","cost_prev_month","expense_annual","expense_q2","expense_month","expense_prev_q","expense_prev_month","paid_annual","paid_q2","paid_month","paid_prev_q","paid_prev_month","cashflow_annual","cashflow_q2","cashflow_month","cashflow_prev_q","cashflow_prev_month","expense_paid_annual","expense_paid_q2","expense_paid_month","expense_paid_prev_q","expense_paid_prev_month","dept_cf_annual","dept_cf_q2","dept_cf_month","dept_cf_prev_q","dept_cf_prev_month","profit_annual","profit_q2","profit_month","profit_prev_q","profit_prev_month","proj_expense_annual","proj_expense_q2","proj_expense_month","proj_expense_prev_q","proj_expense_prev_month"]:
agg[key] = sum(m.get(key, 0) for m in all_metrics)
merged_monthly = []
for i in range(12):
@@ -473,6 +494,22 @@ def bootstrap():
expense_month_val = expense_sum([_now_month])
expense_prev_q = expense_sum(_prev_q_range)
expense_prev_month = expense_sum([_prev_month]) if _prev_month else 0
def expense_paid_sum(month_range):
total = 0
for r in expense:
if (r.get("status") or "") == "暂不计入": continue
m = (r.get("expense_month") or "").strip()
if not m or "-" not in m: continue
try:
if int(m.split("-")[1]) in month_range:
total += float(r.get("incurred_amount") or 0)
except: pass
return total
expense_paid_annual = expense_paid_sum(range(1, 13))
expense_paid_q2 = expense_paid_sum(_q_range)
expense_paid_month = expense_paid_sum([_now_month])
expense_paid_prev_q = expense_paid_sum(_prev_q_range)
expense_paid_prev_month = expense_paid_sum([_prev_month]) if _prev_month else 0
paid_annual = sum_expense("paid", range(1, 13))
paid_q2 = sum_expense("paid", _q_range)
paid_month = sum_expense("paid", [_now_month])
@@ -488,6 +525,11 @@ def bootstrap():
cashflow_month = payment_month - paid_month
cashflow_prev_q = payment_prev_q - paid_prev_q
cashflow_prev_month = payment_prev_month - paid_prev_month
dept_cf_annual = cashflow_annual - expense_paid_annual
dept_cf_q2 = cashflow_q2 - expense_paid_q2
dept_cf_month = cashflow_month - expense_paid_month
dept_cf_prev_q = cashflow_prev_q - expense_paid_prev_q
dept_cf_prev_month = cashflow_prev_month - expense_paid_prev_month
profit_annual = gross_annual - proj_expense_annual
profit_q2 = gross_q2 - proj_expense_q2
profit_month = gross_month - proj_expense_month
@@ -559,6 +601,16 @@ def bootstrap():
"cashflow_month": cashflow_month,
"cashflow_prev_q": cashflow_prev_q,
"cashflow_prev_month": cashflow_prev_month,
"expense_paid_annual": expense_paid_annual,
"expense_paid_q2": expense_paid_q2,
"expense_paid_month": expense_paid_month,
"expense_paid_prev_q": expense_paid_prev_q,
"expense_paid_prev_month": expense_paid_prev_month,
"dept_cf_annual": dept_cf_annual,
"dept_cf_q2": dept_cf_q2,
"dept_cf_month": dept_cf_month,
"dept_cf_prev_q": dept_cf_prev_q,
"dept_cf_prev_month": dept_cf_prev_month,
"profit_annual": profit_annual,
"profit_q2": profit_q2,
"profit_month": profit_month,