]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-402 Добавить в ЛК Флориста расчёт премии за авторские букеты
authormarina <m.zozirova@gmail.com>
Thu, 24 Apr 2025 21:33:44 +0000 (00:33 +0300)
committermarina <m.zozirova@gmail.com>
Thu, 24 Apr 2025 21:33:44 +0000 (00:33 +0300)
erp24/records/ProductsClass.php
erp24/services/CabinetService.php
erp24/services/SalesService.php

index e935f3c1d35bb317cfbdc89a8e4b42d4b4348516..939f040cec878f59e06d8642933f6591e525d4d5 100755 (executable)
@@ -18,6 +18,7 @@ class ProductsClass extends \yii\db\ActiveRecord
     public const HINT_SERVICES_DELIVERY = 'services_delivery';
     public const HINT_SALUT = 'salut';
     public const HINT_MATRIX = 'matrix';
+    public const HINT_AUTHOR = 'author';
     public const HINT_MARKETPLACE = 'marketplace';
     public const HINT_MARKETPLACE_ADDITIONAL = 'marketplace_additional';
     public const HINT_RELATED = 'related';
index f89daafe76f58f6b24eb08137075314579d5343d..5def7552649da0b2ffff0f6038d0ca5601fdd7ce 100755 (executable)
@@ -8224,4 +8224,116 @@ Group BY admin_id
             'adminGuidDateArrByMatrix' => $adminGuidArrAll,
         ];
     }
+
+    public function getPremiumByAuthor(
+        $employeeSelectStoreId,
+        $adminGuid,
+        $dateFrom,
+        $dateTo,
+        $isAdministrator
+    ): array
+    {
+        $adminGuidDateArr = [];
+        $adminGuidArrAll = [];
+
+
+        $dates = ['dateFrom' => $dateFrom, 'dateTo' => $dateTo];
+
+        $salesAuthorTemp = [];
+        $makeAuthorTemp = [];
+
+        foreach ($dates as $key => $datesRow) {
+            $dateFromRow = $datesRow['dateFrom'];
+            $dateToRow = $datesRow['dateTo'];
+            $adminGuids = [];
+
+            if ($dateFromRow == $dateToRow && !empty($adminGuidDateArr)) {
+                if (array_key_exists($dateFromRow, $adminGuidDateArr)) {
+                    $adminGuids = $adminGuidDateArr[$dateFromRow];
+                    $adminGuidArrAll[] = $adminGuids;
+                } else {
+                    continue;
+                }
+            }
+
+            $salesAuthorRow = $this->salesService->getAuthorSalesProducts($adminGuid, $dateFromRow, $dateToRow, $isAdministrator, $adminGuids);
+            $salesAuthorTemp = array_merge($salesAuthorTemp, $salesAuthorRow);
+
+            $makeAuthorRow = $this->salesService->getAuthorMakeProducts($adminGuid, $dateFromRow, $dateToRow, $isAdministrator, $adminGuids);
+            $makeAuthorTemp = array_merge($makeAuthorTemp, $makeAuthorRow);
+        }
+
+        $productAuthorTemp = array_merge($salesAuthorTemp, $makeAuthorTemp);
+
+        $adminGuidNames = Admin::getAdminGuidNames();
+
+        $authorProductGuids = ArrayHelper::getColumn($productAuthorTemp, 'product_guid');
+        $authorProducts = Products1c::getProducts1cByType('products', $authorProductGuids);
+        $authorProductNames = ArrayHelper::map($authorProducts, 'id', 'name');
+
+        $salaryAuthor = 0;
+        $bonusSalaryAuthor = 0;
+        $salesAuthor = $salesAuthorTemp;
+
+        foreach ($salesAuthorTemp as $keySalesAuthor => $row) {
+            $rowBonus = $row["summ"] * 0.01;
+            $salesAuthor[$keySalesAuthor]["bonus"] = $rowBonus;
+
+            if ($row["operation"] == Sales::OPERATION_SALE) {
+                $salaryAuthor += $row["summ"];
+                $bonusSalaryAuthor += $rowBonus;
+            } elseif ($row["operation"] == Sales::OPERATION_RETURN) {
+                $salaryAuthor -= $row["summ"];
+                $bonusSalaryAuthor -= $rowBonus;
+            }
+
+            $productNameRow = $authorProductNames[$row["product_guid"]] ?? '';
+            $salesAuthor[$keySalesAuthor]["product_name"] = $productNameRow;
+
+            $adminNameRow = $adminGuidNames[$row["seller_id"]] ?? '';
+            $salesAuthor[$keySalesAuthor]["admin_name"] = $adminNameRow;
+
+        }
+
+        $bonusSalaryAuthor = round($bonusSalaryAuthor);
+
+        $salaryMakeAuthor = 0;
+        $bonusMakeAuthor = 0;
+        $makeAuthor = $makeAuthorTemp;
+
+        foreach ($makeAuthorTemp as $keyMakeAuthor => $row) {
+            $rowBonus = $row["summ"] * 0.01;
+            $makeAuthor[$keyMakeAuthor]["bonus"] = $rowBonus;
+
+            if ($row["operation"] == Sales::OPERATION_SALE) {
+                $salaryMakeAuthor += $row["summ"];
+                $bonusMakeAuthor += $rowBonus;
+            } elseif ($row["operation"] == Sales::OPERATION_RETURN) {
+                $salaryMakeAuthor -= $row["summ"];
+                $bonusMakeAuthor -= $rowBonus;
+            }
+
+            $productNameRow = $authorProductNames[$row["product_guid"]] ?? '';
+            $makeAuthor[$keyMakeAuthor]["product_name"] = $productNameRow;
+
+            $adminNameRow = $adminGuidNames[$row["seller_id"]] ?? '';
+            $makeAuthor[$keyMakeAuthor]["admin_name"] = $adminNameRow;
+
+        }
+
+        $bonusMakeAuthor = round($bonusMakeAuthor);
+
+        $authorPrime = $bonusSalaryAuthor + $bonusMakeAuthor;
+
+        return [
+            'salesAuthor' => $salesAuthor,
+            'bonusSalaryAuthor' => $bonusSalaryAuthor,
+            'makeAuthor' => $makeAuthor,
+            'salaryAuthor' => $salaryAuthor,
+            'salaryMakeAuthor' => $salaryMakeAuthor,
+            'bonusMakeAuthor' => $bonusMakeAuthor,
+            'authorPrime' => $authorPrime,
+            'adminGuidDateArrByAuthor' => $adminGuidArrAll,
+        ];
+    }
 }
index aa1f367a820adb72996de5f2e9939e3b0012a0cf..4c72ab470c29076cc759f6e7467d51b8409fe557 100755 (executable)
@@ -6,6 +6,7 @@ use DateTime;
 use Yii;
 use yii\helpers\ArrayHelper;
 use yii_app\helpers\DateHelper;
+use yii_app\records\ProductsClass;
 use yii_app\records\Sales;
 
 class SalesService
@@ -1317,6 +1318,124 @@ class SalesService
     }
 
 
+    public function getAuthorMakeProducts(string $adminGuid, string $dateFrom, string $dateTo, bool $isAdministrator, $adminGuids = null): array
+    {
+        $adminsGuids = $this->adminsGuids;
+
+        $adminId = null;
+        if (array_key_exists($adminGuid, $adminsGuids) && empty($adminGuids)) {
+            $adminId = ArrayHelper::getValue($adminsGuids, $adminGuid);
+        }
+
+        if (!empty($adminGuids) && is_array($adminGuids)) {
+            $adminGuid = implode("','", $adminGuids);
+        }
+
+        $dateTimeStartDay = false;
+        $dateTimeEndDay = false;
+
+        if ($isAdministrator) {
+            $dateTimeStartDay = true;
+            $dateTimeEndDay = true;
+        }
+
+
+        $connection = Yii::$app->getDb();
+        $command = $connection->createCommand("
+    SELECT
+        DISTINCT s.id,
+        sp.seller_id,
+        s.date,
+        s.number,
+        sp.summ AS summ,
+        sp.product_id AS product_guid,
+        s.summ AS sales_summ,
+        s.skidka,
+        0 AS bonus,
+        s.order_id,
+        s.operation
+    FROM sales s
+    LEFT JOIN sales_products sp ON sp.check_id = s.id
+    LEFT JOIN products_1c p1 ON p1.id = sp.product_id
+    LEFT JOIN products_class pc ON p1.parent_id = pc.category_id
+    WHERE sp.seller_id IN (:admin_guid)
+      AND (s.order_id = '' OR s.order_id = '0')
+      AND pc.tip = :tip
+      AND s.date >= :date_from
+      AND s.date <= :date_to
+    ORDER BY s.date ASC
+", [
+            ':admin_guid' => $adminGuid,
+            ':tip' => ProductsClass::HINT_AUTHOR,
+            ':date_from' => $dateFrom,
+            ':date_to' => $dateTo,
+        ]);
+
+        return $command->queryAll();
+    }
+
+
+    public function getAuthorSalesProducts(string $adminGuid, string $dateFrom, string $dateTo, $isAdministrator, $adminGuids = null): array
+    {
+        $adminsGuids = $this->adminsGuids;
+
+        $adminId = null;
+        if (array_key_exists($adminGuid, $adminsGuids) && empty($adminGuids)) {
+            $adminId = ArrayHelper::getValue($adminsGuids, $adminGuid);
+        }
+
+        if (!empty($adminGuids) && is_array($adminGuids)) {
+            $adminGuid = implode("','", $adminGuids);
+        }
+
+        $dateTimeStartDay = false;
+        $dateTimeEndDay = false;
+
+        if ($isAdministrator) {
+            $dateTimeStartDay = true;
+            $dateTimeEndDay = true;
+        }
+
+        $connection = Yii::$app->getDb();
+        $command = $connection->createCommand("
+    SELECT
+        DISTINCT s.id,
+        s.seller_id,
+        s.date,
+        s.number,
+        sp.summ AS summ,
+        sp.product_id AS product_guid,
+        s.summ AS sales_summ,
+        s.skidka,
+        0 AS bonus,
+        s.order_id,
+        s.operation
+    FROM sales s
+    LEFT JOIN sales_products sp ON sp.check_id = s.id
+    LEFT JOIN products_1c p1 ON p1.id = sp.product_id
+    LEFT JOIN products_class pc ON p1.parent_id = pc.category_id
+    WHERE s.seller_id IN (:admin_guid)
+      AND pc.tip = :tip
+      AND s.date >= :date_from
+      AND s.date <= :date_to
+      AND s.number ILIKE :number
+    ORDER BY s.date ASC
+", [
+            ':admin_guid' => $adminGuid,
+            ':tip' => ProductsClass::HINT_AUTHOR,
+            ':date_from' => $dateFrom,
+            ':date_to' => $dateTo,
+            ':number' => '%00ЦУ-049281%',
+        ]);
+
+
+
+        $action = $command->getRawSql();
+
+        return $command->queryAll();
+    }
+
+
     /**
      * @param string $adminGuid
      * @param string $dateFrom