From: Alexander Smirnov Date: Thu, 12 Dec 2024 10:08:47 +0000 (+0300) Subject: [ERP-250] logs X-Git-Tag: 1.7~174^2~1 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=7184cb623ea94b5161ca7737ee7ec5770b08e3a7;p=erp24_rep%2Fyii-erp24%2F.git [ERP-250] logs --- diff --git a/erp24/controllers/UsersMessageManagementController.php b/erp24/controllers/UsersMessageManagementController.php index 1bf0aed7..48e37a95 100644 --- a/erp24/controllers/UsersMessageManagementController.php +++ b/erp24/controllers/UsersMessageManagementController.php @@ -3,11 +3,34 @@ namespace app\controllers; use Yii; +use yii\base\DynamicModel; +use yii\data\ActiveDataProvider; +use yii\db\Exception; +use yii\helpers\ArrayHelper; +use yii\helpers\Json; use yii\web\Controller; use yii_app\records\UsersMessageManagement; +use yii_app\records\UsersMessageManagementLogs; class UsersMessageManagementController extends Controller { + public static function saveLogs($old, $new) { + foreach (array_keys($old) as $oldKey) { + if ($new[$oldKey] != $old[$oldKey]) { + $log = new UsersMessageManagementLogs; + $log->field_name = $oldKey; + $log->value_old = '' . $old[$oldKey]; + $log->value_new = '' . $new[$oldKey]; + $log->created_at = date('Y-m-d H:i:s'); + $log->created_by = Yii::$app->user->id; + $log->save(); + if ($log->getErrors()) { + throw new Exception(Json::encode($log->getErrors())); + } + } + } + } + public function actionIndex() { $model = UsersMessageManagement::find()->one(); @@ -18,8 +41,11 @@ class UsersMessageManagementController extends Controller $model->day_before_step2_active = 1; $model->day_before_step3_active = 1; $model->date_start = date('Y-m-d H:i:s'); + $model->date_last_scenario = $model->date_start; } + $oldAttributes = $model->getAttributes(); + if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) { if (!$model->created_at) { $model->created_at = date('Y-m-d H:i:s'); @@ -29,6 +55,8 @@ class UsersMessageManagementController extends Controller $model->updated_by = Yii::$app->user->id; if ($model->validate()) { $model->save(); + $newAttributes = $model->getAttributes(); + self::saveLogs($oldAttributes, $newAttributes); } else { if (!empty(array_intersect_key($model->getErrors(), ['offer_1' => 1, 'offer_2' => 2, 'offer_whatsapp' => 3, 'offer_text' => 4]))) { Yii::$app->session->setFlash('error', "Перейдите на вкладку Сообщения рассылки, чтобы заполнить пустые поля"); @@ -38,4 +66,58 @@ class UsersMessageManagementController extends Controller return $this->render('index', compact('model')); } + + public function actionLogs() { + + $model = DynamicModel::validateData([ + 'date_from' => date('Y-m-d H:i:s', strtotime('-1 week', time())), + 'date_to' => date('Y-m-d H:i:s'), + 'field_name' => null, + 'value' => null, + 'created_by' => null, + ], [ + [['date_from', 'date_to', 'field_name', 'value', 'created_by'], 'safe'] + ]); + + $model->load(Yii::$app->request->get()); + + $query = UsersMessageManagementLogs::find() + ->where(['BETWEEN', 'created_at', $model->date_from, $model->date_to]); + if ($model->field_name) { + $query->andWhere(['field_name' => $model->field_name]); + } + if (!empty($model->value)) { + $query->andWhere([ + 'or', + ['like', 'value_old', '%' . $model->value . '%', false], + ['like', 'value_new', '%' . $model->value . '%', false], + ]); + } + if (!empty($model->created_by)) { + $query->andWhere(['created_by' => $model->created_by]); + } + + $dataProvider = new ActiveDataProvider(['query' => $query]); + + $log = new UsersMessageManagementLogs; + $keys = array_keys($log->getAttributes()); + $fieldNames = array_merge([null => '__Любые__'], array_combine($keys, $keys)); + + $adminArr = []; + $adminArrOther = []; + foreach (\yii_app\records\Admin::find()->with('adminGroup')->all() as $admin) { + if ($admin->group_id > 0) { + $tmp = ['id' => $admin->id, 'name' => $admin->name, 'groupName' => $admin->adminGroup->name ?? "Другие"]; + if ($tmp['groupName'] == 'Другие') { + $adminArrOther[] = $tmp; + } else { + $adminArr[] = $tmp; + } + } + } + $adminArr = ArrayHelper::merge([['id' => null, 'name' => '__Любой__', 'groupName' => '__Любой__']], $adminArr, $adminArrOther); + $admins = ArrayHelper::map($adminArr, 'id', 'name', 'groupName'); + + return $this->render('logs', compact('model', 'fieldNames', 'dataProvider', 'admins')); + } } diff --git a/erp24/migrations/m241212_082256_create_table_users_message_management_logs.php b/erp24/migrations/m241212_082256_create_table_users_message_management_logs.php new file mode 100755 index 00000000..8a6ae7e4 --- /dev/null +++ b/erp24/migrations/m241212_082256_create_table_users_message_management_logs.php @@ -0,0 +1,33 @@ +createTable(self::TABLE_NAME, [ + 'id' => $this->primaryKey(), + 'field_name' => $this->string()->notNull()->comment('Название заменяемого поля'), + 'value_old' => $this->text()->null()->comment('Заменяемое значение'), + 'value_new' => $this->text()->null()->comment('Новое значение'), + 'created_at' => $this->dateTime()->notNull()->comment('Время создания записи'), + 'created_by' => $this->integer()->notNull()->comment('Создатель записи'), + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropTable(self::TABLE_NAME); + } +} diff --git a/erp24/records/UsersMessageManagementLogs.php b/erp24/records/UsersMessageManagementLogs.php new file mode 100644 index 00000000..3631e466 --- /dev/null +++ b/erp24/records/UsersMessageManagementLogs.php @@ -0,0 +1,60 @@ + null], + [['created_by'], 'integer'], + [['field_name'], 'string', 'max' => 255], + ]; + } + + /** + * {@inheritdoc} + */ + public function attributeLabels() + { + return [ + 'id' => 'ID', + 'field_name' => 'Field Name', + 'value_old' => 'Value Old', + 'value_new' => 'Value New', + 'created_at' => 'Created At', + 'created_by' => 'Created By', + ]; + } + + function getAdmin() { + return $this->hasOne(Admin::class, ['id' => 'created_by']); + } +} diff --git a/erp24/views/users-message-management/logs.php b/erp24/views/users-message-management/logs.php new file mode 100644 index 00000000..c8501958 --- /dev/null +++ b/erp24/views/users-message-management/logs.php @@ -0,0 +1,102 @@ + + +
+ + 'GET', + 'action' => '/users-message-management/logs' + ]) ?> + +
+
+ Время от:   +
+ field($model, 'date_from')->widget(DateTimePicker::class, [ + 'language' => 'ru', + 'template' => '{input}', + 'clientOptions' => [ + 'autoclose' => true, + 'format' => 'Y-m-d H:i:s', + 'todayBtn' => true + ], + ])->label(false) ?> +
+   до:   +
+ field($model, 'date_to')->widget(DateTimePicker::class, [ + 'language' => 'ru', + 'template' => '{input}', + 'clientOptions' => [ + 'autoclose' => true, + 'format' => 'Y-m-d H:i:s', + 'todayBtn' => true + ], + ])->label(false) ?> +
+      Название поля:   +
+ field($model, 'field_name')->dropDownList($fieldNames)->label(false) ?> +
+      Значение поля:   +
+ field($model, 'value')->textInput()->label(false) ?> +
+      Автор:   +
+ field($model, 'created_by')->widget(Select2::class, [ + 'data' => $admins, + 'language' => 'ru', + 'options' => ['placeholder' => 'Сотрудник...'], + 'pluginOptions' => [ + 'allowClear' => true + ], + ])->label(false) ?> +
+      +
+ 'btn btn-secondary btn-sm']) ?> +
+
+
+ + + +
+
+ $dataProvider, + 'columns' => [ + 'id', + 'field_name', + 'value_old', + 'value_new', + 'created_at', + [ + 'attribute' => 'created_by', + 'label' => 'Создано', + 'value' => function ($model) { + return ($model->admin->name ?? '') . ' #' . $model->created_by; + } + ], + ] + ]) ?> +
+
+ +