Files
public/premium_client/TECHNICAL.md

8.9 KiB
Raw Permalink Blame History

Премиум (витрина сервисов)

name: premium_client version: 19.0.1.0.0 author: MK.Lab depends: base, web

Архитектура

Модуль состоит из двух моделей и минимального набора представлений. Не содержит внешних зависимостей, кроме стандартной библиотеки requests.

premium_client
├── premium.service         — карточка сервиса (каталог)
├── premium.order.wizard    — форма заявки (временная, удаляется после отправки)
└── res.config.settings     — расширение: поля настроек API

Модели

premium.service — Карточка сервиса

Файл: models/premium_service.py

Хранит информацию об одном сервисе в витрине. Сортируется по полю sequence, затем по имени.

Поле Тип Описание
name Char (required, translate) Название сервиса
sequence Integer (default: 10) Порядок отображения в канбане
category Selection (required) Категория: services, bank, wms, marketplace, industry, other
short_description Text (translate) Краткий текст на карточке канбана
description Html (sanitize, translate) Полное описание на странице сервиса
author_url Char Ссылка на автора или страницу сервиса
image Image (max 1024×768) Изображение сервиса

Права доступа

Создание, изменение и удаление карточек доступно только администраторам (base.group_system). Обычные пользователи могут только просматривать. Проверка выполняется в переопределённых методах create(), write() и unlink() — при попытке нарушить правило срабатывает ошибка AccessError.

Методы

action_open_form() — открывает форму карточки сервиса. Вызывается по кнопке «Подробнее» в канбане.

action_open_order_wizard() — открывает визард заявки в диалоговом окне. В контекст передаётся default_service_id, чтобы визард знал какой сервис заказывается.


premium.order.wizard — Форма заявки

Файл: wizard/premium_order_wizard.py

Временная модель (TransientModel) — запись существует только пока пользователь заполняет форму и удаляется после отправки. Предзаполняется данными текущей компании и пользователя.

Поле Тип Описание
service_id Many2one → premium.service (required) Сервис, на который подаётся заявка
company_name Char (required) Название компании
inn Char ИНН (10 или 12 цифр)
email Char (required) Email для связи
phone_telegram Char Телефон или Telegram
contact_person Char Имя контактного лица

Предзаполнение (default_get)

При открытии визарда поля заполняются автоматически:

  • company_nameenv.company.name
  • innenv.company.vat
  • emailenv.company.email или env.user.email
  • phone_telegramenv.company.phone или env.company.mobile
  • contact_personenv.user.name

Валидация

Проверки выполняются как при изменении поля (@api.onchange — показывает предупреждение), так и при сохранении (@api.constrains — блокирует отправку):

Поле Правило
email Соответствие шаблону *@*.*
inn Только цифры, длина 10 или 12 символов

Метод action_submit() — отправка заявки

Выполняет POST-запрос во внешний API. Последовательность шагов:

  1. Проверяет заполненность обязательных полей
  2. Читает URL и токен из системных параметров (premium.project_api_url, premium.project_api_token)
  3. Если URL не оканчивается на /newlead/ — добавляет этот суффикс автоматически
  4. Формирует заголовки: Content-Type: application/json и X-API-Key: {токен} (если токен задан)
  5. Отправляет запрос с повторными попытками — 3 попытки с паузой 3 секунды между ними
  6. Считает успехом ответ со статусом 200 или 201 и полем "ok": true в теле
  7. При неудаче всех трёх попыток показывает сообщение с просьбой написать на info@inf-centre.ru

Состав отправляемых данных (_build_payload):

Поле Источник
service_id, service_name Карточка сервиса
service_category, service_author_url Карточка сервиса
service_description HTML-описание сервиса
company_name, inn, email Форма заявки
phone, contact_name Форма заявки
source_db Техническое имя базы данных Odoo

res.config.settings — Расширение настроек

Файл: models/res_config_settings.py

Добавляет два поля в стандартную форму Настроек Odoo. Значения хранятся как системные параметры (ir.config_parameter).

Поле Параметр Описание
premium_project_api_url premium.project_api_url URL внешнего API для приёма заявок
premium_project_api_token premium.project_api_token Токен авторизации (передаётся в заголовке X-API-Key)

При установке модуля оба параметра создаются с заглушечными значениями (noupdate="1") — их нужно заменить реальными в Настройках.


Представления и меню

Структура меню

Премиум  (sequence=20)
└── Сервисы  → action_premium_services
              Режимы: kanban (по умолчанию), list, form
              Группировка по умолчанию: category

Канбан-карточка

Каждая карточка показывает: название (по центру), изображение (слева), краткое описание (справа), кнопку «Подробнее». При клике на карточку открывается форма.

Форма сервиса

Содержит: название, изображение, категорию, ссылку на автора, HTML-описание на вкладке, кнопку «Заказать».

Форма заявки (визард)

Диалоговое окно с полями компании. Кнопки: «Отправить» (primary) и «Отмена».


Предустановленные данные

Файл: data/premium_service_data.xml (noupdate="1")

При установке создаются 6 карточек-примеров по одной на каждую категорию: Интеграция 1С, Эквайринг в Odoo, WMS модуль, Интеграции с маркетплейсами, Отраслевые решения, Прочие доработки. Карточки не перезаписываются при обновлении модуля.


Безопасность

Файл: security/ir.model.access.csv

Все авторизованные пользователи (base.group_user) имеют право на чтение карточек сервисов и работу с визардом. Создание, редактирование и удаление карточек ограничено только для группы base.group_system.