]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-242] сохранение остатков при перезагрузке неправильной формы передачи смены
authorAlexander Smirnov <fredeom@mail.ru>
Fri, 29 Nov 2024 18:10:31 +0000 (21:10 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Fri, 29 Nov 2024 18:10:31 +0000 (21:10 +0300)
erp24/controllers/ShiftTransferController.php
erp24/records/ShiftTransfer.php
erp24/views/shift-transfer/update.php
erp24/web/js/shift-transfer/update.js

index e475929cefcb5055e104779538407328adc83696..ddf2a97dc4f05a1a13c41875645ea456a4e375f2 100644 (file)
@@ -50,6 +50,8 @@ class ShiftTransferController extends Controller
 
     public function actionCreate() {
         $shiftTransfer = new ShiftTransfer;
+        $shiftTransfer->date = date('Y-m-d H:i:s');
+        $shiftTransfer->date_start = $shiftTransfer->date;
 
         $isCreate = true;
 
@@ -67,25 +69,41 @@ class ShiftTransferController extends Controller
         if (!$shiftTransfer) {
             $shiftTransfer = new ShiftTransfer;
         }
-        if ($shiftTransfer->load(Yii::$app->request->post()) && $shiftTransfer->validate()) {
-            $shiftTransfer->save();
-            ShiftRemains::deleteAll(['shift_transfer_id' => $shiftTransfer->id]);
-            $modelsShiftRemains = MultipleModel::createMultipleModel(ShiftRemains::class,
-                'ShiftTransfer', 'shiftRemains');
+
+        $loadDataShiftRemains = null;
+
+        if ($shiftTransfer->load(Yii::$app->request->post())) {
             $postShiftTransfer = Yii::$app->request->post('ShiftTransfer');
-            $loadDataShiftRemains = ArrayHelper::getValue($postShiftTransfer, 'shiftRemains');
-            if (!empty($loadDataShiftRemains)) {
-                MultipleModel::loadMultipleFromArray($modelsShiftRemains, $loadDataShiftRemains , '',[]);
-            }
-            foreach ($modelsShiftRemains as $modelsShiftRemain) {
-                $modelsShiftRemain->shift_transfer_id = $shiftTransfer->id;
-                if ($modelsShiftRemain->validate()) {
-                    $modelsShiftRemain->save();
-                } else {
-                    var_dump($modelsShiftRemain->getErrors()); die;
+            $loadDataShiftRemains = ArrayHelper::getValue($postShiftTransfer, 'shiftRemainsCopy');
+
+            if ($shiftTransfer->id || ($shiftTransfer->validate() && $shiftTransfer->save())) {
+                ShiftRemains::deleteAll(['shift_transfer_id' => $shiftTransfer->id]);
+                $modelsShiftRemains = MultipleModel::createMultipleModel(ShiftRemains::class,
+                    'ShiftTransfer', 'shiftRemainsCopy');
+                if (!empty($loadDataShiftRemains)) {
+                    MultipleModel::loadMultipleFromArray($modelsShiftRemains, $loadDataShiftRemains, '', []);
+                }
+
+                foreach ($modelsShiftRemains as $modelsShiftRemain) {
+                    $modelsShiftRemain->shift_transfer_id = $shiftTransfer->id;
+                    if ($modelsShiftRemain->validate()) {
+                        $modelsShiftRemain->save();
+                    } else {
+                        var_dump($modelsShiftRemain->getErrors());
+                        die;
+                    }
+                }
+
+                if ($shiftTransfer->validate()) {
+                    $shiftTransfer->goods_transfer_summ = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'remains_summ'));
+                    $shiftTransfer->goods_transfer_count = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'remains_count'));
+                    $shiftTransfer->discrepancy_pieces = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'fact_and_1c_diff'));
+                    $shiftTransfer->discrepancy_rubles = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'remains_1c'));
+                    $shiftTransfer->save();
+
+                    return $this->redirect(['/shift-transfer/view', 'id' => $shiftTransfer->id]);
                 }
             }
-            return $this->redirect(['/shift-transfer/view', 'id' => $shiftTransfer->id]);
         }
 
         $isCreate = false;
@@ -94,6 +112,8 @@ class ShiftTransferController extends Controller
 
         $admins = self::getAdminsWithDrugieLast();
 
+        $shiftTransfer->shiftRemainsCopy = $loadDataShiftRemains ?? $shiftTransfer->shiftRemains;
+
         return $this->render('update', compact('shiftTransfer', 'isCreate', 'storeNameById',
             'admins'));
     }
index 49589dc9a49fd445b69dee49db95c2f0c54b3bb5..94d64916e2f12cd228eda86948d75979edaa9f9f 100644 (file)
@@ -24,6 +24,8 @@ use Yii;
  */
 class ShiftTransfer extends \yii\db\ActiveRecord
 {
+    public $shiftRemainsCopy;
+
     const STATUS_ID_INPUT_FACT_REMAINS = 1;
     const STATUS_ID_TRANSFER_ACTIONS = 2;
     const STATUS_ID_READY_TO_ACCEPT = 3;
index 4d76d82cfd6591f5490259ce1e950f4facf6d827..9645166bb9392bc83498b86ccc33f73eed27996f 100644 (file)
@@ -115,22 +115,7 @@ $this->registerCss('
             ]) ?>
         </div>
     </div>
-    <div class="row">
-        <div class="col-6">
-            <?= $form->field($shiftTransfer, 'goods_transfer_summ')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-        <div class="col-6">
-            <?= $form->field($shiftTransfer, 'goods_transfer_count')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-6">
-            <?= $form->field($shiftTransfer, 'discrepancy_pieces')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-        <div class="col-6">
-            <?= $form->field($shiftTransfer, 'discrepancy_rubles')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-    </div>
+
     <div class="row">
         <div class="col-6">
             <?= $form->field($shiftTransfer, 'comment')->textarea(['rows' => 6]) ?>
@@ -142,7 +127,7 @@ $this->registerCss('
 
     <div class="row">
         <div class="col-12">
-        <?= $form->field($shiftTransfer, 'shiftRemains')->widget(MultipleInput::class, [
+        <?= $form->field($shiftTransfer, 'shiftRemainsCopy')->widget(MultipleInput::class, [
             'min' => 0,
             'max' => 100,
             'columns' => [
@@ -152,7 +137,7 @@ $this->registerCss('
                     'type'  => Select2::class,
                     'options' => [
                         'data' => ArrayHelper::map(Products1c::find()->select(['id', 'name'])
-                            ->where(['tip' => 'products'])->all(), 'id', 'name'),
+                            ->where(['tip' => 'products'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'),
                     ],
                     'value' => function($data) {
                         return $data['product_guid'] ?? '';
index 943948f65c455b73c0dcbb6619f557c80c80d18b..401cab2e1b29dc28cb5f0b655a37d077fa7c39fa 100644 (file)
@@ -5,22 +5,22 @@ const param24 = $('meta[name=csrf-param]').attr('content');
 const token24 = $('meta[name=csrf-token]').attr('content');
 
 function checkInputRow(currentIndex, row, errorContainer) {
-    const groupLabel = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-group_label');
-    const productGuid = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-product_guid');
-    const productName = $(row).find('#select2-shifttransfer-shiftremains-' + currentIndex + '-product_guid-container').text();
-    const retailPrice = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-retail_price');
-    const selfCost = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-self_cost');
-    const remains1c = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_1c');
-    const remains_summ = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_summ');
-    const remains_count = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_count');
-    const fact_and_1c_diff = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-fact_and_1c_diff');
+    const productGuid = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-product_guid');
+    const productName = $(row).find('#select2-shifttransfer-shiftremainscopy-' + currentIndex + '-product_guid-container').text();
+    const groupLabel = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-group_label');
+    const retailPrice = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-retail_price');
+    const selfCost = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-self_cost');
+    const remains1c = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_1c');
+    const remains_summ = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_summ');
+    const remains_count = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_count');
+    const fact_and_1c_diff = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-fact_and_1c_diff');
     function checkField(field, currentIndex, productName, msg, errorContainer) {
-        if (field.val() === '') { errorContainer.push(msg + ' Продукт: ' + productName + ' Строка: ' + (currentIndex + 1)); return false; }
+        if (field.val() === '') { errorContainer.push(msg + ' Продукт: ' + productName + ' Строка: ' + currentIndex ); return false; }
         return true;
     }
 
-    return checkField(groupLabel, currentIndex, productName, 'Пустое название группы.', errorContainer) &&
-        checkField(productGuid, currentIndex, productName, 'Не выбран продукт.', errorContainer) &&
+    return checkField(productGuid, currentIndex, productName, 'Не выбран продукт.', errorContainer) &&
+        checkField(groupLabel, currentIndex, productName, 'Пустое название группы.', errorContainer) &&
         checkField(retailPrice, currentIndex, productName, 'Не назначена розничная цена.', errorContainer) &&
         checkField(selfCost, currentIndex, productName, 'Отсутствует себестоимость.', errorContainer) &&
         checkField(remains1c, currentIndex, productName, 'Отсутствует информация об остатках в 1с.', errorContainer) &&
@@ -34,7 +34,7 @@ function checkInputs() {
     let noError = true;
     const errorContainer = [];
     for (let currentIndex = 0; currentIndex < rows.length; currentIndex++) {
-        noError = checkInputRow(currentIndex, rows[currentIndex], errorContainer) && noError;
+        noError = checkInputRow(currentIndex + 1, rows[currentIndex], errorContainer) && noError;
     }
     if (errorContainer.length > 0) {
         alert(errorContainer.join('\n'));
@@ -44,14 +44,14 @@ function checkInputs() {
 
 function setMultipleInputHandlers(currentIndex, row) {
     const store = $('#shifttransfer-store_guid');
-    const groupLabel = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-group_label');
-    const productGuid = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-product_guid');
-    const retailPrice = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-retail_price');
-    const selfCost = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-self_cost');
-    const remains1c = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_1c');
-    const remains_summ = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_summ');
-    const remains_count = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-remains_count');
-    const fact_and_1c_diff = $(row).find('#shifttransfer-shiftremains-' + currentIndex + '-fact_and_1c_diff');
+    const groupLabel = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-group_label');
+    const productGuid = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-product_guid');
+    const retailPrice = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-retail_price');
+    const selfCost = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-self_cost');
+    const remains1c = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_1c');
+    const remains_summ = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_summ');
+    const remains_count = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-remains_count');
+    const fact_and_1c_diff = $(row).find('#shifttransfer-shiftremainscopy-' + currentIndex + '-fact_and_1c_diff');
 
     function onChangeTarget() {
         fact_and_1c_diff.val(remains_count.val() - remains1c.val());