Исходный код cdek.apps.models.intakes
from __future__ import annotations
from datetime import date as Date
from typing import Any
from uuid import UUID
from pydantic import BaseModel, Field, field_serializer
from .contact import Contact
from .location import Address, City, Coordinates, Country, Region, Zip
[документация]
class IntakeLocation(City, Country, Region, Coordinates, Zip, Address):
address: str = Field(..., description="Строка адреса")
region: str | None = Field(None, description="Название региона") # type: ignore
city: str | None = Field(None, description="Название населенного пункта") # type: ignore
city_uuid: str | None = Field(
None, description="Уникальный идентификатор населенного пункта"
) # type: ignore
[документация]
class Intakes(BaseModel):
cdek_number: str | None = Field(None, description="Номер заказа СДЭК")
order_uuid: UUID | None = Field(None, description="Идентификатор заказа")
intake_date: Date = Field(..., description="Дата заявки на вызов курьера")
intake_time_from: str = Field(
..., description="Время начала заявки на вызов курьера"
)
intake_time_to: str = Field(
..., description="Время окончания заявки на вызов курьера"
)
lunch_time_from: str = Field(..., description="Время начала обеда")
lunch_time_to: str = Field(..., description="Время окончания обеда")
name: str | None = Field(None, description="Имя заказчика")
weight: int | None = Field(None, description="Вес заявки")
length: int | None = Field(None, description="Длина заявки")
width: int | None = Field(None, description="Ширина заявки")
height: int | None = Field(None, description="Высота заявки")
comment: str | None = Field(None, description="Комментарий к заявке")
courier_power_of_attorney: bool | None = Field(
None, description="Нужно ли вызывать курьера"
)
courier_identity_card: bool | None = Field(
None, description="Нужно ли вызывать курьера"
)
sender: Contact | None = Field(None, description="Контакт заказчика")
from_location: IntakeLocation | None = Field(None, description="Населённый пункт")
need_call: bool = Field(False, description="Необходим прозвон получателя")
[документация]
@field_serializer("intake_date")
def serialize_intake_date(self, intake_date: Date) -> str:
"""Представить дату забора в формате YYYY-MM-DD"""
return intake_date.strftime("%Y-%m-%d")
[документация]
def from_location_init(self, **kwargs: Any) -> IntakeLocation:
"""Создать объект адреса забора по переданным параметрам"""
return IntakeLocation(**kwargs)
[документация]
def sender_init(self, **kwargs: Any) -> Contact:
"""Создать объект контакта заказчика"""
return Contact(**kwargs)
[документация]
def set_sender(self, sender: Contact) -> Intakes:
"""Установить контактные данные заказчика"""
self.sender = sender
return self
[документация]
def set_from_location(self, location: IntakeLocation) -> Intakes:
"""Указать место забора"""
self.from_location = location
return self