From: marina Date: Mon, 2 Dec 2024 08:05:20 +0000 (+0300) Subject: ERP-243 Действия по замене (II этап) X-Git-Tag: 1.7~216^2~1 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=0df26adbb052a5d9a4a7aa73f811d042002b3ed0;p=erp24_rep%2Fyii-erp24%2F.git ERP-243 Действия по замене (II этап) --- diff --git a/erp24/controllers/ShiftTransferController.php b/erp24/controllers/ShiftTransferController.php index aac5f768..0a108835 100644 --- a/erp24/controllers/ShiftTransferController.php +++ b/erp24/controllers/ShiftTransferController.php @@ -136,8 +136,7 @@ class ShiftTransferController extends Controller if ($action === 'accept') { $model = ShiftTransfer::findOne($id); - $model->setAttribute('status_id', ShiftTransfer::STATUS_ID_ACCEPTED); - $model->save(); + $model->updateAttributes(['status_id' => ShiftTransfer::STATUS_ID_ACCEPTED]); ShiftRemains::updateAll(['type' => ShiftRemains::ARCHIVE_RECORD], ['shift_transfer_id' => $id]); } elseif ($action === 'save') { EqualizationRemains::updateData(Yii::$app->request->post()['ShiftTransfer']['equalizationRemains'], $id); @@ -203,6 +202,7 @@ class ShiftTransferController extends Controller $shiftTransfer = ShiftTransfer::findOne($shiftTransferId); $storeId = array_flip(array_map('strval', CityStore::getAllActiveGuidId()))[$shiftTransfer->store_guid]; $productSelfCost = SelfCostProduct::findOne(['product_guid' => $productGuid, 'date' => $shiftTransfer->date, 'store_id' => $storeId]); + $balance = Balances::findOne(['store_id' => $shiftTransfer->store_guid, 'product_id' => $productGuid]); if (!$productPrice) { throw new \Exception('У данного товара нет цены либо замен!'); @@ -212,6 +212,7 @@ class ShiftTransferController extends Controller 'success' => true, 'product_price' => $productPrice->price, 'product_replacement_self_cost' => $productSelfCost->price, + 'maxQuantity' => $balance->quantity, ]; } catch (\Throwable $exception) { diff --git a/erp24/records/EqualizationRemains.php b/erp24/records/EqualizationRemains.php index 111755e5..90cd3c32 100644 --- a/erp24/records/EqualizationRemains.php +++ b/erp24/records/EqualizationRemains.php @@ -95,9 +95,13 @@ class EqualizationRemains extends \yii\db\ActiveRecord ]; } - public static function updateData(array $equalizationRemains, int $shift_id) { + public static function updateData($equalizationRemains, int $shift_id) { self::deleteAll(['shift_id' => $shift_id]); + if (!is_array($equalizationRemains) || empty($equalizationRemains)) { + return; + } + foreach ($equalizationRemains as $er) { $equalizationRemain = new EqualizationRemains(); $equalizationRemain->setAttributes([ diff --git a/erp24/views/shift-transfer/_replacement.php b/erp24/views/shift-transfer/_replacement.php index f69bda6f..55c9472a 100644 --- a/erp24/views/shift-transfer/_replacement.php +++ b/erp24/views/shift-transfer/_replacement.php @@ -29,7 +29,10 @@ if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIO 'title' => 'Заменяемый товар', 'type' => Select2::class, 'options' => [ - 'data' => $products, + 'data' => array_merge( + ['text' => 'Выберите товар'], + $products + ), 'pluginOptions' => [ 'allowClear' => true, ], @@ -38,9 +41,8 @@ if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIO ], ], 'value' => function ($model) { - return $model->product->name ?? ''; + return $model->product->id ?? ''; }, - ], [ 'name' => 'product_price', diff --git a/erp24/web/js/shift-transfer/replacement.js b/erp24/web/js/shift-transfer/replacement.js index f163af03..356ef7db 100644 --- a/erp24/web/js/shift-transfer/replacement.js +++ b/erp24/web/js/shift-transfer/replacement.js @@ -26,11 +26,13 @@ function setProductData() { data = JSON.parse(response); } catch (e) { alert('Ошибка при обработке данных'); + clearFields($this); // Очищаем поля при ошибке обработки return; } if (!data.success) { alert('Ошибка: ' + data.message); + clearFields($this); // Очищаем поля при ошибке, если success == false return; } @@ -53,22 +55,56 @@ function setProductData() { }, error: function() { alert('Ошибка запроса!'); + clearFields($this); // Очищаем поля в случае ошибки запроса }, complete: function() { - isRequestInProgress = false; // Снимаем флаг, когда запрос завершен + isRequestInProgress = false; + } + }); +} + +// Функция для очистки всех полей в строке +function clearFields($this) { + const index = $this.closest('tr').data('index'); + console.log('Clearing fields for index:', index); + + const fieldsToClear = [ + '#shifttransfer-equalizationremains-' + index + '-product_price', + '#shifttransfer-equalizationremains-' + index + '-product_self_cost', + '#shifttransfer-equalizationremains-' + index + '-product_replacement_id', + '#shifttransfer-equalizationremains-' + index + '-product_replacement_price', + '#shifttransfer-equalizationremains-' + index + '-product_replacement_self_cost', + '#shifttransfer-equalizationremains-' + index + '-product_replacement_count', + '#shifttransfer-equalizationremains-' + index + '-balance', + '#shifttransfer-equalizationremains-' + index + '-balance_self_cost' + ]; + + fieldsToClear.forEach(function(selector) { + const element = $(selector); + if (element.length) { + if (element.is('select')) { + // Для селектов очищаем и сбрасываем выбранное значение + element.empty().append('').val('').trigger('change'); + } else { + // Для остальных элементов очищаем значение + element.val(''); + } + console.log('Cleared field:', selector); + } else { + console.log('Element not found:', selector); } }); } function setReplacementPriceData() { - if (isRequestInProgressPrice) return; // Если запрос уже в процессе, выходим + if (isRequestInProgressPrice) return; - isRequestInProgressPrice = true; // Устанавливаем флаг запроса + isRequestInProgressPrice = true; const $this = $(this); const productGuid = $this.val(); const shiftTransferId = getUrlParameter('id'); - if (!productGuid) return; // Если productGuid не найден, выходим + if (!productGuid) return; $.ajax({ url: '/shift-transfer/get-product-replacement-price', @@ -91,6 +127,15 @@ function setReplacementPriceData() { const index = $this.closest('tr').data('index'); const priceInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_price'); const replacementSelfCostInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_self_cost'); + const balanceInput = $('#shifttransfer-equalizationremains-' + index + '-balance'); + const quantityInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_count'); + + // Получаем максимальное количество + const maxQuantity = data.maxQuantity; + + if (balanceInput.length) { + balanceInput.val(data.balance || 0).trigger('change'); + } if (priceInput.length) { priceInput.val(data.product_price).trigger('change'); @@ -99,17 +144,32 @@ function setReplacementPriceData() { if (replacementSelfCostInput.length) { replacementSelfCostInput.val(data.product_replacement_self_cost || '').trigger('change'); } + + if (quantityInput.length) { + // Устанавливаем атрибут max для поля ввода + quantityInput.attr('max', maxQuantity); + + // Обработчик события изменения значения в поле + quantityInput.on('input', function() { + let currentQuantity = parseFloat(quantityInput.val()) || 0; + + if (currentQuantity > maxQuantity) { + alert('Максимальное количество: ' + maxQuantity); + quantityInput.val(maxQuantity).trigger('change'); + } + }); + } }, error: function() { alert('Ошибка запроса!'); }, complete: function() { - isRequestInProgressPrice = false; // Снимаем флаг, когда запрос завершен + isRequestInProgressPrice = false; } }); } -$(document).on('input', '.list-cell__product_replacement_count input', function() { +$('.field-shifttransfer-equalizationremains').on('input', '.list-cell__product_replacement_count input', function() { const $this = $(this); const id = $this.attr('id'); const indexMatch = id.match(/shifttransfer-equalizationremains-(\d+)-/); @@ -121,8 +181,16 @@ $(document).on('input', '.list-cell__product_replacement_count input', function( const index = indexMatch[1]; const quantity = parseFloat($this.val()); - if (isNaN(quantity) || quantity < 0) { - alert('Введите корректное количество!'); + + const maxQuantity = parseFloat($this.data('max-quantity')); + + if (isNaN(quantity) || quantity === 0) { + return; + } + + if (quantity < 0) { + alert('Количество не может быть отрицательным!'); + $this.val(''); return; } @@ -136,9 +204,9 @@ $(document).on('input', '.list-cell__product_replacement_count input', function( return; } - const balance = (productPrice - productReplacementPrice) * quantity; + const balanceCalculation = (productPrice - productReplacementPrice) * quantity; const balanceSelfCost = (productSelfCost - productReplacementSelfCost) * quantity; - $('#shifttransfer-equalizationremains-' + index + '-balance').val(balance.toFixed(2)).trigger('change'); + $('#shifttransfer-equalizationremains-' + index + '-balance').val(balanceCalculation.toFixed(2)).trigger('change'); $('#shifttransfer-equalizationremains-' + index + '-balance_self_cost').val(balanceSelfCost.toFixed(2)).trigger('change'); });