]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Обновление бонусных балансов
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 25 Jun 2024 07:22:03 +0000 (10:22 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Tue, 25 Jun 2024 07:22:03 +0000 (10:22 +0300)
erp24/commands/BonusController.php

index 72705513020a2f7d0b54de6ca297b944866d6eaa..9b142791de54037b55a4d90f24e59192dea9c84d 100644 (file)
@@ -536,4 +536,95 @@ class BonusController extends Controller
             );
         }
     }
+
+    // bonus/update-user-bonus-balance
+    public function actionUpdateUserBonusBalance () {
+        echo("\n\r" . "<br> setUpdateBonusBalance Start " . date("Y-m-d H:i:s"));
+
+        $days = 5;
+        $days2 = $days + 2;
+        $dateNow = date('Y-m-d');
+        $dateCompare = date('Y-m-d H:i:s', strtotime($dateNow . ' -' . $days2 . ' day'));
+
+        $sales = Sales::find()
+            ->select(['id', 'phone'])
+            ->where(['operation' => Sales::OPERATION_SALE])
+            ->andWhere(['!=', 'phone', 0])
+            ->andWhere(['>', 'date', $dateCompare])
+            ->asArray()
+            ->all();
+
+        $salesIds = ArrayHelper::getColumn($sales, 'id');
+
+        $returns = Sales::find()
+            ->select(['id', 'sales_check'])
+            ->where(['operation' => Sales::OPERATION_RETURN])
+            ->andWhere(['sales_check' => $salesIds])
+            ->all();
+
+        $returnsIds = ArrayHelper::getColumn($returns, 'sales_check');
+        foreach ($sales as $sale) {
+            /** @var $sale Sales */
+            if (!in_array($sale['id'], $returnsIds)) {
+                if (ClientHelper::phoneVerify($sale['phone'])) {
+                    self::updateBonusBalance($sale['phone']);
+                }
+            }
+        }
+    }
+
+    public static function updateBonusBalance($phone): void
+    {
+        $balans = null;
+
+        $user = Users::find()
+            ->where(['phone' => $phone])
+            ->one();
+
+        if (!empty($user)) {
+            $plus = 0;
+
+            $plusPrepared = UsersBonus::find()
+                ->select(['SUM(bonus) as plus', 'phone'])
+                ->where(['phone' => $phone])
+                ->andWhere(['tip' => 'plus'])
+                ->andWhere(['<=', 'date_start', date('Y-m-d')])
+                ->groupBy(['phone'])
+                ->asArray()
+                ->one();
+
+            if (!empty($plusPrepared)) {
+                $plus = $plusPrepared['plus'];
+            }
+
+            $minus = 0;
+
+            $minusPrepared = UsersBonus::find()
+                ->select(['SUM(bonus) as minus', 'phone'])
+                ->where(['phone' => $phone])
+                ->andWhere(['tip' => 'minus'])
+                ->groupBy(['phone'])
+                ->asArray()
+                ->one();
+
+            if (!empty($minusPrepared)) {
+                $minus = $minusPrepared['minus'];
+            }
+
+            $balans = $plus - $minus;
+
+            /** @var Users $user */
+            if ($balans != $user->balans) {
+                $user->balans = $balans;
+
+                $user->save();
+                if ($user->getErrors()) {
+                    LogService::apiErrorLog(json_encode(["error_id" => 32, "error" => $user->getErrors()], JSON_UNESCAPED_UNICODE));
+                }
+                echo(" <br> n\r\ User phone " . $phone . ' new balans ' . $balans);
+            }
+        } else {
+            echo(" <br> n\r\ User phone " . $phone . ' not found ');
+        }
+    }
 }