]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Логирование
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 15 Nov 2024 15:07:19 +0000 (18:07 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 15 Nov 2024 15:07:19 +0000 (18:07 +0300)
erp24/controllers/crud/Product1cReplacementController.php
erp24/views/crud/product1c-replacement/log-history.php [new file with mode: 0644]
erp24/views/crud/product1c-replacement/multy-form.php
erp24/views/crud/product1c-replacement/view.php

index 5a0e7faac02705418876e731f3276ab078d3ad9a..ba073cce2ea95565cd1cff93dcd50dd55651f4d9 100644 (file)
@@ -6,6 +6,7 @@ use Yii;
 use yii\behaviors\TimestampBehavior;
 use yii\data\ActiveDataProvider;
 use yii_app\records\Product1cReplacement;
+use yii_app\records\Product1cReplacementLog;
 use yii_app\records\Product1cReplacementSearch;
 use yii\web\Controller;
 use yii\web\NotFoundHttpException;
@@ -126,9 +127,14 @@ class Product1cReplacementController extends Controller
                                 'guid_replacement' => $replacementGuid,
                             ]);
                             if (!$replacementModel->save()) {
-
                                 throw new \Exception('Ошибка сохранения замены.');
                             }
+                            // Логирование создания
+                            $this->logReplacementAction(
+                                $replacementModel->id,
+                                'Запись создана',
+                                $replacementGuid
+                            );
                         }
                     }
                     $transaction->commit();
@@ -185,14 +191,24 @@ class Product1cReplacementController extends Controller
             try {
                 $replacementData = $this->request->post('Product1cReplacement')['guid_replacement'] ?? [];
                 $replacementIds = $this->request->post('Product1cReplacement')['replacement_ids'] ?? [];
-
+                //var_dump($replacementData); die();
                 foreach ($replacementData as $index => $replacementGuid) {
                     if (!empty($replacementIds[$index])) {
 
                         $replacementModel = Product1cReplacement::findOne($replacementIds[$index]);
                         if ($replacementModel) {
-                            $replacementModel->guid_replacement = $replacementGuid;
-                            $replacementModel->save();
+                            $stateBefore = $replacementModel->guid_replacement;
+                            if ($replacementModel->guid_replacement !== $replacementGuid) {
+                                $replacementModel->guid_replacement = $replacementGuid;
+                                if ($replacementModel->save()) {
+                                    // Логирование изменения только при изменении данных
+                                    $this->logReplacementAction(
+                                        $replacementModel->id,
+                                        $stateBefore,
+                                        $replacementGuid
+                                    );
+                                }
+                            }
                         }
                     } else {
 
@@ -200,7 +216,14 @@ class Product1cReplacementController extends Controller
                             'guid' => $model->guid,
                             'guid_replacement' => $replacementGuid,
                         ]);
-                        $replacementModel->save();
+                        if ($replacementModel->save()) {
+                            // Логирование создания
+                            $this->logReplacementAction(
+                                $replacementModel->id,
+                                'Запись создана',
+                                $replacementGuid
+                            );
+                        }
                     }
                 }
 
@@ -218,6 +241,45 @@ class Product1cReplacementController extends Controller
             'replacements' => $replacementsQuery,
         ]);
     }
+
+
+    public function actionLogHistory($guid)
+    {
+
+        $replacements = Product1cReplacement::find()
+            ->select('id')
+            ->where(['guid' => $guid])
+            ->column();
+
+
+        if (empty($replacements)) {
+            Yii::$app->session->setFlash('warning', 'История логов не найдена для указанного GUID.');
+            return $this->render('log-history', ['dataProvider' => null]);
+        }
+        $productName = Products1c::find()
+            ->select('name')
+            ->where(['id' => $guid])
+            ->scalar();
+
+        $logQuery = Product1cReplacementLog::find()
+            ->where(['replacement_id' => $replacements])
+            ->orderBy(['date' => SORT_DESC]);
+
+        $dataProvider = new \yii\data\ActiveDataProvider([
+            'query' => $logQuery,
+            'pagination' => [
+                'pageSize' => 20,
+            ],
+        ]);
+
+        return $this->render('log-history', [
+            'dataProvider' => $dataProvider,
+            'guid' => $guid,
+            'name' => $productName,
+        ]);
+    }
+
+
     /**
      * Deletes an existing Product1CReplacement model.
      * If deletion is successful, the browser will be redirected to the 'index' page.
@@ -230,8 +292,17 @@ class Product1cReplacementController extends Controller
         Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
 
         $model = $this->findModel($id);
-        if ($model && $model->softDelete()) {
-            return ['success' => true];
+        if ($model) {
+            $stateBefore = $model->guid_replacement;
+            $this->logReplacementAction(
+                $model->id,
+                $stateBefore,
+                'Запись удалена'
+            );
+            if ($model->softDelete()) {
+
+                return ['success' => true];
+            }
         }
         return ['success' => false, 'message' => 'Ошибка при удалении записи.'];
     }
@@ -259,4 +330,37 @@ class Product1cReplacementController extends Controller
 
         throw new NotFoundHttpException('The requested page does not exist.');
     }
+
+    protected function logReplacementAction($replacementId, $stateBefore, $stateAfter)
+    {
+
+        $existingLog = Product1cReplacementLog::find()
+            ->where([
+                'replacement_id' => $replacementId,
+                'state_before' => $stateBefore,
+                'state_after' => $stateAfter,
+                'admin_id' => Yii::$app->user->id,
+            ])
+            ->exists();
+
+        if ($existingLog) {
+
+            return;
+        }
+
+
+        $log = new Product1cReplacementLog([
+            'replacement_id' => $replacementId,
+            'state_before' => $stateBefore,
+            'state_after' => $stateAfter,
+            'date' => date('Y-m-d H:i:s'),
+            'admin_id' => Yii::$app->user->id,
+        ]);
+
+        if (!$log->save()) {
+
+            Yii::error('Ошибка записи в лог: ' . json_encode($log->errors), __METHOD__);
+            throw new \Exception('Ошибка записи в лог.');
+        }
+    }
 }
diff --git a/erp24/views/crud/product1c-replacement/log-history.php b/erp24/views/crud/product1c-replacement/log-history.php
new file mode 100644 (file)
index 0000000..cfa0f52
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+
+use yii\grid\GridView;
+use yii\helpers\Html;
+use yii_app\records\Admin;
+
+/* @var $this yii\web\View */
+/* @var $dataProvider yii\data\ActiveDataProvider */
+/* @var $guid string */
+/* @var $name string */
+
+$this->title = 'История логов для GUI: ';
+$this->params['breadcrumbs'][] = $this->title;
+?>
+<div class="log-history-index p-4">
+    <h1><?= Html::encode($this->title) ?> <?= $name  ?> ( <?= $guid  ?> ) </h1>
+
+    <?php if ($dataProvider && $dataProvider->getTotalCount() > 0): ?>
+        <?= GridView::widget([
+            'dataProvider' => $dataProvider,
+            'columns' => [
+                ['class' => 'yii\grid\SerialColumn'],
+
+                'replacement_id',
+                'state_before',
+                'state_after',
+                'date',
+                [
+                    'attribute' => 'admin_id',
+                    'label' => 'Имя пользователя',
+                    'value' => function ($model) {
+                        // Получаем имя пользователя по admin_id
+                        $admin = Admin::findOne($model->admin_id);
+                        return $admin ? $admin->name : 'Неизвестно';
+                    },
+                ],
+
+
+            ],
+        ]); ?>
+    <?php else: ?>
+        <p>История логов не найдена для указанного GUID.</p>
+    <?php endif; ?>
+</div>
\ No newline at end of file
index ec2bed4c7386d7c5b49a1967687b3e016eeafba9..380cb593f0efafd8565a27e07e2b50a757182d53 100644 (file)
@@ -82,6 +82,7 @@ $this->registerJsFile('/js/crud/product1cReplacement/multy-form.js', ['position'
                 ]) ?>
                 <button type="button"
                         class="btn btn-danger delete-guid-replacement btn-remove"
+
                         data-url="<?= \yii\helpers\Url::to(['/crud/product1c-replacement/delete', 'id' => $replacement->id]) ?>"
                         style="position: absolute; right: -40px; top:33%; width:auto;">
                     ×
@@ -96,7 +97,7 @@ $this->registerJsFile('/js/crud/product1cReplacement/multy-form.js', ['position'
 
 
         <div class="form-group">
-            <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
+            <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success', 'data-pjax' => '0']) ?>
 
         </div>
 
@@ -106,12 +107,3 @@ $this->registerJsFile('/js/crud/product1cReplacement/multy-form.js', ['position'
 
     </div>
 <?php Pjax::end(); ?>
-<?php /*foreach ($replacements as $key => $replacement): */?><!--
-    <?php
-/*    // Проверяем, существует ли связанный продукт
-    $replacementName = $replacement->replacementProduct ? $replacement->replacementProduct->name : 'Неизвестно';
-    print_r($replacement);
-    */?>
-
-
---><?php /*endforeach; */?>
\ No newline at end of file
index 179a8b0dac003e8520b80e345f05ee67c53ddcb0..160127e99755b9829be8384828d2368e87cff8b5 100644 (file)
@@ -55,7 +55,7 @@ JS
         <?= Html::a('Редактировать', ['update', 'id' => $model->guid], ['class' => 'btn btn-primary']) ?>
         <?= Html::a('Назад', ['index'], ['class' => 'btn btn-danger']) ?>
 
-        <?= Html::a('Просмотр логов', ['index'], ['class' => 'btn btn-success']) ?>
+        <?= Html::a('Просмотр логов', ['log-history', 'guid' => $model->guid], ['class' => 'btn btn-success']) ?>
     </p>
     <?php Pjax::begin(['id' => 'pjax-container']); ?>
     <div id="grid-container">