diff --git a/main.py b/main.py index 5b5fbb1..145acf3 100644 --- a/main.py +++ b/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}