]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-250] users message management ui
authorAlexander Smirnov <fredeom@mail.ru>
Thu, 12 Dec 2024 07:16:27 +0000 (10:16 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Thu, 12 Dec 2024 07:16:27 +0000 (10:16 +0300)
erp24/migrations/m241211_141619_alter_table_users_message_management_add_columns_hold_active.php [new file with mode: 0755]
erp24/records/UsersMessageManagement.php
erp24/views/users-message-management/index.php
erp24/web/js/users-message-management/index.js [new file with mode: 0644]

diff --git a/erp24/migrations/m241211_141619_alter_table_users_message_management_add_columns_hold_active.php b/erp24/migrations/m241211_141619_alter_table_users_message_management_add_columns_hold_active.php
new file mode 100755 (executable)
index 0000000..eb05b67
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m241211_141619_alter_table_users_message_management_add_columns_hold_active
+ */
+class m241211_141619_alter_table_users_message_management_add_columns_hold_active extends Migration
+{
+    const TABLE_NAME = 'erp24.users_message_management';
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->addColumn(self::TABLE_NAME, 'hold', $this->integer()->notNull()->defaultValue(0)->comment('HOLD клиентов'));
+        $this->addColumn(self::TABLE_NAME, 'hold_active', $this->tinyInteger()->notNull()->defaultValue(0)
+            ->comment('0 - поле деактивировано, 1 - поле активировано'));
+        $this->addColumn(self::TABLE_NAME, 'day_before_step1_active', $this->tinyInteger()->notNull()
+            ->defaultValue(0)->comment('0 - поле деактивировано, 1 - поле активировано'));
+        $this->addColumn(self::TABLE_NAME, 'day_before_step2_active', $this->tinyInteger()->notNull()
+            ->defaultValue(0)->comment('0 - поле деактивировано, 1 - поле активировано'));
+        $this->addColumn(self::TABLE_NAME, 'day_before_step3_active', $this->tinyInteger()->notNull()
+            ->defaultValue(0)->comment('0 - поле деактивировано, 1 - поле активировано'));
+        $this->addColumn(self::TABLE_NAME, 'active', $this->tinyInteger()->notNull()
+            ->defaultValue(0)->comment('0 - поле деактивировано, 1 - поле активировано'));
+        $this->addColumn(self::TABLE_NAME, 'date_end', $this->dateTime()->null()->comment('Дата и время завершения события'));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropColumn(self::TABLE_NAME, 'date_end');
+        $this->dropColumn(self::TABLE_NAME, 'active');
+        $this->dropColumn(self::TABLE_NAME, 'day_before_step3_active');
+        $this->dropColumn(self::TABLE_NAME, 'day_before_step2_active');
+        $this->dropColumn(self::TABLE_NAME, 'day_before_step1_active');
+        $this->dropColumn(self::TABLE_NAME, 'hold_active');
+        $this->dropColumn(self::TABLE_NAME, 'hold');
+    }
+}
index 88c99c0ca2bc2ce4d5eac90a4d80bce1d0f8df78..fa4ad87bf52a5bd8d6a621f07007eca4d664468a 100644 (file)
@@ -23,6 +23,12 @@ use Yii;
  * @property int $created_by ID создателя записи
  * @property string $updated_at Дата обновления
  * @property int $updated_by ID обновления записи
+ * @property int $hold_active 0 - поле деактивировано, 1 - поле активировано
+ * @property int $day_before_step1_active 0 - поле деактивировано, 1 - поле активировано
+ * @property int $day_before_step2_active 0 - поле деактивировано, 1 - поле активировано
+ * @property int $day_before_step3_active 0 - поле деактивировано, 1 - поле активировано
+ * @property int $active 0 - поле деактивировано, 1 - поле активировано
+ * @property string|null $date_end Дата и время завершения события
  */
 class UsersMessageManagement extends \yii\db\ActiveRecord
 {
@@ -42,10 +48,12 @@ class UsersMessageManagement extends \yii\db\ActiveRecord
         return [
             [['bonus', 'day_before_step1', 'day_before_step2', 'day_before_step3', 'date_start', 'offer_1', 'offer_2', 'offer_whatsapp', 'offer_text', 'date_last_scenario', 'created_at', 'created_by', 'updated_at', 'updated_by'], 'required'],
             [['bonus'], 'number'],
-            [['day_before_step1', 'day_before_step2', 'day_before_step3', 'created_by', 'updated_by'], 'default', 'value' => null],
-            [['day_before_step1', 'day_before_step2', 'day_before_step3', 'created_by', 'updated_by'], 'integer'],
-            [['date_start', 'date_last_scenario', 'created_at', 'updated_at'], 'safe'],
-            [['offer_1', 'offer_2', 'offer_3', 'offer_whatsapp', 'offer_text'], 'string'],
+            [['day_before_step1', 'day_before_step2', 'day_before_step3', 'created_by', 'updated_by',
+                'hold', 'hold_active', 'day_before_step1_active', 'day_before_step2_active', 'day_before_step3_active', 'active'], 'default', 'value' => null],
+            [['day_before_step1', 'day_before_step2', 'day_before_step3', 'created_by', 'updated_by',
+                'hold', 'hold_active', 'day_before_step1_active', 'day_before_step2_active', 'day_before_step3_active', 'active'], 'integer'],
+            [['date_start', 'date_last_scenario', 'created_at', 'updated_at', 'date_end'], 'safe'],
+            [['offer_1', 'offer_2', 'offer_3', 'offer_whatsapp', 'offer_text', 'date_end'], 'string'],
         ];
     }
 
@@ -61,16 +69,23 @@ class UsersMessageManagement extends \yii\db\ActiveRecord
             'day_before_step2' => 'Дней до второго этапа',
             'day_before_step3' => 'Дней до третьего этапа',
             'date_start' => 'Дата и время старта',
-            'offer_1' => 'Оффер чатбот 1',
-            'offer_2' => 'Оффер чатбот 2',
+            'date_end' => 'Дата и время окончания',
+            'offer_1' => 'Первое сообщение в чатбот',
+            'offer_2' => 'Второе сообщение в чатбот',
             'offer_3' => 'Оффер чатбот 3',
-            'offer_whatsapp' => 'Оффер Whatsapp',
-            'offer_text' => 'ТекÑ\81Ñ\82 Ñ\82аÑ\80геÑ\82а',
+            'offer_whatsapp' => 'Whatsapp',
+            'offer_text' => 'ТаÑ\80геÑ\82',
             'date_last_scenario' => 'Дата последнего сценария',
             'created_at' => 'Created At',
             'created_by' => 'Created By',
             'updated_at' => 'Updated At',
             'updated_by' => 'Updated By',
+            'hold' => 'Hold',
+            'hold_active' => 'Hold Active',
+            'day_before_step1_active' => 'Day Before Step1 Active',
+            'day_before_step2_active' => 'Day Before Step2 Active',
+            'day_before_step3_active' => 'Day Before Step3 Active',
+            'active' => 'Active',
         ];
     }
 }
index 690d9f09b041b812b7a16d92f6d88425b3c3e1c1..41471dca211cb66ffc59092a3f5043b2410b7251 100644 (file)
@@ -9,6 +9,8 @@ use yii_app\records\UsersMessageManagement;
 
 /* @var $model UsersMessageManagement */
 
+$this->registerJsFile('/js/users-message-management/index.js', ['position' => \yii\web\View::POS_END]);
+
 ?>
 
 <div class="usersMessageManagementIndex m-5">
@@ -17,64 +19,159 @@ use yii_app\records\UsersMessageManagement;
 
     <?php $form = ActiveForm::begin(); ?>
 
-    <div class="row">
-        <div class="col-6">
-            <?= $form->field($model, 'bonus')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-        <div class="col-6">
-            <?= $form->field($model, 'date_start')->widget(DateTimePicker::class, [
-                'language' => 'ru',
-                'template' => '{input}',
-                'clientOptions' => [
-                    'autoclose' => true,
-                    'format' => 'Y-m-d H:i:s',
-                    'todayBtn' => true
-                ],
-            ]) ?>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-4">
-            <?= $form->field($model, 'day_before_step1')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'day_before_step2')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'day_before_step3')->textInput(['type' => 'number', 'step' => 0.01]) ?>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-4">
-            <?= $form->field($model, 'offer_1')->textarea(['row' => 6]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'offer_2')->textarea(['row' => 6]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'offer_3')->textarea(['row' => 6]) ?>
-        </div>
-    </div>
-    <div class="row">
-        <div class="col-4">
-            <?= $form->field($model, 'offer_whatsapp')->textarea(['row' => 6]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'offer_text')->textarea(['row' => 6]) ?>
-        </div>
-        <div class="col-4">
-            <?= $form->field($model, 'date_last_scenario')->widget(DateTimePicker::class, [
-                'language' => 'ru',
-                'template' => '{input}',
-                'clientOptions' => [
-                    'autoclose' => true,
-                    'format' => 'Y-m-d H:i:s',
-                    'todayBtn' => true
-                ],
-            ]) ?>
+    <ul class="nav1 br-7 border">
+        <li class="nav-item1">
+            <a class="nav-link text-primary active" id="mainTabAnchor" href="javascript:showTab('mainTab');">Основные настройки</a>
+        </li>
+        <li class="nav-item1">
+            <a class="nav-link text-primary" id="messageTabAnchor" href="javascript:showTab('messageTab');">Сообщения рассылки</a>
+        </li>
+        <li class="nav-item1">
+            <a class="nav-link text-primary" id="messageTabAnchor" href="javascript:showTab('unloadingTab');">Выгрузки</a>
+        </li>
+    </ul>
+
+    <div class="card">
+        <div class="card-body">
+            <div id="mainTab">
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Время начала
+                    </div>
+                    <div class="col-2">
+                        <?= $form->field($model, 'date_start')->widget(DateTimePicker::class, [
+                            'language' => 'ru',
+                            'template' => '{input}',
+                            'clientOptions' => [
+                                'autoclose' => true,
+                                'format' => 'Y-m-d H:i:s',
+                                'todayBtn' => true
+                            ],
+                        ])->label(false) ?>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Время конца
+                    </div>
+                    <div class="col-2">
+                        <?= $form->field($model, 'date_end')->widget(DateTimePicker::class, [
+                            'language' => 'ru',
+                            'template' => '{input}',
+                            'clientOptions' => [
+                                'autoclose' => true,
+                                'format' => 'Y-m-d H:i:s',
+                                'todayBtn' => true
+                            ],
+                        ])->label(false) ?>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Количество бонусов
+                    </div>
+                    <div class="col-2">
+                        <?= $form->field($model, 'bonus')->textInput(['type' => 'number'])->label(false) ?>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        HOLD клиентов
+                    </div>
+                    <div class="col-4">
+                        <div class="d-inline-block">
+                            <?php $attr = $model->hold_active ? ['type' => 'number'] : ['type' => 'number', 'readonly' => true]; ?>
+                            <?= $form->field($model, 'hold')->textInput($attr)->label(false) ?>
+                        </div>
+                        <div class="d-inline-block px-5">
+                            <?= $form->field($model, 'hold_active')->checkbox(['unchecked' => false, 'onchange'
+                            => 'setReadonly("#usersmessagemanagement-hold", this.checked);'], false)->label(false) ?>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Первый этап
+                    </div>
+                    <div class="col-4">
+                        <div class="d-inline-block">
+                            <?php $attr = $model->day_before_step1_active ? ['type' => 'number'] : ['type' => 'number', 'readonly' => true]; ?>
+                            <?= $form->field($model, 'day_before_step1')->textInput($attr)->label(false) ?>
+                        </div>
+                        <div class="d-inline-block px-5">
+                            <?= $form->field($model, 'day_before_step1_active')->checkbox(['unchecked' => false, 'onchange'
+                            => 'setReadonly("#usersmessagemanagement-day_before_step1", this.checked);'], false)->label(false) ?>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Второй этап
+                    </div>
+                    <div class="col-4">
+                        <div class="d-inline-block">
+                            <?php $attr = $model->day_before_step2_active ? ['type' => 'number'] : ['type' => 'number', 'readonly' => true]; ?>
+                            <?= $form->field($model, 'day_before_step2')->textInput($attr)->label(false) ?>
+                        </div>
+                        <div class="d-inline-block px-5">
+                            <?= $form->field($model, 'day_before_step2_active')->checkbox(['unchecked' => false, 'onchange'
+                            => 'setReadonly("#usersmessagemanagement-day_before_step2", this.checked);'], false)->label(false) ?>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Третий этап
+                    </div>
+                    <div class="col-4">
+                        <div class="d-inline-block">
+                            <?php $attr = $model->day_before_step3_active ? ['type' => 'number'] : ['type' => 'number', 'readonly' => true]; ?>
+                            <?= $form->field($model, 'day_before_step3')->textInput($attr)->label(false) ?>
+                        </div>
+                        <div class="d-inline-block px-5">
+                            <?= $form->field($model, 'day_before_step3_active')->checkbox(['unchecked' => false, 'onchange'
+                            => 'setReadonly("#usersmessagemanagement-day_before_step3", this.checked);'], false)->label(false) ?>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-2 mt-2">
+                        Активность рассылки
+                    </div>
+                    <div class="col-4">
+                        <div class="d-inline-block">
+                            <?= $form->field($model, 'active')->checkbox(['unchecked' => false], false)->label(false) ?>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div id="messageTab">
+                <div class="row">
+                    <div class="col-6">
+                        <?= $form->field($model, 'offer_1')->textarea(['row' => 6]) ?>
+                    </div>
+                    <div class="col-6">
+                        <?= $form->field($model, 'offer_2')->textarea(['row' => 6]) ?>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-6">
+                        <?= $form->field($model, 'offer_whatsapp')->textarea(['row' => 6]) ?>
+                    </div>
+                    <div class="col-6">
+                        <?= $form->field($model, 'offer_text')->textarea(['row' => 6]) ?>
+                    </div>
+                </div>
+            </div>
+            <div id="unloadingTab">
+                вызгрузки
+            </div>
         </div>
     </div>
 
+
+
+
     <div class="form-group">
         <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
     </div>
diff --git a/erp24/web/js/users-message-management/index.js b/erp24/web/js/users-message-management/index.js
new file mode 100644 (file)
index 0000000..1b3d1ce
--- /dev/null
@@ -0,0 +1,28 @@
+/* jshint esversion: 6 */
+
+const tabs = ['mainTab', 'messageTab', 'unloadingTab'];
+
+function showTab(tabName) {
+    $.each(tabs, function() {
+        if (this == tabName) {
+            $('#' + this).show();
+            $('#' + this + 'Anchor').addClass('active');
+        } else {
+            $('#' + this).hide();
+            $('#' + this + 'Anchor').removeClass('active');
+        }
+    });
+}
+
+function setReadonly(id, checked) {
+    const inp = document.querySelector(id);
+    if (checked) {
+        inp.removeAttribute("readonly");
+    } else {
+        inp.setAttribute("readonly", true);
+    }
+}
+
+$(document).ready(() => {
+    showTab('mainTab');
+})