51 lines
1.6 KiB
Python
Executable File
51 lines
1.6 KiB
Python
Executable File
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import text
|
|
from app.api.deps import get_db, get_current_user
|
|
from pydantic import BaseModel
|
|
from datetime import date
|
|
from typing import Optional
|
|
|
|
router = APIRouter()
|
|
|
|
class ExpenseCreate(BaseModel):
|
|
vehicle_id: str
|
|
category: str # Pl: REFUELING, SERVICE, INSURANCE
|
|
amount: float
|
|
date: date
|
|
odometer_value: Optional[float] = None
|
|
description: Optional[str] = None
|
|
|
|
@router.post("/add")
|
|
async def add_expense(
|
|
expense: ExpenseCreate,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user = Depends(get_current_user)
|
|
):
|
|
"""
|
|
Új költség rögzítése egy járműhöz.
|
|
"""
|
|
# 1. Ellenőrizzük, hogy a jármű létezik-e
|
|
query = text("SELECT id FROM data.vehicles WHERE id = :v_id")
|
|
res = await db.execute(query, {"v_id": expense.vehicle_id})
|
|
if not res.fetchone():
|
|
raise HTTPException(status_code=404, detail="Jármű nem található.")
|
|
|
|
# 2. Beszúrás a vehicle_expenses táblába
|
|
insert_query = text("""
|
|
INSERT INTO data.vehicle_expenses
|
|
(vehicle_id, category, amount, date, odometer_value, description)
|
|
VALUES (:v_id, :cat, :amt, :date, :odo, :desc)
|
|
""")
|
|
|
|
await db.execute(insert_query, {
|
|
"v_id": expense.vehicle_id,
|
|
"cat": expense.category,
|
|
"amt": expense.amount,
|
|
"date": expense.date,
|
|
"odo": expense.odometer_value,
|
|
"desc": expense.description
|
|
})
|
|
|
|
await db.commit()
|
|
return {"status": "success", "message": "Költség rögzítve."} |