Обновлены функции получения данных в эндпоинтах для учета компании текущего аккаунта, улучшена фильтрация по company_id в запросах к базе данных.
This commit is contained in:
parent
5d14969f82
commit
6b8b4ac059
28
main.py
28
main.py
@ -333,18 +333,18 @@ def get_stat(current_tg_agent: TgAgent = Depends(get_current_tg_agent), db: Sess
|
||||
@app.get("/dashboard/cards", tags=["bff"])
|
||||
def get_dashboard_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
|
||||
# 1. Общий доход - сумма всех Sale.cost
|
||||
total_revenue = db.exec(select(Sale)).all()
|
||||
total_revenue = db.exec(select(Sale).where(Sale.company_id == current_account.company_id)).all()
|
||||
totalRevenue = sum(sale.cost for sale in total_revenue)
|
||||
|
||||
# 2. Общие выплаты - сумма всех Sale.crediting
|
||||
totalPayouts = sum(sale.crediting for sale in total_revenue)
|
||||
|
||||
# 3. Активные рефералы - количество уникальных TgAgent.tg_id
|
||||
unique_agents = db.exec(select(TgAgent.tg_id)).all()
|
||||
unique_agents = db.exec(select(TgAgent.tg_id).where(TgAgent.company_id == current_account.company_id)).all()
|
||||
activeReferrals = len(set(unique_agents))
|
||||
|
||||
# 4. Ожидающие выплаты - сумма AgentTransaction со статусом 'waiting'
|
||||
pending_agent_transactions = db.exec(select(AgentTransaction).where(AgentTransaction.status == 'waiting')).all()
|
||||
pending_agent_transactions = db.exec(select(AgentTransaction).join(TgAgent).where(TgAgent.company_id == current_account.company_id).where(AgentTransaction.status == 'waiting')).all()
|
||||
pendingPayouts = sum(t.amount for t in pending_agent_transactions)
|
||||
|
||||
# 5. Количество продаж
|
||||
@ -366,7 +366,7 @@ def get_dashboard_chart_total(current_account: Account = Depends(get_current_acc
|
||||
func.strftime('%Y-%m-%d', Sale.create_dttm).label('date'),
|
||||
func.sum(Sale.cost).label('revenue'),
|
||||
func.count(Sale.id).label('sales')
|
||||
).group_by(func.strftime('%Y-%m-%d', Sale.create_dttm))
|
||||
).where(Sale.company_id == current_account.company_id).group_by(func.strftime('%Y-%m-%d', Sale.create_dttm))
|
||||
.order_by(func.strftime('%Y-%m-%d', Sale.create_dttm))
|
||||
).all()
|
||||
# Преобразуем результат в нужный формат
|
||||
@ -379,7 +379,7 @@ def get_dashboard_chart_total(current_account: Account = Depends(get_current_acc
|
||||
@app.get("/dashboard/chart/agent", tags=["bff"])
|
||||
def get_dashboard_chart_agent(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
|
||||
# Получаем всех агентов
|
||||
agents = db.exec(select(TgAgent)).all()
|
||||
agents = db.exec(select(TgAgent).where(TgAgent.company_id == current_account.company_id)).all()
|
||||
result = []
|
||||
for agent in agents:
|
||||
# Получаем все рефы этого агента
|
||||
@ -410,7 +410,7 @@ def get_agents_stat(
|
||||
date_end: str = Query(None),
|
||||
current_account: Account = Depends(get_current_account),
|
||||
):
|
||||
agents_query = select(TgAgent)
|
||||
agents_query = select(TgAgent).where(TgAgent.company_id == current_account.company_id)
|
||||
if date_start:
|
||||
agents_query = agents_query.where(TgAgent.create_dttm >= date_start)
|
||||
if date_end:
|
||||
@ -450,7 +450,7 @@ def get_referrals_stat(
|
||||
date_end: str = Query(None),
|
||||
current_account: Account = Depends(get_current_account),
|
||||
):
|
||||
refs_query = select(Ref)
|
||||
refs_query = select(Ref).join(TgAgent).where(TgAgent.company_id == current_account.company_id)
|
||||
if date_start:
|
||||
refs_query = refs_query.where(Ref.create_dttm >= date_start)
|
||||
if date_end:
|
||||
@ -478,7 +478,7 @@ def get_sales_stat(
|
||||
date_end: str = Query(None),
|
||||
current_account: Account = Depends(get_current_account),
|
||||
):
|
||||
sales_query = select(Sale)
|
||||
sales_query = select(Sale).where(Sale.company_id == current_account.company_id)
|
||||
if date_start:
|
||||
sales_query = sales_query.where(Sale.create_dttm >= date_start)
|
||||
if date_end:
|
||||
@ -506,15 +506,15 @@ def get_sales_stat(
|
||||
@app.get("/billing/cards", tags=["bff"])
|
||||
def get_billing_cards(current_account: Account = Depends(get_current_account), db: Session = Depends(get_db)):
|
||||
# 1. cost - Общий заработок (сумма всех Sale.cost)
|
||||
sales = db.exec(select(Sale)).all()
|
||||
sales = db.exec(select(Sale).where(Sale.company_id == current_account.company_id)).all()
|
||||
cost = sum(sale.cost for sale in sales)
|
||||
|
||||
# 2. crediting - Общие выплаты (сумма PartnerTransaction типа 'agent_payout' со статусом 'done')
|
||||
completed_payouts = db.exec(select(PartnerTransaction).where(PartnerTransaction.type == 'agent_payout').where(PartnerTransaction.status == 'done')).all()
|
||||
completed_payouts = db.exec(select(PartnerTransaction).where(PartnerTransaction.type == 'agent_payout').where(PartnerTransaction.status == 'done').where(PartnerTransaction.company_id == current_account.company_id)).all()
|
||||
crediting = sum(t.amount for t in completed_payouts)
|
||||
|
||||
# 3. pendingPayouts - Доступно к выводу всеми партнерами (сумма всех доступных балансов агентов)
|
||||
agent_balances = db.exec(select(AgentBalance)).all()
|
||||
agent_balances = db.exec(select(AgentBalance).join(TgAgent).where(TgAgent.company_id == current_account.company_id)).all()
|
||||
pendingPayouts = sum(balance.available_balance for balance in agent_balances)
|
||||
|
||||
return {
|
||||
@ -532,7 +532,7 @@ def get_billing_payouts_transactions(
|
||||
):
|
||||
# Используем AgentTransaction вместо Transaction
|
||||
# Явно выбираем обе модели для корректной распаковки
|
||||
query = select(AgentTransaction, TgAgent).join(TgAgent)
|
||||
query = select(AgentTransaction, TgAgent).join(TgAgent).where(TgAgent.company_id == current_account.company_id)
|
||||
if date_start:
|
||||
query = query.where(AgentTransaction.create_dttm >= date_start)
|
||||
if date_end:
|
||||
@ -562,7 +562,7 @@ def get_billing_chart_stat(current_account: Account = Depends(get_current_accoun
|
||||
func.strftime('%Y-%m-%d', AgentTransaction.create_dttm).label('date'),
|
||||
AgentTransaction.status.label('status'),
|
||||
func.count(AgentTransaction.id).label('count')
|
||||
).group_by(
|
||||
).join(TgAgent).where(TgAgent.company_id == current_account.company_id).group_by(
|
||||
func.strftime('%Y-%m-%d', AgentTransaction.create_dttm),
|
||||
AgentTransaction.status
|
||||
).order_by(
|
||||
@ -583,7 +583,7 @@ def get_billing_chart_pie(current_account: Account = Depends(get_current_account
|
||||
select(
|
||||
AgentTransaction.status.label('status'),
|
||||
func.count(AgentTransaction.id).label('count')
|
||||
).group_by(AgentTransaction.status)
|
||||
).join(TgAgent).where(TgAgent.company_id == current_account.company_id).group_by(AgentTransaction.status)
|
||||
).all()
|
||||
data = [
|
||||
{"status": row.status, "count": row.count}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user