"""Pydantic modely pro RAYNET endpointy. Modely odpovídají RAYNET CRM API v2 (CompanyInsertDto). Slouží zároveň jako zdroj pro Swagger/OpenAPI dokumentaci. """ from enum import Enum from typing import Optional from pydantic import BaseModel, Field class Rating(str, Enum): A = "A" B = "B" C = "C" class CompanyState(str, Enum): A_POTENTIAL = "A_POTENTIAL" B_ACTUAL = "B_ACTUAL" C_DEFERRED = "C_DEFERRED" D_UNATTRACTIVE = "D_UNATTRACTIVE" class CompanyRole(str, Enum): A_SUBSCRIBER = "A_SUBSCRIBER" B_PARTNER = "B_PARTNER" C_SUPPLIER = "C_SUPPLIER" D_RIVAL = "D_RIVAL" class TaxPayer(str, Enum): YES = "YES" NO = "NO" class Address(BaseModel): name: Optional[str] = Field(default=None, examples=["Sídlo klienta"]) street: Optional[str] = Field(default=None, examples=["Francouzská 6167/5"]) city: Optional[str] = Field(default=None, examples=["Ostrava"]) province: Optional[str] = Field(default=None, examples=["Morava"]) zipCode: Optional[str] = Field(default=None, examples=["708 00"]) country: Optional[str] = Field(default=None, examples=["CZ"]) lat: Optional[float] = None lng: Optional[float] = None class ContactInfo(BaseModel): email: Optional[str] = Field(default=None, examples=["info@raynet.cz"]) email2: Optional[str] = None fax: Optional[str] = None tel1: Optional[str] = Field(default=None, examples=["+420 553 401 520"]) tel1Type: Optional[str] = Field(default=None, examples=["recepce"]) tel2: Optional[str] = None tel2Type: Optional[str] = None www: Optional[str] = Field(default=None, examples=["www.raynet.cz"]) doNotSendMM: Optional[bool] = None otherContact: Optional[str] = None class CompanyAddress(BaseModel): address: Optional[Address] = None contactInfo: Optional[ContactInfo] = None class CompanyData(BaseModel): """Tělo požadavku pro vytvoření firmy (CompanyInsertDto). Povinná pole: ``name``, ``rating``, ``state``, ``role``. """ # Povinná pole name: str = Field(..., examples=["ACME s.r.o."]) rating: Rating = Field(..., examples=[Rating.A]) state: CompanyState = Field(..., examples=[CompanyState.A_POTENTIAL]) role: CompanyRole = Field(..., examples=[CompanyRole.A_SUBSCRIBER]) # Volitelná pole regNumber: Optional[str] = Field(default=None, examples=["12345678"]) taxNumber: Optional[str] = Field(default=None, examples=["CZ12345678"]) taxNumber2: Optional[str] = None taxPayer: Optional[TaxPayer] = None bankAccount: Optional[str] = None notice: Optional[str] = None owner: Optional[int] = Field(default=None, description="ID vlastníka (uživatele)") category: Optional[int] = None contactSource: Optional[int] = None employeesNumber: Optional[int] = None legalForm: Optional[int] = None paymentTerm: Optional[int] = None turnover: Optional[int] = None territory: Optional[int] = None addresses: Optional[list[CompanyAddress]] = None tags: Optional[list[str]] = None customFields: Optional[dict] = None # Umožní i pole, která zde nejsou explicitně vyjmenovaná (RAYNET jich má víc). model_config = {"extra": "allow"} class CreateCompanyResponse(BaseModel): id: Optional[int] = Field(default=None, description="ID nově vytvořené firmy") success: bool = True raw: Optional[dict] = Field(default=None, description="Surová odpověď RAYNET API")