admin frontend elkezdése, járművek tisztázása, frontend fejleszts
This commit is contained in:
97
backend/scripts/seed_cost_category_tiers.py
Normal file
97
backend/scripts/seed_cost_category_tiers.py
Normal file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Seed script: CostCategory min_tier beállítása.
|
||||
|
||||
A szkript beállítja a költségkategóriák min_tier mezőjét a kód alapján.
|
||||
A tier-ek hierarchikusak: free < premium < enterprise.
|
||||
|
||||
Kategória tier hozzárendelés:
|
||||
- FUEL, SERVICE, TIRES, INSURANCE, TAXES -> free
|
||||
- TOLL_PARKING, CLEANING, OTHER -> premium
|
||||
- (minden más) -> enterprise
|
||||
|
||||
Használat:
|
||||
docker compose exec sf_api python -m backend.scripts.seed_cost_category_tiers
|
||||
"""
|
||||
import asyncio
|
||||
import logging
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy import select, text
|
||||
|
||||
from app.core.config import settings
|
||||
from app.models.vehicle.vehicle import CostCategory
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Tier mapping by category code
|
||||
# A fő kategóriák (parent_id IS NULL) tier beállításai.
|
||||
# Az alkategóriák (pl. FUEL_PETROL, MAINT_SERVICE) öröklik a szülő tier-jét.
|
||||
CATEGORY_TIER_MAP = {
|
||||
"FUEL": "free", # Üzemanyag / Töltés
|
||||
"MAINTENANCE": "free", # Szerviz & Karbantartás
|
||||
"TIRES": "free", # Gumiabroncsok
|
||||
"INSURANCE": "free", # Biztosítás
|
||||
"TAX": "free", # Adók
|
||||
"FEES": "premium", # Útdíj & Parkolás
|
||||
"ADMIN": "premium", # Hatósági díjak
|
||||
"FINANCE": "premium", # Finanszírozás
|
||||
"CLEANING": "premium", # Ápolás & Kozmetika
|
||||
"OTHER": "premium", # Egyéb
|
||||
}
|
||||
|
||||
# Default tier for categories not in the map
|
||||
DEFAULT_TIER = "enterprise"
|
||||
|
||||
|
||||
async def seed_cost_category_tiers():
|
||||
"""Beállítja a min_tier értékeket az összes CostCategory rekordra."""
|
||||
engine = create_async_engine(str(settings.SQLALCHEMY_DATABASE_URI))
|
||||
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
async with async_session() as db:
|
||||
try:
|
||||
# Lekérjük az összes kategóriát
|
||||
stmt = select(CostCategory).order_by(CostCategory.id)
|
||||
result = await db.execute(stmt)
|
||||
categories = result.scalars().all()
|
||||
|
||||
if not categories:
|
||||
logger.warning("❌ Nincsenek CostCategory rekordok az adatbázisban!")
|
||||
return
|
||||
|
||||
updated_count = 0
|
||||
for cat in categories:
|
||||
# Meghatározzuk a tier-t a kód alapján
|
||||
new_tier = CATEGORY_TIER_MAP.get(cat.code, DEFAULT_TIER)
|
||||
|
||||
# Csak akkor frissítjük, ha még nincs beállítva, vagy változott
|
||||
if cat.min_tier != new_tier:
|
||||
cat.min_tier = new_tier
|
||||
updated_count += 1
|
||||
logger.info(
|
||||
f" ✅ [{cat.code:15s}] {cat.name:30s} -> tier={new_tier}"
|
||||
)
|
||||
|
||||
if updated_count > 0:
|
||||
await db.commit()
|
||||
logger.info(f"\n✅ {updated_count} kategória tier beállítva.")
|
||||
else:
|
||||
logger.info("\n✅ Minden kategória tier már be van állítva.")
|
||||
|
||||
# Összesítő
|
||||
logger.info("\n📊 Tier összesítő:")
|
||||
for cat in categories:
|
||||
logger.info(f" [{cat.min_tier:10s}] {cat.code:15s} - {cat.name}")
|
||||
|
||||
except Exception as e:
|
||||
await db.rollback()
|
||||
logger.error(f"❌ Hiba a seedelés során: {e}")
|
||||
raise
|
||||
finally:
|
||||
await engine.dispose()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(seed_cost_category_tiers())
|
||||
Reference in New Issue
Block a user