From 5144a499739a4dae52f1ffb6ef03694e7cc3496f Mon Sep 17 00:00:00 2001 From: marina Date: Fri, 25 Apr 2025 00:33:44 +0300 Subject: [PATCH] =?utf8?q?ERP-402=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?utf8?q?=D1=82=D1=8C=20=D0=B2=20=D0=9B=D0=9A=20=D0=A4=D0=BB=D0=BE=D1=80?= =?utf8?q?=D0=B8=D1=81=D1=82=D0=B0=20=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82?= =?utf8?q?=20=D0=BF=D1=80=D0=B5=D0=BC=D0=B8=D0=B8=20=D0=B7=D0=B0=20=D0=B0?= =?utf8?q?=D0=B2=D1=82=D0=BE=D1=80=D1=81=D0=BA=D0=B8=D0=B5=20=D0=B1=D1=83?= =?utf8?q?=D0=BA=D0=B5=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/records/ProductsClass.php | 1 + erp24/services/CabinetService.php | 112 ++++++++++++++++++++++++++++ erp24/services/SalesService.php | 119 ++++++++++++++++++++++++++++++ 3 files changed, 232 insertions(+) diff --git a/erp24/records/ProductsClass.php b/erp24/records/ProductsClass.php index e935f3c1..939f040c 100755 --- a/erp24/records/ProductsClass.php +++ b/erp24/records/ProductsClass.php @@ -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'; diff --git a/erp24/services/CabinetService.php b/erp24/services/CabinetService.php index f89daafe..5def7552 100755 --- a/erp24/services/CabinetService.php +++ b/erp24/services/CabinetService.php @@ -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, + ]; + } } diff --git a/erp24/services/SalesService.php b/erp24/services/SalesService.php index aa1f367a..4c72ab47 100755 --- a/erp24/services/SalesService.php +++ b/erp24/services/SalesService.php @@ -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 -- 2.39.5