Перейти к содержанию

Дополнительные услуги к товарам

Подсистема позволяет посреднику оказывать клиенту доп. услуги по конкретным позициям заказа — например, фото/видео товара, обмер, пересчёт — с загрузкой медиа и тарификацией.

Каталог услуг

Таблица Назначение
services Каталог услуг: code (photo/video/measure/recount), name + name_i18n, icon, media_kind (photo/video/none). agent_id=NULL — системная, иначе своя
agent_service_settings Подключение услуги посредником: enabled, mode (free/paid)
agent_service_prices Цена услуги по валюте заказа (currency + price)

Управление каталогом услуг — в админке (ServiceResource), подключение и цены — в настройках посредника (вкладка услуг, settings.services).

Услуга на позиции заказа

flowchart LR
    A[Клиент/посредник заказывает услугу] --> B[order_item_services: ordered]
    B --> C[Загрузка медиа: десктоп или /su/токен с телефона]
    C --> D[Посредник оказывает: rendered]
    B -.отмена.-> E[canceled]
  • order_item_services — заказанная услуга на позиции: status (ordered/rendered/canceled), qty, free, unit_price + currency (снимок цены), paid_amount, comment, rendered_at/rendered_by, canceled_at.
  • Действия: AddItemService / CancelItemService. Тарификация — ItemServiceBilling. Презентация — ItemServicePresenter.
  • UI: Components/Orders/{OrderServicesPanel,ItemServicesMenu,ServiceRenderModal}.vue в карточке заказа.

Медиа услуг

  • service_media — файлы услуги: привязка к order_item_service_id или к order_item_id (флаг extra_photo — «доп. фото» посредника вне услуги); kind (photo/video), path/url, hidden_from_client, uploaded_via (desktop/phone).
  • service_upload_tokens — одноразовые токены публичной загрузки: token, привязка к услуге/позиции, kind, expires_at.

Загрузка с телефона (публичный аплоад)

Чтобы сфотографировать товар телефоном, генерируется токен и QR на /su/{token} (вне авторизации):

Маршрут Назначение
GET /su/{token} Страница загрузки (по токену)
GET /su/{token}/list Список уже загруженных файлов
POST /su/{token}/file Загрузка файла
POST /su/{token}/media/{media}/delete Удаление файла

Сервис ServiceMediaService + PublicUploadController. На стороне посредника — ServiceRenderController (оказание услуги, загрузка/скрытие/удаление медиа, «доп. фото» позиции).

Валюта услуги = валюта заказа

Цена услуги фиксируется в валюте заказа на момент заказа (unit_price/currency), что согласуется с мультивалютным расчётом (см. Финансы).