feat: Реализовать систему поступления товаров с партиями (IncomingBatch)

Основные изменения:
- Создана модель IncomingBatch для группировки товаров по документам
- Каждое поступление (Incoming) связано с одной батчем поступления
- Автоматическое создание StockBatch для каждого товара в приходе
- Реализована система нумерации партий (IN-XXXX-XXXX) с поиском максимума в БД
- Обновлены все представления (views) для работы с новой архитектурой
- Добавлены детальные страницы просмотра партий поступлений
- Обновлены шаблоны для отображения информации о партиях и их товарах
- Исправлена логика сигналов для создания StockBatch при приходе товара
- Обновлены формы для работы с новой структурой IncomingBatch

Архитектура FIFO:
- IncomingBatch: одна партия поступления (номер IN-XXXX-XXXX)
- Incoming: товар в партии поступления
- StockBatch: одна партия товара на складе (создается для каждого товара)

Это позволяет системе правильно применять FIFO при продаже товаров.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-29 03:26:06 +03:00
parent 097d4ea304
commit 6735be9b08
73 changed files with 6536 additions and 122 deletions

View File

@@ -8,15 +8,19 @@ from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from . import views
urlpatterns = [
path('_nested_admin/', include('nested_admin.urls')), # Для nested admin
path('admin/', admin.site.urls), # Админка для владельца магазина (доступна на поддомене)
# TODO: Add web interface for shop owners
# path('', views.dashboard, name='dashboard'),
# path('products/', include('products.urls')),
# path('orders/', include('orders.urls')),
# path('customers/', include('customers.urls')),
# Web interface for shop owners
path('', views.index, name='index'), # Главная страница
path('accounts/', include('accounts.urls')), # Управление аккаунтом
path('products/', include('products.urls')), # Управление товарами
path('customers/', include('customers.urls')), # Управление клиентами
path('inventory/', include('inventory.urls')), # Управление складом
# path('orders/', include('orders.urls')), # TODO: Создать URL-конфиг для заказов
]
# Serve media files during development

View File

@@ -5,7 +5,6 @@ URL configuration for the PUBLIC schema (inventory.by domain).
This is the main domain where:
- Super admin can access admin panel
- Tenant registration is available
- Future: Landing page, etc.
"""
from django.contrib import admin
from django.urls import path, include
@@ -14,7 +13,7 @@ from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('tenants.urls')), # Подключаем роуты для регистрации тенантов
path('', include('tenants.urls')), # Роуты для регистрации тенантов (/, /register/, /register/success/)
]
# Serve media files in development