]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-36 Собрать информацию обо всех клиентах, кому не начислились бонусы за последний...
authorMarina Zozirova <marina.zozirova@erp-flowers.ru>
Thu, 20 Jun 2024 06:12:31 +0000 (06:12 +0000)
committerAleksey Filippov <aleksey.filippov@erp-flowers.ru>
Thu, 20 Jun 2024 06:12:31 +0000 (06:12 +0000)
erp24/actions/bonus/AddBonuses.php [new file with mode: 0644]
erp24/controllers/BonusController.php
erp24/records/Sales.php
erp24/views/bonus/add-bonuses.php [new file with mode: 0644]

diff --git a/erp24/actions/bonus/AddBonuses.php b/erp24/actions/bonus/AddBonuses.php
new file mode 100644 (file)
index 0000000..e5c56b7
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+namespace yii_app\actions\bonus;
+
+use yii\base\Action;
+use yii\data\ActiveDataProvider;
+use yii\helpers\ArrayHelper;
+use yii_app\records\Sales;
+use yii_app\records\UsersBonus;
+
+class AddBonuses extends Action
+{
+    public function run()
+    {
+        $action = \Yii::$app->request->post('action');
+
+        $query = Sales::find()
+            ->leftJoin('users_bonus us', 'us.check_id = sales.id')
+            ->leftJoin('users u', 'u.phone::bigint = sales.phone')
+            ->andWhere(['operation' => Sales::OPERATION_SALE])
+            ->andWhere(['>=', 'sales.date', '2024-04-27'])
+            ->andWhere(['!=', 'sales.phone', '0'])
+            ->andWhere(['is not', 'u.id', null])
+            ->andWhere(['not in', 'sales.id', ArrayHelper::getColumn(Sales::find()->andWhere(['operation' => Sales::OPERATION_RETURN])->all(), 'sales_check')])
+            ->andWhere(['us.check_id' => null]);
+
+        $query->addSelect(['sales.*',
+            new \yii\db\Expression('CASE WHEN (
+                    SELECT true
+                    FROM sales s2
+                    WHERE s2.phone = sales.phone
+                      AND s2.date < sales.date
+                      order by s2.date asc
+                      limit 1
+                ) THEN false ELSE true END AS is_first')
+        ]);
+
+
+        if ($action == 'showPlus') {
+
+            $query->addSelect(['sales.*',
+                new \yii\db\Expression('CASE WHEN EXISTS (
+            SELECT 1
+            FROM users_bonus us
+            WHERE us.phone::int = sales.phone
+              AND us.check_id = sales.id
+        ) THEN TRUE ELSE FALSE END AS is_success')
+            ]);
+        }
+
+        if ($action == 'applyPlus') {
+
+            $sales = $query->all();
+
+            foreach ($sales as $sale) {
+                if ($sale->is_first) {
+                    $twentyPercent = new UsersBonus();
+                    $twentyPercent->phone = strval($sale->phone);
+                    $twentyPercent->date = date('Y-m-d H:i:s');
+                    $twentyPercent->site_id = 1;
+                    $twentyPercent->setka_id = 1;
+                    $twentyPercent->tip = 'plus';
+                    $twentyPercent->tip_sale = 'sale';
+                    $twentyPercent->check_id = $sale->id;
+                    $twentyPercent->price = $sale->summ;
+                    $twentyPercent->admin_id = 1294;
+                    $twentyPercent->store_id = $sale->store_id;
+                    $twentyPercent->date_start = $sale->date;
+                    $twentyPercent->name = "Возврат с покупки 20%. Чек " . $sale->number . " от "
+                        . date("d.m.Y H:i:s", strtotime($sale->date)) . ". Сумма чека " . $sale->summ;
+                    $sale->date = date('Y-m-d H:i:s');
+                    $twentyPercent->bonus = floor($sale->summ * 0.2);
+                    $twentyPercent->date_end = date('Y-m-d H:i:s', strtotime('+90 day', strtotime($sale->date)));
+                    $twentyPercent->save();
+                }
+
+                $userBonus = new UsersBonus();
+                $userBonus->phone = strval($sale->phone);
+                $userBonus->name = "Возврат с покупки 10%. Чек " . $sale->number . " от "
+                    . date("d.m.Y H:i:s", strtotime($sale->date)) . ". Сумма чека " . $sale->summ;
+                $userBonus->date = date('Y-m-d H:i:s');
+                $userBonus->site_id = 1;
+                $userBonus->setka_id = 1;
+                $userBonus->tip = 'plus';
+                $userBonus->tip_sale = 'sale';
+                $userBonus->check_id = $sale->id;
+                $userBonus->price = $sale->summ;
+                $userBonus->admin_id = 1294;
+                $userBonus->store_id = $sale->store_id;
+                $userBonus->bonus = floor($sale->summ * 0.1);
+                $userBonus->date_start = $sale->date;
+                $userBonus->date_end = date('Y-m-d H:i:s', strtotime('+365 day', strtotime($userBonus->date)));
+                $userBonus->save();
+            }
+        }
+
+        $dataProvider = new ActiveDataProvider([
+            'query' => $query,
+            'pagination' => false,
+        ]);
+
+        return $this->controller->render('add-bonuses', [
+            'action' => $action,
+            'dataProvider' => $dataProvider
+        ]);
+    }
+}
+
+
+
index 5eb05a3be509e96d5e5df18d844b51084d636160..a0c7197c28e30aa39a8b1046b92c5f3279ffe9c8 100644 (file)
@@ -22,6 +22,7 @@ class BonusController extends \yii\web\Controller
             'ajax-bonus-remove' => \yii_app\actions\bonus\AjaxBonusRemoveAction::class,
             'sex' => \yii_app\actions\bonus\SexAction::class,
             'add-bonus-if-written-off' => \yii_app\actions\bonus\AddBonusIfWrittenOffAction::class,
+            'add-bonuses' => \yii_app\actions\bonus\AddBonuses::class,
         ];
     }
     public function actionBonusUsers() { return $this->render('bonus-users'); }
index 0995664803d47602453ef12163e63552a5f64065..626d7db8a3571c0cb924d5b709de51bce6abd389 100755 (executable)
@@ -38,6 +38,7 @@ use yii\db\Expression;
  */
 class Sales extends \yii\db\ActiveRecord
 {
+    public $is_first;
     public $sum;
     const OPERATION_SALE = "Продажа";
     const OPERATION_RETURN = "Возврат";
diff --git a/erp24/views/bonus/add-bonuses.php b/erp24/views/bonus/add-bonuses.php
new file mode 100644 (file)
index 0000000..9f5bdba
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+use yii\grid\GridView;
+use \yii\helpers\Html;
+use \yii\widgets\ActiveForm;
+
+/** @var $action string */
+/** @var $dataProvider */
+
+?>
+
+<?php $columns = array(
+    ['class' => 'yii\grid\SerialColumn'],
+
+    [
+        'attribute' => 'date',
+        'format' => 'date',
+        'label' => 'Дата',
+    ],
+    [
+        'attribute' => 'number',
+        'format' => 'raw',
+        'label' => 'Номер чека',
+    ],
+    [
+        'attribute' => 'phone',
+        'label' => 'Пользователь',
+    ],
+    [
+        'attribute' => 'summ',
+        'label' => 'Сумма',
+    ],
+    [
+        'attribute' => 'is_first',
+        'label' => 'Это первая покупка?',
+        'value' => function ($data) {
+            return $data['is_first'] ? 'Да' : 'Нет';
+        }
+    ],
+    [
+        'attribute' => 'bonus_type',
+        'label' => 'Сколько процентов?',
+        'value' => function ($data) {
+            return $data['is_first'] ? '10 + 20' : '10';
+        }
+    ],
+    [
+        'attribute' => 'bonus_type',
+        'label' => 'Сколько начисляем?',
+        'value' => function ($data) {
+            return $data['is_first'] ? $data->summ * 0.1 . " + " . $data->summ * 0.2 : $data->summ * 0.1;
+        }
+    ]
+);
+
+?>
+
+
+<div class="bonusAdd m-5">
+
+    <?php ActiveForm::begin() ?>
+
+    <?= Html::submitButton('Показать кому начислять', ['class' => 'btn btn-success btn-lg', 'name' => 'action', 'value' => 'showPlus']) ?>
+
+    <?= Html::submitButton('Начислить', ['class' => 'btn btn-warning btn-lg', 'name' => 'action', 'value' => 'applyPlus']) ?>
+
+    <?php ActiveForm::end() ?>
+    <pre>
+
+<!--        --><?php //= Html::label("Начисляем: $dataProvider->count"); ?>
+
+        <?= GridView::widget([
+            'dataProvider' => $dataProvider,
+            'columns' => $columns,
+        ]);; ?>
+        </pre>
+</div>