Files
raynet/app/models.py
T
JiriUhlir a5795fe344 2
2026-06-18 15:11:49 +02:00

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")