From 392471ff0669ab75d5c4ffff7b6aeae2e1343589 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Mon, 19 Jan 2026 12:13:05 +0300 Subject: [PATCH] =?UTF-8?q?fix(pos):=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=91=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=86=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=B8=D1=82=D1=80=D0=B8=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При создании витринного комплекта из корзины теперь учитываются изменённые цены товаров вместо оригинальных. --- myproject/pos/static/pos/css/terminal.css | 8 ++++++++ myproject/pos/static/pos/js/terminal.js | 22 ++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/myproject/pos/static/pos/css/terminal.css b/myproject/pos/static/pos/css/terminal.css index 9cf7691..ace3b06 100644 --- a/myproject/pos/static/pos/css/terminal.css +++ b/myproject/pos/static/pos/css/terminal.css @@ -32,6 +32,14 @@ body { flex-grow: 1; } +/* 3 колонки для товаров и категорий на экранах от 400px */ +@media (min-width: 400px) { + .col-custom-3 { + flex: 0 0 33.333%; + max-width: 33.333%; + } +} + /* 5 колонок для товаров и категорий на экранах от 1100px */ @media (min-width: 1100px) { .col-lg-custom-5 { diff --git a/myproject/pos/static/pos/js/terminal.js b/myproject/pos/static/pos/js/terminal.js index 21b9c83..b90bfb1 100644 --- a/myproject/pos/static/pos/js/terminal.js +++ b/myproject/pos/static/pos/js/terminal.js @@ -701,7 +701,7 @@ function renderCategories() { // Кнопка "Витрина" - первая в ряду const showcaseCol = document.createElement('div'); - showcaseCol.className = 'col-6 col-sm-4 col-md-3 col-lg-2'; + showcaseCol.className = 'col-6 col-custom-3 col-md-3 col-lg-2'; const showcaseCard = document.createElement('div'); showcaseCard.className = 'card category-card showcase-card' + (isShowcaseView ? ' active' : ''); showcaseCard.style.backgroundColor = '#fff3cd'; @@ -725,7 +725,7 @@ function renderCategories() { // Кнопка "Все" const allCol = document.createElement('div'); - allCol.className = 'col-6 col-sm-4 col-md-3 col-lg-2'; + allCol.className = 'col-6 col-custom-3 col-md-3 col-lg-2'; const allCard = document.createElement('div'); allCard.className = 'card category-card' + (currentCategoryId === null && !isShowcaseView ? ' active' : ''); allCard.onclick = async () => { @@ -749,7 +749,7 @@ function renderCategories() { // Категории CATEGORIES.forEach(cat => { const col = document.createElement('div'); - col.className = 'col-6 col-sm-4 col-md-3 col-lg-custom-5'; + col.className = 'col-6 col-custom-3 col-md-3 col-lg-custom-5'; const card = document.createElement('div'); card.className = 'card category-card' + (currentCategoryId === cat.id && !isShowcaseView ? ' active' : ''); @@ -804,7 +804,7 @@ function renderProducts() { filtered.forEach(item => { const col = document.createElement('div'); - col.className = 'col-6 col-sm-4 col-md-3 col-lg-custom-5'; + col.className = 'col-6 col-custom-3 col-md-3 col-lg-custom-5'; const card = document.createElement('div'); card.className = 'card product-card'; @@ -2205,6 +2205,14 @@ document.getElementById('confirmCreateTempKit').onclick = async () => { // Получаем количество букетов для создания const showcaseKitQuantity = parseInt(document.getElementById('showcaseKitQuantity').value, 10) || 1; + // Вычисляем итоговую цену комплекта на основе изменённых цен в корзине + let calculatedPrice = 0; + tempCart.forEach((item) => { + if (item.type === 'product') { + calculatedPrice += item.qty * item.price; + } + }); + // Формируем FormData для отправки с файлом const formData = new FormData(); formData.append('kit_name', kitName); @@ -2216,8 +2224,10 @@ document.getElementById('confirmCreateTempKit').onclick = async () => { formData.append('items', JSON.stringify(items)); formData.append('price_adjustment_type', priceAdjustmentType); formData.append('price_adjustment_value', priceAdjustmentValue); - if (useSalePrice && salePrice > 0) { - formData.append('sale_price', salePrice); + // Если пользователь не задал свою цену, используем вычисленную + const finalSalePrice = useSalePrice ? salePrice : calculatedPrice; + if (finalSalePrice > 0) { + formData.append('sale_price', finalSalePrice); } // Фото: для редактирования проверяем, удалено ли оно