Files
octopus/myproject/SKU_SYSTEM_README.md

8.1 KiB
Raw Blame History

Система генерации артикулов (SKU)

Обзор

Новая система генерации артикулов создана для того, чтобы артикулы были легко озвучиваемыми по телефону и имели логическую структуру.

Структура артикулов

Товары (Product)

Формат: PROD-XXXXXX или PROD-XXXXXX-VARIANT

  • PROD - префикс для всех товаров
  • XXXXXX - 6-значный номер (000001-999999)
  • VARIANT - опциональный суффикс варианта (размер, цвет и т.д.)

Примеры:

  • PROD-000001 - простой товар без варианта
  • PROD-000002-50 - товар с вариантом "50" (например, 50см)
  • PROD-000003-M - товар с вариантом "M" (размер M)
  • PROD-000004-RED - товар с вариантом "RED" (красный цвет)

Комплекты (ProductKit)

Формат: KIT-XXXXXX

  • KIT - префикс для всех комплектов/букетов
  • XXXXXX - 6-значный номер (000001-999999)

Примеры:

  • KIT-000001 - Букет "Романтика"
  • KIT-000002 - Букет "Весна"

Автоматическое извлечение суффиксов

Система автоматически извлекает суффиксы из названия товара:

Название товара Извлеченный суффикс Артикул
"Роза Freedom 50см" 50 PROD-000001-50
"Роза Freedom 60 см" 60 PROD-000002-60
"Лента 2.5м" 25 PROD-000003-25
"Коробка S" S PROD-000004-S
"Коробка размер M" M PROD-000005-M

Ручное указание суффикса

Вы можете вручную указать суффикс в поле variant_suffix при создании товара. Это переопределит автоматическое извлечение.

Пример:

product = Product(
    name="Лента атласная красная",
    variant_suffix="RED"  # Ручной суффикс
)
product.save()
# Артикул: PROD-000006-RED

Глобальные счетчики (SKUCounter)

Система использует два глобальных счетчика:

  1. Product Counter - для товаров (Product)
  2. Kit Counter - для комплектов (ProductKit)

Счетчики автоматически увеличиваются при создании нового товара/комплекта.

Просмотр счетчиков в админке

Зайдите в Django Admin → SKU Counters, чтобы увидеть текущие значения счетчиков и предпросмотр следующего артикула.

Обеспечение уникальности

Если артикул уже существует (например, при ручном создании), система автоматически добавит буквенный суффикс:

PROD-000001 уже существует
→ PROD-000001A
→ PROD-000001B (если A тоже занято)
→ ... до PROD-000001Z

Преимущества новой системы

Легко озвучить: "PROD тире ноль ноль ноль один тире пятьдесят" Короткие артикулы: 11-14 символов вместо 12 (MD5) Логичная структура: Понятно, что PROD = товар, KIT = комплект Масштабируемость: До 999,999 товаров и 999,999 комплектов Стабильность: Артикул не зависит от категории - можно менять категорию Автоматизация: Суффиксы извлекаются автоматически из названия

Обратная совместимость

Старые товары с MD5-хешами (например, PRODA41C9EC1) остаются нетронутыми.

Новая система применяется только к новым товарам, созданным после миграции.

Использование

Создание товара без варианта

product = Product(
    name="Роза красная",
    category=category,
    cost_price=100,
    sale_price=200
)
product.save()
# Артикул: PROD-000001

Создание товара с автопарсингом суффикса

product = Product(
    name="Роза Freedom 50см",  # "50см" будет автоматически извлечено
    category=category,
    cost_price=150,
    sale_price=300
)
product.save()
# Артикул: PROD-000002-50
# variant_suffix: "50"

Создание товара с ручным суффиксом

product = Product(
    name="Лента атласная красная",
    category=category,
    cost_price=20,
    sale_price=40,
    variant_suffix="RED"  # Ручной суффикс
)
product.save()
# Артикул: PROD-000003-RED

Создание комплекта

kit = ProductKit(
    name="Букет Романтика",
    slug="buket-romantika",
    pricing_method='fixed',
    fixed_price=1500
)
kit.save()
# Артикул: KIT-000001

Технические детали

Модели

  • SKUCounter - хранит глобальные счетчики для товаров и комплектов
  • Product.variant_suffix - новое поле для хранения суффикса варианта

Утилиты

Файл: products/utils/sku_generator.py

Функции:

  • parse_variant_suffix(name) - извлекает суффикс из названия
  • ensure_sku_unique(base_sku, exclude_id) - обеспечивает уникальность артикула
  • generate_product_sku(product) - генерирует артикул для товара
  • generate_kit_sku() - генерирует артикул для комплекта

Миграции

  • 0007_skucounter_product_variant_suffix.py - создание модели SKUCounter и добавление поля variant_suffix

Тестирование

Запустите тестовый скрипт для проверки генерации артикулов:

python test_sku_generation.py

Скрипт создаст несколько тестовых товаров и комплектов с разными типами артикулов.

FAQ

Q: Что если я изменю название товара после создания? A: Артикул НЕ изменится. Артикул генерируется только один раз при создании товара.

Q: Можно ли изменить категорию товара? A: Да! Артикул не зависит от категории, поэтому вы можете свободно менять категорию.

Q: Что делать, если суффикс извлекся неправильно? A: Вы можете вручную изменить поле variant_suffix в админке и пересохранить товар (но артикул уже не изменится).

Q: Можно ли вручную задать артикул? A: Да, вы можете вручную задать артикул в поле sku. Система проверит уникальность.

Q: Как сбросить счетчики? A: Не рекомендуется! Но если необходимо, измените значение в Django Admin → SKU Counters.

Поддержка

При возникновении проблем или вопросов обратитесь к разработчикам проекта.