Добавлено отображение остатков и резервов в карточках товаров POS
- Аннотация товаров остатками (available_qty) и резервами (reserved_qty) через Subquery - Компактный формат отображения: X(−Y) где X - доступно, Y - зарезервировано - Визуальная стилизация: крупное число для остатков, мелкое для резервов - Цветовая индикация: зелёный (≥5), жёлтый (<5), красный (≤0) - Без дополнительных SQL-запросов, оптимизировано через подзапросы
This commit is contained in:
@@ -173,7 +173,43 @@ function renderProducts() {
|
||||
stock.textContent = `🌺 ${item.showcase_name}`;
|
||||
stock.style.color = '#856404';
|
||||
stock.style.fontWeight = 'bold';
|
||||
} else if (item.type === 'product' && item.available_qty !== undefined && item.reserved_qty !== undefined) {
|
||||
// Для обычных товаров показываем остатки: X(-Y)
|
||||
const available = parseFloat(item.available_qty) || 0;
|
||||
const reserved = parseFloat(item.reserved_qty) || 0;
|
||||
const free = available - reserved;
|
||||
|
||||
// Создаём элементы для стилизации разных размеров
|
||||
const availableSpan = document.createElement('span');
|
||||
availableSpan.textContent = available;
|
||||
availableSpan.style.fontSize = '1.1em';
|
||||
availableSpan.style.fontWeight = 'bold';
|
||||
availableSpan.style.fontStyle = 'normal';
|
||||
|
||||
// Отображаем резерв только если он есть
|
||||
if (reserved > 0) {
|
||||
const reservedSpan = document.createElement('span');
|
||||
reservedSpan.textContent = `(−${reserved})`;
|
||||
reservedSpan.style.fontSize = '0.85em';
|
||||
reservedSpan.style.marginLeft = '3px';
|
||||
reservedSpan.style.fontStyle = 'normal';
|
||||
|
||||
stock.appendChild(availableSpan);
|
||||
stock.appendChild(reservedSpan);
|
||||
} else {
|
||||
stock.appendChild(availableSpan);
|
||||
}
|
||||
|
||||
// Цветовая индикация: красный если свободных остатков нет или отрицательные
|
||||
if (free <= 0) {
|
||||
stock.style.color = '#dc3545'; // Красный
|
||||
} else if (free < 5) {
|
||||
stock.style.color = '#ffc107'; // Жёлтый (мало остатков)
|
||||
} else {
|
||||
stock.style.color = '#28a745'; // Зелёный (достаточно)
|
||||
}
|
||||
} else {
|
||||
// Fallback для старых данных или комплектов
|
||||
stock.textContent = item.in_stock ? 'В наличии' : 'Под заказ';
|
||||
if (!item.in_stock) {
|
||||
stock.style.color = '#dc3545';
|
||||
|
||||
Reference in New Issue
Block a user