]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-216] интерфейс для начисления бонусов через файл телефонов
authorAlexander Smirnov <fredeom@mail.ru>
Tue, 8 Oct 2024 12:51:34 +0000 (15:51 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Tue, 8 Oct 2024 12:51:34 +0000 (15:51 +0300)
erp24/actions/bonus/AddBonusToListOfPhones.php [new file with mode: 0644]
erp24/controllers/BonusController.php
erp24/views/bonus/add-bonus-to-list-of-phones.php [new file with mode: 0644]

diff --git a/erp24/actions/bonus/AddBonusToListOfPhones.php b/erp24/actions/bonus/AddBonusToListOfPhones.php
new file mode 100644 (file)
index 0000000..9a8b05f
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+namespace yii_app\actions\bonus;
+
+use Yii;
+use yii\base\Action;
+use yii\helpers\ArrayHelper;
+use yii\helpers\Json;
+use yii\web\UploadedFile;
+use yii_app\records\UsersBonus;
+
+class AddBonusToListOfPhones extends Action
+{
+    public function run() {
+        if (Yii::$app->request->isPost) {
+            $bonus = Yii::$app->request->post('bonus');
+            $name = Yii::$app->request->post('name');
+            $duration = Yii::$app->request->post('duration');
+            $phonesFile = UploadedFile::getInstanceByName('phones');
+            $phonesText = file_get_contents($phonesFile->tempName);
+            $phonesText = preg_replace('/\s+/',' ', $phonesText);
+            $phonesText = trim($phonesText);
+            $phones = explode(' ', $phonesText);
+
+            $tipSale = 'bonus' . date('Ymd');
+            $alreadyPhones = ArrayHelper::getColumn(UsersBonus::find()->select(['phone'])->where(['phone' => $phones])
+                ->andWhere(['tip_sale' => $tipSale])->all(),'phone');
+            foreach ($phones as $phone) {
+                if (!in_array($phone, $alreadyPhones)) {
+                    $usersBonus = new UsersBonus;
+                    $usersBonus->date = date('Y-m-d H:i:s');
+                    $usersBonus->tip = 'plus';
+                    $usersBonus->tip_sale = $tipSale;
+                    $usersBonus->phone = $phone;
+                    $usersBonus->name = $name;
+                    $usersBonus->store_id = 0;
+                    $usersBonus->site_id = 0;
+                    $usersBonus->referal_id = 0;
+                    $usersBonus->admin_id = Yii::$app->user->id;
+                    $usersBonus->price = 0;
+                    $usersBonus->price_skidka = 0;
+                    $usersBonus->bonus = intval($bonus);
+                    $usersBonus->store_id_1c = '';
+                    $usersBonus->seller_id_1c = '';
+                    $usersBonus->date_start = $usersBonus->date;
+                    $usersBonus->date_end = date('Y-m-d H:i:s', strtotime('+' . $duration . ' days', strtotime($usersBonus->date)));
+                    $usersBonus->save();
+                    if ($usersBonus->getErrors()) {
+                        throw new \Exception(Json::encode($usersBonus->getErrors()));
+                    }
+                }
+            }
+            Yii::$app->session->setFlash('success', 'Бонусы успешно начислены');
+        }
+        return $this->controller->render('add-bonus-to-list-of-phones');
+    }
+}
\ No newline at end of file
index 882c5838501cc3c766bc6543041ca9e48a5e61be..7494d5ba20d83d8a80c7304e6515320f4ed7cd6a 100644 (file)
@@ -24,6 +24,7 @@ class BonusController extends \yii\web\Controller
             'add-bonus-if-written-off' => \yii_app\actions\bonus\AddBonusIfWrittenOffAction::class,
             'add-bonuses' => \yii_app\actions\bonus\AddBonuses::class,
             'add-20-telegram-created-at-is-null' => \yii_app\actions\bonus\Add20TelegramCreatedAtIsNullAction::class,
+            'add-bonus-to-list-of-phones' => \yii_app\actions\bonus\AddBonusToListOfPhones::class,
         ];
     }
     public function actionBonusUsers() { return $this->render('bonus-users'); }
diff --git a/erp24/views/bonus/add-bonus-to-list-of-phones.php b/erp24/views/bonus/add-bonus-to-list-of-phones.php
new file mode 100644 (file)
index 0000000..386aa13
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+
+use yii\helpers\Html;
+use yii\widgets\ActiveForm;
+
+?>
+
+<div class="bonusAddBonusToListOfPhones m-5">
+
+    <?php if (Yii::$app->session->hasFlash('success')): ?>
+        <div class="alert alert-success alert-dismissable">
+            <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
+            <?= Yii::$app->session->getFlash('success') ?>
+        </div>
+    <?php endif; ?>
+
+    <?php ActiveForm::begin(['id' => 'form', 'options' => ['enctype' => 'multipart/form-data']]) ?>
+
+    <div class="row m-2">
+        <div class="col-3">
+            <?= Html::fileInput("phones", null, ['class' => 'btn btn-success', 'accept' => ".txt"])?>
+        </div>
+    </div>
+
+    <div class="row m-2">
+        <div class="col-3">
+            <fieldset style="border: 2px solid black">
+                <legend style="float: none; width: auto; margin: 0">Формат файла (.txt):</legend>
+                <label>79056608060</label><br>
+                <label>79056608060</label><br>
+                <label>79056608060</label>
+            </fieldset>
+        </div>
+    </div>
+
+    <div class="row m-2">
+        <div class="col-3">
+            Бонус: <?= Html::textInput('bonus', null, ['type' => 'number']) ?>
+        </div>
+    </div>
+
+    <div class="row m-2">
+        <div class="col-3">
+            Описание бонуса: <?= Html::textInput('name', 'Подарочные бонусы') ?>
+        </div>
+    </div>
+
+    <div class="row m-2">
+        <div class="col-3">
+            Продолжительность действия бонуса: <?= Html::textInput('duration', 366, ['type' => 'number']) ?>
+        </div>
+    </div>
+
+    <div class="row m-2">
+        <div class="col-1">
+            <?= Html::submitButton('Начислить бонус', ['class' => 'btn btn-success', 'onclick' => 'checkSubmit(event);'])?>
+        </div>
+    </div>
+
+    <?php ActiveForm::end() ?>
+
+    <span id="error" style="display: none; color: red">Введите бонус и подвесте текстовый файл со списком телефонов, и опишите причину бонуса</span>
+</div>
+
+<script>
+    function checkSubmit(event) {
+        if (document.getElementById('form').bonus.value < 100 ||
+            document.getElementById('form').phones.value == '' ||
+            document.getElementById('form').name.value == '' ||
+            document.getElementById('form').duration.value <= 0
+        ) {
+            event.preventDefault();
+            document.getElementById("error").style.display = 'block';
+        }
+    }
+</script>
\ No newline at end of file