106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
"""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")
|