--- /dev/null
+<?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
--- /dev/null
+<?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