Основные изменения: - Создана модель 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>
97 lines
4.2 KiB
HTML
97 lines
4.2 KiB
HTML
{% extends 'base.html' %}
|
|
|
|
{% block title %}{% block inventory_title %}Склад{% endblock %}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid mt-4">
|
|
<div class="row">
|
|
<!-- Боковая панель навигации -->
|
|
<div class="col-md-3 mb-4">
|
|
<div class="card">
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="mb-0">Управление складом</h5>
|
|
</div>
|
|
<div class="list-group list-group-flush">
|
|
<a href="{% url 'inventory:inventory-home' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-house-door"></i> Главная
|
|
</a>
|
|
<a href="{% url 'inventory:warehouse-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-building"></i> Склады
|
|
</a>
|
|
<a href="{% url 'inventory:incoming-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-arrow-down-square"></i> Приходы
|
|
</a>
|
|
<a href="{% url 'inventory:incoming-create' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-file-earmark-plus"></i> Поступление товара
|
|
</a>
|
|
<a href="{% url 'inventory:incoming-batch-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-diagram-3-fill"></i> Партии поступлений
|
|
</a>
|
|
<a href="{% url 'inventory:sale-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-arrow-up-square"></i> Продажи
|
|
</a>
|
|
<a href="{% url 'inventory:inventory-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-clipboard-check"></i> Инвентаризация
|
|
</a>
|
|
<a href="{% url 'inventory:writeoff-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-x-circle"></i> Списания
|
|
</a>
|
|
<a href="{% url 'inventory:transfer-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-arrow-left-right"></i> Перемещения
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Справочная информация -->
|
|
<div class="card mt-3">
|
|
<div class="card-header bg-info text-white">
|
|
<h5 class="mb-0">Справочная информация</h5>
|
|
</div>
|
|
<div class="list-group list-group-flush">
|
|
<a href="{% url 'inventory:stock-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-box-seam"></i> Остатки
|
|
</a>
|
|
<a href="{% url 'inventory:batch-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-diagram-3"></i> Партии
|
|
</a>
|
|
<a href="{% url 'inventory:movement-list' %}" class="list-group-item list-group-item-action">
|
|
<i class="bi bi-journal-check"></i> Журнал
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Основной контент -->
|
|
<div class="col-md-9">
|
|
{% block inventory_content %}{% endblock %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.list-group-item {
|
|
border-left: 4px solid transparent;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.list-group-item:hover {
|
|
border-left-color: #007bff;
|
|
background-color: #f8f9fa;
|
|
}
|
|
|
|
.list-group-item.active {
|
|
border-left-color: #007bff;
|
|
background-color: #e7f1ff;
|
|
}
|
|
|
|
.card {
|
|
border: none;
|
|
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
|
|
}
|
|
|
|
.card-header {
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
|
|
}
|
|
</style>
|
|
{% endblock %}
|