Добавлены новые модели SaleCategoryRequest и SaleCategoryResponse в bff_models.py для работы с категориями продаж. Обновлены функции в fill_db.py для заполнения базы данных категориями продаж. Изменены эндпоинты в main.py для создания и получения категорий продаж. Обновлены модели и SQL-скрипты для поддержки новых полей и связей. Улучшена логика обработки продаж с учетом категорий.
This commit is contained in:
22
fill_db.py
22
fill_db.py
@@ -1,7 +1,7 @@
|
||||
import random
|
||||
from uuid import uuid4
|
||||
from sqlmodel import Session
|
||||
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken
|
||||
from sql_models import TgAgent, Ref, Sale, Account, Company, AgentTransaction, PartnerTransaction, CompanyBalance, AgentBalance, IntegrationToken, SaleCategory
|
||||
from sqlalchemy import text
|
||||
from datetime import datetime, timedelta
|
||||
from hashlib import sha256
|
||||
@@ -81,6 +81,7 @@ def fill_db():
|
||||
session.execute(text('DELETE FROM "partner_transactions"'))
|
||||
session.execute(text('DELETE FROM "company_balances"'))
|
||||
session.execute(text('DELETE FROM "agent_balances"'))
|
||||
session.execute(text("DELETE FROM salecategory"))
|
||||
session.execute(text("DELETE FROM company"))
|
||||
session.commit()
|
||||
# 0. Company
|
||||
@@ -110,6 +111,18 @@ def fill_db():
|
||||
session.add(integration_token)
|
||||
session.commit()
|
||||
|
||||
# 0.2 SaleCategory
|
||||
sale_categories = [
|
||||
SaleCategory(category="basic", description="Базовая продажа", perc=10.0, company_id=company.id),
|
||||
SaleCategory(category="premium", description="Премиум продажа", perc=20.0, company_id=company.id),
|
||||
SaleCategory(category="vip", description="VIP продажа", perc=30.0, company_id=company.id),
|
||||
]
|
||||
for cat in sale_categories:
|
||||
session.add(cat)
|
||||
session.commit()
|
||||
for cat in sale_categories:
|
||||
session.refresh(cat)
|
||||
|
||||
# 1. Accounts
|
||||
accounts = []
|
||||
for i in range(4):
|
||||
@@ -182,25 +195,26 @@ def fill_db():
|
||||
for ref in refs:
|
||||
session.refresh(ref)
|
||||
# 4. Sales (минимум 20 на каждый ref)
|
||||
all_categories = session.query(SaleCategory).filter_by(company_id=company.id).all()
|
||||
for ref in refs:
|
||||
sale_count = random.randint(20, int(20 * 1.25)) # от 20 до 25
|
||||
for _ in range(sale_count):
|
||||
cost = round(random.uniform(100, 1000), 2)
|
||||
crediting = round(cost * (company.agent_commission / 100.0), 2)
|
||||
|
||||
sale_category = random.choice(all_categories)
|
||||
crediting = round(cost * (sale_category.perc / 100.0), 2)
|
||||
# Генерируем случайную дату и время в пределах последних 7 дней
|
||||
end_dttm = datetime.utcnow()
|
||||
start_dttm = end_dttm - timedelta(days=7)
|
||||
time_diff = end_dttm - start_dttm
|
||||
random_seconds = random.uniform(0, time_diff.total_seconds())
|
||||
sale_dttm = start_dttm + timedelta(seconds=random_seconds)
|
||||
|
||||
sale = Sale(
|
||||
cost=cost,
|
||||
crediting=crediting,
|
||||
ref=ref.id,
|
||||
sale_id=str(uuid4()),
|
||||
company_id=company.id,
|
||||
category=sale_category.id,
|
||||
sale_dttm=sale_dttm,
|
||||
create_dttm=sale_dttm, # create_dttm также будет случайным в этом диапазоне
|
||||
update_dttm=sale_dttm # update_dttm также будет случайным в этом диапазоне
|
||||
|
||||
Reference in New Issue
Block a user