'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,
+ ];
+ }
}
use Yii;
use yii\helpers\ArrayHelper;
use yii_app\helpers\DateHelper;
+use yii_app\records\ProductsClass;
use yii_app\records\Sales;
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