From: marina Date: Mon, 2 Dec 2024 06:12:40 +0000 (+0300) Subject: ERP-243 Действия по замене (II этап) X-Git-Tag: 1.7~216^2~6 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=1fc198907c1938ae43be3e82307f8321a87e0d22;p=erp24_rep%2Fyii-erp24%2F.git ERP-243 Действия по замене (II этап) --- diff --git a/erp24/views/shift-transfer/_replacement.php b/erp24/views/shift-transfer/_replacement.php index 8cf258b2..d9cf7bbc 100644 --- a/erp24/views/shift-transfer/_replacement.php +++ b/erp24/views/shift-transfer/_replacement.php @@ -15,6 +15,8 @@ use yii\widgets\ActiveForm; /* @var $isAcceptance bool */ /* @var $products array */ +$this->registerJsFile('/js/shift-transfer/replacement.js', ['position' => \yii\web\View::POS_END]); + $form = \yii\widgets\ActiveForm::begin(); if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIONS, ShiftTransfer::STATUS_ID_INPUT_FACT_REMAINS]) && Yii::$app->user->id === $shiftTransfer->end_shift_admin_id) { diff --git a/erp24/web/js/shift-transfer/equalization-remains.js b/erp24/web/js/shift-transfer/equalization-remains.js deleted file mode 100644 index f163af03..00000000 --- a/erp24/web/js/shift-transfer/equalization-remains.js +++ /dev/null @@ -1,144 +0,0 @@ -let isRequestInProgress = false; -let isRequestInProgressQuantity = false; -let isRequestInProgressPrice = false; - -function getUrlParameter(name) { - return new URLSearchParams(window.location.search).get(name); -} - -function setProductData() { - if (isRequestInProgress) return; // Если запрос уже в процессе, выходим - - isRequestInProgress = true; // Устанавливаем флаг запроса - const $this = $(this); - const productGuid = $this.closest('tr').find('select').val(); - const shiftTransferId = getUrlParameter('id'); - - if (!productGuid) return; // Если productGuid не найден, выходим - - $.ajax({ - url: '/shift-transfer/get-product-data', - type: 'GET', - data: { productGuid, shiftTransferId }, - success: function(response) { - let data; - try { - data = JSON.parse(response); - } catch (e) { - alert('Ошибка при обработке данных'); - return; - } - - if (!data.success) { - alert('Ошибка: ' + data.message); - return; - } - - const index = $this.closest('tr').data('index'); - $('#shifttransfer-equalizationremains-' + index + '-product_price').val(data.product_price); - - const replacementSelect = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_id'); - replacementSelect.empty().append(''); - - Object.entries(data.product_replacement || {}).forEach(([id, name]) => { - replacementSelect.append(``); - }); - - replacementSelect.css({ visibility: 'visible', height: 'auto', width: '100%' }) - .trigger('change') - .val(replacementSelect.val() || replacementSelect.find('option').first().val()) - .trigger('change'); - - $('#shifttransfer-equalizationremains-' + index + '-product_self_cost').val(data.product_self_cost || ''); - }, - error: function() { - alert('Ошибка запроса!'); - }, - complete: function() { - isRequestInProgress = false; // Снимаем флаг, когда запрос завершен - } - }); -} - -function setReplacementPriceData() { - if (isRequestInProgressPrice) return; // Если запрос уже в процессе, выходим - - isRequestInProgressPrice = true; // Устанавливаем флаг запроса - const $this = $(this); - const productGuid = $this.val(); - const shiftTransferId = getUrlParameter('id'); - - if (!productGuid) return; // Если productGuid не найден, выходим - - $.ajax({ - url: '/shift-transfer/get-product-replacement-price', - type: 'GET', - data: { productGuid, shiftTransferId }, - success: function(response) { - let data; - try { - data = JSON.parse(response); - } catch (e) { - alert('Ошибка при обработке данных'); - return; - } - - if (!data.success) { - alert('Ошибка: ' + data.message); - return; - } - - const index = $this.closest('tr').data('index'); - const priceInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_price'); - const replacementSelfCostInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_self_cost'); - - if (priceInput.length) { - priceInput.val(data.product_price).trigger('change'); - } - - if (replacementSelfCostInput.length) { - replacementSelfCostInput.val(data.product_replacement_self_cost || '').trigger('change'); - } - }, - error: function() { - alert('Ошибка запроса!'); - }, - complete: function() { - isRequestInProgressPrice = false; // Снимаем флаг, когда запрос завершен - } - }); -} - -$(document).on('input', '.list-cell__product_replacement_count input', function() { - const $this = $(this); - const id = $this.attr('id'); - const indexMatch = id.match(/shifttransfer-equalizationremains-(\d+)-/); - - if (!indexMatch) { - alert('Ошибка: Невозможно извлечь индекс из ID'); - return; - } - - const index = indexMatch[1]; - const quantity = parseFloat($this.val()); - if (isNaN(quantity) || quantity < 0) { - alert('Введите корректное количество!'); - return; - } - - const productPrice = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_price input`).val()); - const productSelfCost = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_self_cost input`).val()); - const productReplacementPrice = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_replacement_price input`).val()); - const productReplacementSelfCost = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_replacement_self_cost input`).val()); - - if (isNaN(productPrice) || isNaN(productSelfCost) || isNaN(productReplacementPrice) || isNaN(productReplacementSelfCost)) { - alert('Введите корректные значения для цены или себестоимости!'); - return; - } - - const balance = (productPrice - productReplacementPrice) * quantity; - const balanceSelfCost = (productSelfCost - productReplacementSelfCost) * quantity; - - $('#shifttransfer-equalizationremains-' + index + '-balance').val(balance.toFixed(2)).trigger('change'); - $('#shifttransfer-equalizationremains-' + index + '-balance_self_cost').val(balanceSelfCost.toFixed(2)).trigger('change'); -}); diff --git a/erp24/web/js/shift-transfer/replacement.js b/erp24/web/js/shift-transfer/replacement.js new file mode 100644 index 00000000..f163af03 --- /dev/null +++ b/erp24/web/js/shift-transfer/replacement.js @@ -0,0 +1,144 @@ +let isRequestInProgress = false; +let isRequestInProgressQuantity = false; +let isRequestInProgressPrice = false; + +function getUrlParameter(name) { + return new URLSearchParams(window.location.search).get(name); +} + +function setProductData() { + if (isRequestInProgress) return; // Если запрос уже в процессе, выходим + + isRequestInProgress = true; // Устанавливаем флаг запроса + const $this = $(this); + const productGuid = $this.closest('tr').find('select').val(); + const shiftTransferId = getUrlParameter('id'); + + if (!productGuid) return; // Если productGuid не найден, выходим + + $.ajax({ + url: '/shift-transfer/get-product-data', + type: 'GET', + data: { productGuid, shiftTransferId }, + success: function(response) { + let data; + try { + data = JSON.parse(response); + } catch (e) { + alert('Ошибка при обработке данных'); + return; + } + + if (!data.success) { + alert('Ошибка: ' + data.message); + return; + } + + const index = $this.closest('tr').data('index'); + $('#shifttransfer-equalizationremains-' + index + '-product_price').val(data.product_price); + + const replacementSelect = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_id'); + replacementSelect.empty().append(''); + + Object.entries(data.product_replacement || {}).forEach(([id, name]) => { + replacementSelect.append(``); + }); + + replacementSelect.css({ visibility: 'visible', height: 'auto', width: '100%' }) + .trigger('change') + .val(replacementSelect.val() || replacementSelect.find('option').first().val()) + .trigger('change'); + + $('#shifttransfer-equalizationremains-' + index + '-product_self_cost').val(data.product_self_cost || ''); + }, + error: function() { + alert('Ошибка запроса!'); + }, + complete: function() { + isRequestInProgress = false; // Снимаем флаг, когда запрос завершен + } + }); +} + +function setReplacementPriceData() { + if (isRequestInProgressPrice) return; // Если запрос уже в процессе, выходим + + isRequestInProgressPrice = true; // Устанавливаем флаг запроса + const $this = $(this); + const productGuid = $this.val(); + const shiftTransferId = getUrlParameter('id'); + + if (!productGuid) return; // Если productGuid не найден, выходим + + $.ajax({ + url: '/shift-transfer/get-product-replacement-price', + type: 'GET', + data: { productGuid, shiftTransferId }, + success: function(response) { + let data; + try { + data = JSON.parse(response); + } catch (e) { + alert('Ошибка при обработке данных'); + return; + } + + if (!data.success) { + alert('Ошибка: ' + data.message); + return; + } + + const index = $this.closest('tr').data('index'); + const priceInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_price'); + const replacementSelfCostInput = $('#shifttransfer-equalizationremains-' + index + '-product_replacement_self_cost'); + + if (priceInput.length) { + priceInput.val(data.product_price).trigger('change'); + } + + if (replacementSelfCostInput.length) { + replacementSelfCostInput.val(data.product_replacement_self_cost || '').trigger('change'); + } + }, + error: function() { + alert('Ошибка запроса!'); + }, + complete: function() { + isRequestInProgressPrice = false; // Снимаем флаг, когда запрос завершен + } + }); +} + +$(document).on('input', '.list-cell__product_replacement_count input', function() { + const $this = $(this); + const id = $this.attr('id'); + const indexMatch = id.match(/shifttransfer-equalizationremains-(\d+)-/); + + if (!indexMatch) { + alert('Ошибка: Невозможно извлечь индекс из ID'); + return; + } + + const index = indexMatch[1]; + const quantity = parseFloat($this.val()); + if (isNaN(quantity) || quantity < 0) { + alert('Введите корректное количество!'); + return; + } + + const productPrice = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_price input`).val()); + const productSelfCost = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_self_cost input`).val()); + const productReplacementPrice = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_replacement_price input`).val()); + const productReplacementSelfCost = parseFloat($this.closest('tr').find(`.field-shifttransfer-equalizationremains-${index}-product_replacement_self_cost input`).val()); + + if (isNaN(productPrice) || isNaN(productSelfCost) || isNaN(productReplacementPrice) || isNaN(productReplacementSelfCost)) { + alert('Введите корректные значения для цены или себестоимости!'); + return; + } + + const balance = (productPrice - productReplacementPrice) * quantity; + const balanceSelfCost = (productSelfCost - productReplacementSelfCost) * quantity; + + $('#shifttransfer-equalizationremains-' + index + '-balance').val(balance.toFixed(2)).trigger('change'); + $('#shifttransfer-equalizationremains-' + index + '-balance_self_cost').val(balanceSelfCost.toFixed(2)).trigger('change'); +});