107 lines
4.1 KiB
Python
107 lines
4.1 KiB
Python
import asyncio
|
|
import uuid
|
|
from datetime import datetime, timedelta
|
|
from sqlalchemy import select
|
|
from app.db.session import SessionLocal
|
|
from app.models import (
|
|
User, Organization, OrganizationMember, Asset, AssetCatalog,
|
|
AssetTelemetry, AssetFinancials, AssetCost, AssetEvent
|
|
)
|
|
from app.models.organization import OrgType
|
|
|
|
async def seed_test_scenario():
|
|
async with SessionLocal() as db:
|
|
print("🚀 Teszt ökoszisztéma felépítése a meglévő modellek alapján...")
|
|
|
|
# 1. Admin lekérése
|
|
admin = (await db.execute(select(User))).scalars().first()
|
|
if not admin:
|
|
print("❌ Hiba: Nincs admin az adatbázisban!")
|
|
return
|
|
|
|
# 2. SZERVEZETEK (A te OrgType enumod alapján)
|
|
# Privát flotta
|
|
private_org = Organization(
|
|
name="Kincses Privát",
|
|
full_name="Kincses Magánflotta és Garázs",
|
|
org_type=OrgType.individual,
|
|
owner_id=admin.id
|
|
)
|
|
# Céges flotta (OrgType.business-t használunk!)
|
|
company_org = Organization(
|
|
name="ProfiBot Fleet",
|
|
full_name="ProfiBot Software Solutions Kft.",
|
|
org_type=OrgType.business,
|
|
owner_id=admin.id
|
|
)
|
|
# Szolgáltatók
|
|
service_org = Organization(
|
|
name="Mester Szerviz",
|
|
full_name="Mester Autójavító és Vizsgabázis Kft.",
|
|
org_type=OrgType.service,
|
|
owner_id=admin.id
|
|
)
|
|
gas_station = Organization(
|
|
name="MOL Digit",
|
|
full_name="MOL Digitális Töltőállomás 001",
|
|
org_type=OrgType.service_provider, # OrgType.service_provider-t használunk!
|
|
owner_id=admin.id
|
|
)
|
|
|
|
db.add_all([private_org, company_org, service_org, gas_station])
|
|
await db.flush()
|
|
|
|
# Tagságok rögzítése
|
|
db.add(OrganizationMember(user_id=admin.id, organization_id=private_org.id, role="owner"))
|
|
db.add(OrganizationMember(user_id=admin.id, organization_id=company_org.id, role="owner"))
|
|
|
|
# 3. RÉTESZLETES JÁRMŰ ADAT (Tesla Model 3)
|
|
catalog = AssetCatalog(
|
|
make="Tesla", model="Model 3", generation="Long Range",
|
|
year_from=2021, fuel_type="Electric",
|
|
factory_data={
|
|
"battery": "75 kWh", "power": "366 kW", "torque": "493 Nm",
|
|
"tire_size": "235/45 R18", "oil_type": "None (EV)"
|
|
}
|
|
)
|
|
db.add(catalog)
|
|
await db.flush()
|
|
|
|
vehicle = Asset(
|
|
vin="5YJ3E1EB8LF000000", license_plate="TES-777-EV",
|
|
name="Főnök Teslája", year_of_manufacture=2021,
|
|
catalog_id=catalog.id, status="active"
|
|
)
|
|
db.add(vehicle)
|
|
await db.flush()
|
|
|
|
# Telemetria és Pénzügyi modulok
|
|
db.add(AssetTelemetry(asset_id=vehicle.id, current_mileage=45200, vqi_score=100.0, dbs_score=100.0))
|
|
db.add(AssetFinancials(asset_id=vehicle.id, acquisition_price=18500000))
|
|
|
|
# 4. KÖLTSÉGEK (9 kategória szimulálása)
|
|
costs_data = [
|
|
("FUEL", 15000, "Szupertöltés MOL", gas_station.id),
|
|
("MAINTENANCE", 120000, "Éves szerviz + fékfolyadék", service_org.id),
|
|
("TIRES", 240000, "Michelin Pilot Sport szett", None),
|
|
("INSURANCE", 45000, "Allianz Casco", None),
|
|
("TAX", 0, "Zöld rendszám kedvezmény", None),
|
|
("TOLL", 5500, "Pest megyei e-matrica", None),
|
|
("CLEANING", 8500, "Nano bevonat + Mosás", None),
|
|
("PARKING", 2400, "Airport Parking", None),
|
|
("FINE", 0, "Nincs aktív bírság", None)
|
|
]
|
|
|
|
for c_type, amount, desc, vendor_id in costs_data:
|
|
db.add(AssetCost(
|
|
asset_id=vehicle.id, organization_id=company_org.id,
|
|
cost_type=c_type, amount=amount, currency="HUF",
|
|
data={"description": desc, "vendor_id": vendor_id},
|
|
date=datetime.now() - timedelta(days=2)
|
|
))
|
|
|
|
await db.commit()
|
|
print("✅ Siker! Flották, Tesla és a 9 költségtípus rögzítve.")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(seed_test_scenario()) |