frontend költség beállítások
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
from pydantic import BaseModel, ConfigDict, Field, validator, root_validator, model_validator, field_validator
|
||||
from typing import Optional, Dict, Any, List
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
from datetime import datetime, date
|
||||
|
||||
class AssetCatalogResponse(BaseModel):
|
||||
""" A technikai katalógus (Master Data) teljes adattartalma. """
|
||||
@@ -86,6 +86,19 @@ class AssetResponse(BaseModel):
|
||||
is_under_warranty: bool = Field(default=False, description="Érvényes jótállás")
|
||||
warranty_expiry_date: Optional[datetime] = Field(None, description="Jótállás érvényességi dátuma")
|
||||
|
||||
# === REGISTRATION DOCUMENTS ===
|
||||
registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedély száma")
|
||||
registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedély érvényességi ideje")
|
||||
vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv száma")
|
||||
|
||||
# === INTERNATIONALIZATION (ÚJ) ===
|
||||
registration_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Regisztráció országa (ISO 3166-1 alpha-2, pl. 'HU', 'SK', 'DE')")
|
||||
first_domestic_registration_date: Optional[date] = Field(None, description="Első belföldi forgalomba helyezés dátuma")
|
||||
import_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Importország (ISO 3166-1 alpha-2), ha importált jármű")
|
||||
title_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szám (title document)")
|
||||
engine_number: Optional[str] = Field(None, max_length=100, description="Motorszám")
|
||||
number_of_previous_owners: Optional[int] = Field(None, ge=0, description="Előző tulajdonosok száma")
|
||||
|
||||
# === SALES MODULE ===
|
||||
is_for_sale: bool = Field(default=False)
|
||||
price: Optional[float] = None
|
||||
@@ -228,12 +241,53 @@ class AssetCreate(BaseModel):
|
||||
is_under_warranty: bool = Field(default=False, description="Érvényes jótállás")
|
||||
warranty_expiry_date: Optional[datetime] = Field(None, description="Jótállás érvényességi dátuma")
|
||||
|
||||
# === REGISTRATION DOCUMENTS ===
|
||||
registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedély száma")
|
||||
registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedély érvényességi ideje")
|
||||
vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv száma")
|
||||
|
||||
# === INTERNATIONALIZATION (ÚJ) ===
|
||||
registration_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Regisztráció országa (ISO 3166-1 alpha-2, pl. 'HU', 'SK', 'DE')")
|
||||
first_domestic_registration_date: Optional[date] = Field(None, description="Első belföldi forgalomba helyezés dátuma")
|
||||
import_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Importország (ISO 3166-1 alpha-2), ha importált jármű")
|
||||
title_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szám (title document)")
|
||||
engine_number: Optional[str] = Field(None, max_length=100, description="Motorszám")
|
||||
number_of_previous_owners: Optional[int] = Field(None, ge=0, description="Előző tulajdonosok száma")
|
||||
|
||||
# === PRIMARY VEHICLE FLAG ===
|
||||
is_primary: bool = Field(default=False, description="Elsődleges jármű (tárolva: individual_equipment JSONB)")
|
||||
|
||||
# === DATA STATUS (for transfer/duplicate scenarios) ===
|
||||
data_status: Optional[str] = Field(None, description="Adat státusz (pl. 'draft' tulajdonosváltáskor)")
|
||||
|
||||
# ── Internationalization validators ──
|
||||
@field_validator('registration_country', 'import_country')
|
||||
@classmethod
|
||||
def validate_iso_country(cls, v: Optional[str]) -> Optional[str]:
|
||||
"""registration_country és import_country: pontosan 2 karakteres nagybetűs string (ISO 3166-1 alpha-2)."""
|
||||
if v is None or not isinstance(v, str):
|
||||
return v
|
||||
cleaned = v.strip().upper()
|
||||
if len(cleaned) != 2:
|
||||
raise ValueError(f'Az országkódnak pontosan 2 karakter hosszúnak kell lennie (ISO 3166-1 alpha-2), kapott: "{v}"')
|
||||
return cleaned
|
||||
|
||||
@field_validator('number_of_previous_owners')
|
||||
@classmethod
|
||||
def validate_previous_owners(cls, v: Optional[int]) -> Optional[int]:
|
||||
"""number_of_previous_owners >= 0."""
|
||||
if v is not None and v < 0:
|
||||
raise ValueError('Az előző tulajdonosok száma nem lehet negatív')
|
||||
return v
|
||||
|
||||
@field_validator('first_domestic_registration_date')
|
||||
@classmethod
|
||||
def validate_not_future_date(cls, v: Optional[date]) -> Optional[date]:
|
||||
"""first_domestic_registration_date nem lehet jövőbeli dátum."""
|
||||
if v is not None and v > date.today():
|
||||
raise ValueError('Az első belföldi forgalomba helyezés dátuma nem lehet jövőbeli')
|
||||
return v
|
||||
|
||||
# === STATUS VALIDATION ===
|
||||
@validator('status', pre=True, always=True)
|
||||
def determine_status(cls, v, values):
|
||||
@@ -370,6 +424,47 @@ class AssetUpdate(BaseModel):
|
||||
is_under_warranty: Optional[bool] = Field(None, description="Érvényes jótállás")
|
||||
warranty_expiry_date: Optional[datetime] = Field(None, description="Jótállás érvényességi dátuma")
|
||||
|
||||
# === REGISTRATION DOCUMENTS ===
|
||||
registration_certificate_number: Optional[str] = Field(None, max_length=50, description="Forgalmi engedély száma")
|
||||
registration_certificate_validity: Optional[datetime] = Field(None, description="Forgalmi engedély érvényességi ideje")
|
||||
vehicle_registration_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv száma")
|
||||
|
||||
# === INTERNATIONALIZATION (ÚJ) ===
|
||||
registration_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Regisztráció országa (ISO 3166-1 alpha-2, pl. 'HU', 'SK', 'DE')")
|
||||
first_domestic_registration_date: Optional[date] = Field(None, description="Első belföldi forgalomba helyezés dátuma")
|
||||
import_country: Optional[str] = Field(None, min_length=2, max_length=2, description="Importország (ISO 3166-1 alpha-2), ha importált jármű")
|
||||
title_document_number: Optional[str] = Field(None, max_length=50, description="Törzskönyv szám (title document)")
|
||||
engine_number: Optional[str] = Field(None, max_length=100, description="Motorszám")
|
||||
number_of_previous_owners: Optional[int] = Field(None, ge=0, description="Előző tulajdonosok száma")
|
||||
|
||||
# ── Internationalization validators ──
|
||||
@field_validator('registration_country', 'import_country')
|
||||
@classmethod
|
||||
def validate_iso_country(cls, v: Optional[str]) -> Optional[str]:
|
||||
"""registration_country és import_country: pontosan 2 karakteres nagybetűs string (ISO 3166-1 alpha-2)."""
|
||||
if v is None or not isinstance(v, str):
|
||||
return v
|
||||
cleaned = v.strip().upper()
|
||||
if len(cleaned) != 2:
|
||||
raise ValueError(f'Az országkódnak pontosan 2 karakter hosszúnak kell lennie (ISO 3166-1 alpha-2), kapott: "{v}"')
|
||||
return cleaned
|
||||
|
||||
@field_validator('number_of_previous_owners')
|
||||
@classmethod
|
||||
def validate_previous_owners(cls, v: Optional[int]) -> Optional[int]:
|
||||
"""number_of_previous_owners >= 0."""
|
||||
if v is not None and v < 0:
|
||||
raise ValueError('Az előző tulajdonosok száma nem lehet negatív')
|
||||
return v
|
||||
|
||||
@field_validator('first_domestic_registration_date')
|
||||
@classmethod
|
||||
def validate_not_future_date(cls, v: Optional[date]) -> Optional[date]:
|
||||
"""first_domestic_registration_date nem lehet jövőbeli dátum."""
|
||||
if v is not None and v > date.today():
|
||||
raise ValueError('Az első belföldi forgalomba helyezés dátuma nem lehet jövőbeli')
|
||||
return v
|
||||
|
||||
# === STATUS ===
|
||||
current_mileage: Optional[int] = Field(None, ge=0, description="Aktuális km óra állás")
|
||||
is_primary: Optional[bool] = Field(None, description="Elsődleges jármű")
|
||||
|
||||
Reference in New Issue
Block a user