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