Migrare completă de la SP_CREEAZA_COMANDA_PROTOTIP la PACK_AUTO.dev_adauga_lucrare (18 params). Formular ComandaNoua extins cu toate câmpurile din SP: observații, defecțiuni, km, ore motor, termen, nr. dosar. - schema: solicitari → observatii (opțional); adăugat defectiuni, km_int, ore_functionare, nr_dosar, termen - service: callproc cablat pe câmpurile noi; pc_nr cu milisecunde (evită colizii sub-secundă) - error mapper: range 20001→20000 (ORA-20000 era neacoperit → 500 în loc de 422) - onboarding_roa_web.sql: grant pe PACK_AUTO (înlocuiește SP prototip) - ComandaNoua.vue: InputNumber km/ore, Calendar termen, Textarea defecțiuni, InputText nr_dosar Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
90 lines
3.2 KiB
Python
90 lines
3.2 KiB
Python
import time
|
|
from datetime import date
|
|
from typing import List, Optional
|
|
|
|
import oracledb
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
|
from shared.auth.dependencies import get_current_user
|
|
from shared.auth.models import CurrentUser
|
|
from shared.database.oracle_pool import oracle_pool
|
|
|
|
from ..schemas.comanda import (
|
|
ComandaListResponse, ComandaRequest, ComandaResponse,
|
|
FirmaItem, TipDevizItem, MasinaClientItem,
|
|
)
|
|
from ..services.comanda_service import ComandaService
|
|
from ..services.lookup_service import LookupService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/ping")
|
|
async def ping(_: CurrentUser = Depends(get_current_user)):
|
|
"""Health check: verifies Oracle connectivity for mariusm_test server."""
|
|
t0 = time.perf_counter()
|
|
try:
|
|
async with oracle_pool.get_connection('mariusm_test') as conn:
|
|
with conn.cursor() as cursor:
|
|
cursor.execute('SELECT 1 FROM DUAL')
|
|
row = cursor.fetchone()
|
|
except oracledb.DatabaseError as e:
|
|
raise HTTPException(status_code=503, detail=f"Oracle error: {e}")
|
|
elapsed_ms = round((time.perf_counter() - t0) * 1000, 2)
|
|
return {"result": row[0], "server": "mariusm_test", "latency_ms": elapsed_ms}
|
|
|
|
|
|
@router.get("/firme", response_model=List[FirmaItem])
|
|
async def get_firme(current_user: CurrentUser = Depends(get_current_user)):
|
|
"""Firmele accesibile utilizatorului curent (din JWT companies[])."""
|
|
return await LookupService.get_firme(current_user.companies)
|
|
|
|
|
|
@router.get("/tip-deviz", response_model=List[TipDevizItem])
|
|
async def get_tip_deviz(_: CurrentUser = Depends(get_current_user)):
|
|
"""Tipuri de deviz din DEV_TIP_DEVIZ."""
|
|
return await LookupService.get_tip_deviz()
|
|
|
|
|
|
@router.get("/masini", response_model=List[MasinaClientItem])
|
|
async def get_masini(_: CurrentUser = Depends(get_current_user)):
|
|
"""Mașini active din AUTO_VMASINICLIENTI (toate firmele pe același server)."""
|
|
return await LookupService.get_masini()
|
|
|
|
|
|
@router.get("/comenzi", response_model=ComandaListResponse)
|
|
async def list_comenzi(
|
|
page: int = Query(default=1, ge=1),
|
|
per_page: int = Query(default=20, ge=1, le=100),
|
|
validat: Optional[int] = Query(default=None, ge=0, le=1),
|
|
data_de_la: Optional[date] = Query(default=None),
|
|
data_pana_la: Optional[date] = Query(default=None),
|
|
_: CurrentUser = Depends(get_current_user),
|
|
):
|
|
# NOTE: DEV_ORDL has no id_firma column — firmă filter not available at DB level.
|
|
# All comenzi in MARIUSM_AUTO schema are visible (companies 110/167/169 share schema).
|
|
return await ComandaService.get_comenzi(
|
|
page=page,
|
|
per_page=per_page,
|
|
validat=validat,
|
|
data_de_la=data_de_la,
|
|
data_pana_la=data_pana_la,
|
|
)
|
|
|
|
|
|
@router.post("/comenzi", response_model=ComandaResponse)
|
|
async def creeaza_comanda(
|
|
data: ComandaRequest,
|
|
current_user: CurrentUser = Depends(get_current_user),
|
|
):
|
|
try:
|
|
return await ComandaService.creeaza_comanda(
|
|
data=data,
|
|
username=current_user.username,
|
|
user_id=current_user.user_id,
|
|
)
|
|
except NotImplementedError as e:
|
|
raise HTTPException(status_code=501, detail=str(e))
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|