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

@@ -0,0 +1,149 @@
{% extends 'base.html' %}
{% block title %}Склад{% endblock %}
{% block content %}
<div class="container mt-5">
<div class="row mb-4">
<div class="col-12">
<h1 class="display-5">Управление складом</h1>
<p class="lead text-muted">Здесь будут инструменты для управления инвентаризацией и складским учетом</p>
</div>
</div>
<div class="row">
<!-- Основные операции -->
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-building"></i> Управление складами
</h5>
<p class="card-text text-muted">Создание и управление физическими складами</p>
<a href="{% url 'inventory:warehouse-list' %}" class="btn btn-outline-primary">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-arrow-down-square"></i> Приход товара
</h5>
<p class="card-text text-muted">Регистрация поступления товаров на склад</p>
<a href="{% url 'inventory:incoming-list' %}" class="btn btn-outline-primary">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-arrow-up-square"></i> Реализация товара
</h5>
<p class="card-text text-muted">Учет проданных товаров с применением FIFO</p>
<a href="{% url 'inventory:sale-list' %}" class="btn btn-outline-primary">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-clipboard-check"></i> Инвентаризация
</h5>
<p class="card-text text-muted">Проверка фактических остатков и корректировка</p>
<a href="{% url 'inventory:inventory-list' %}" class="btn btn-outline-primary">Перейти</a>
</div>
</div>
</div>
<!-- Дополнительные операции -->
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-x-circle"></i> Списание товара
</h5>
<p class="card-text text-muted">Списание брака, порчи, недостач</p>
<a href="{% url 'inventory:writeoff-list' %}" class="btn btn-outline-secondary">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-arrow-left-right"></i> Перемещение товара
</h5>
<p class="card-text text-muted">Перемещение между складами с сохранением партийности</p>
<a href="{% url 'inventory:transfer-list' %}" class="btn btn-outline-secondary">Перейти</a>
</div>
</div>
</div>
<!-- Справочная информация -->
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-box-seam"></i> Остатки товаров
</h5>
<p class="card-text text-muted">Просмотр текущих остатков по складам и товарам</p>
<a href="{% url 'inventory:stock-list' %}" class="btn btn-outline-info">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-diagram-3"></i> Партии товаров
</h5>
<p class="card-text text-muted">История партий и их распределение</p>
<a href="{% url 'inventory:batch-list' %}" class="btn btn-outline-info">Перейти</a>
</div>
</div>
</div>
<div class="col-md-6 mb-4">
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">
<i class="bi bi-journal-check"></i> Журнал операций
</h5>
<p class="card-text text-muted">Полный журнал всех складских движений</p>
<a href="{% url 'inventory:movement-list' %}" class="btn btn-outline-info">Перейти</a>
</div>
</div>
</div>
</div>
</div>
<style>
.card {
border: none;
border-radius: 8px;
transition: transform 0.2s, box-shadow 0.2s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.card-title {
font-weight: 600;
margin-bottom: 1rem;
}
.card-body {
padding: 1.5rem;
}
</style>
{% endblock %}