Исправлена логика продажи витринных комплектов через POS

- Добавлена специальная обработка витринных комплектов в сигнале update_reservation_on_item_change:
  * При создании OrderItem с витринным комплектом привязываются существующие витринные резервы компонентов
  * Не создаются новые резервы на уровне комплекта

- Исправлена логика создания Sale для комплектов в сигнале create_sale_on_order_completion:
  * Для комплектов (витринных и обычных) создаются Sale для каждого компонента через резервы
  * Используется FIFO-списание для компонентов
  * Предотвращена ошибка передачи ProductKit в поле Reservation.product

Fixes: Cannot assign ProductKit to Reservation.product field
Fixes: Не удалось создать Sale для заказа с витринным комплектом
This commit is contained in:
2025-12-08 17:56:47 +03:00
parent 0fe888e405
commit 3ef2a19537
6 changed files with 157 additions and 26 deletions

View File

@@ -288,8 +288,12 @@ class TenantRegistrationAdmin(admin.ModelAdmin):
)
logger.info(f"Тенант создан: {client.id}")
# Создаем домен (для локальной разработки используем localhost)
domain_name = f"{registration.schema_name}.localhost"
# Создаем домен (динамически определяется из настроек)
# Локально: schema_name.localhost:8000
# Продакшен: schema_name.mix.smaa.by
from django.conf import settings
domain_base = settings.TENANT_DOMAIN_BASE
domain_name = f"{registration.schema_name}.{domain_base}"
logger.info(f"Создание домена: {domain_name}")
domain = Domain.objects.create(
domain=domain_name,

View File

@@ -21,10 +21,17 @@ def send_password_setup_email(registration):
registration.password_setup_token = uuid.uuid4()
registration.password_setup_token_created_at = timezone.now()
# Построить URL
# В продакшене это будет полный URL с доменом
setup_url = f"http://localhost:8000/accounts/setup-password/{registration.password_setup_token}/"
tenant_url = f"http://{registration.schema_name}.localhost:8000/"
# Построить URL динамически в зависимости от окружения
# Локально: http://localhost:8000
# Продакшен: https://mix.smaa.by
protocol = 'https' if settings.USE_HTTPS else 'http'
domain_base = settings.TENANT_DOMAIN_BASE # localhost:8000 или mix.smaa.by
# URL для установки пароля (главный домен)
setup_url = f"{protocol}://{domain_base}/accounts/setup-password/{registration.password_setup_token}/"
# URL тенанта (поддомен)
tenant_url = f"{protocol}://{registration.schema_name}.{domain_base}/"
# Составить письмо
subject = f"Ваш магазин {registration.shop_name} активирован!"