]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-243 Действия по замене (II этап)
authormarina <m.zozirova@gmail.com>
Mon, 2 Dec 2024 08:05:20 +0000 (11:05 +0300)
committermarina <m.zozirova@gmail.com>
Mon, 2 Dec 2024 08:05:20 +0000 (11:05 +0300)
erp24/controllers/ShiftTransferController.php
erp24/records/EqualizationRemains.php
erp24/views/shift-transfer/_replacement.php
erp24/web/js/shift-transfer/replacement.js

index aac5f76896777d4d3d4633f1aaf1514f224a4531..0a1088355a114b2f39601ace7887422e673d607e 100644 (file)
@@ -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) {
index 111755e578b20b4565c54630f66e48c65152c9aa..90cd3c3251bac6407b6dae1ef6c1d220db7f5e6a 100644 (file)
@@ -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([
index f69bda6ff499054347f6f4510214fb8d79af4abd..55c9472a26434ad0b43d9a2be6dd8c5e4f032842 100644 (file)
@@ -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',
index f163af03a96f9374036cc64f7eb8d243e5d9d9b3..356ef7db57a57ace9da74067d03a0738465a1ec4 100644 (file)
@@ -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('<option value="">Выберите товар</option>').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');
 });