From: marina Date: Mon, 28 Apr 2025 11:53:15 +0000 (+0300) Subject: ERP-402 Добавить в ЛК Флориста расчёт премии за авторские букеты X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=4a9c45ec56c00724bb91be0fc792a806674becef;p=erp24_rep%2Fyii-erp24%2F.git ERP-402 Добавить в ЛК Флориста расчёт премии за авторские букеты --- diff --git a/erp24/services/BonusService.php b/erp24/services/BonusService.php index 0a5d592a..14b26bcd 100755 --- a/erp24/services/BonusService.php +++ b/erp24/services/BonusService.php @@ -116,6 +116,12 @@ class BonusService } + public function getAuthorBonusCoefficient($rowDate) : float + { + return 0.01; + } + + public function getSumConversionGameBonusToMoney($adminSumGameBonus, $yearSelect, $monthWithZeroSelect) { $base = 1; diff --git a/erp24/services/CabinetService.php b/erp24/services/CabinetService.php index 5def7552..bee486d3 100755 --- a/erp24/services/CabinetService.php +++ b/erp24/services/CabinetService.php @@ -2746,7 +2746,7 @@ class CabinetService if (!empty($personRetentionСommentText)) { $personRetentionСomment = $personRetentionСommentText; } - $personPrepaidExpense = ArrayHelper::getValue($personBonusesArray, 'prepaid_expense'); // Аванс + $personPrepaidExpense = ArrayHelper::getValue($personBonusesArray, 'prepaid_expense') ?? 0; // Аванс $personCounting = ArrayHelper::getValue($personBonusesArray, 'counting'); // Подсчёт $personVacationDay = ArrayHelper::getValue($personBonusesArray, 'vacation_day'); // Оплаченный отпуск $personVacationPay = $personVacationDay * $normalCostShift;//Стоимость одной смены @@ -2877,6 +2877,29 @@ class CabinetService $onePartHolidayPremium = 0; $personHolidayShiftCount = 0; + $showAuthorPremium = true; + if ($dateTo <= '2025-04-01') { + $showAuthorPremium = false; + } + + $premiumByAuthor = $this->getPremiumByAuthor( + $employeeSelectStoreId, + $adminGuid, + $dateFrom, + $dateTo, + $isAdministrator, + $showAuthorPremium + ); + + $salesAuthor = ArrayHelper::getValue($premiumByAuthor, 'salesAuthor') ?? 0; + $salaryAuthor = ArrayHelper::getValue($premiumByAuthor, 'salaryAuthor') ?? 0; + $salaryMakeAuthor = ArrayHelper::getValue($premiumByAuthor, 'salaryMakeAuthor') ?? 0; + $bonusSalaryAuthor = ArrayHelper::getValue($premiumByAuthor, 'bonusSalaryAuthor') ?? 0; + $makeAuthor = ArrayHelper::getValue($premiumByAuthor, 'makeAuthor') ?? 0; + $bonusMakeAuthor = ArrayHelper::getValue($premiumByAuthor, 'bonusMakeAuthor') ?? 0; + $authorPrime = ArrayHelper::getValue($premiumByAuthor, 'authorPrime') ?? 0; + + if ($showHolidayVersion) { // Премирование на праздники $consolidatedArrResSalariesByFocusGroup = SalaryHelper::getSalariesByFocusGroup( @@ -3101,6 +3124,8 @@ false 'Премия за продажи пиротехники' => $userSalarySalutPremium, 'Премия за продажи матрицы' => $bonusSalaryMatrix, 'Премия за сборку матрицы' => $bonusMakeMatrix, + 'Премия за продажи авторских букетов' => $bonusSalaryAuthor, + 'Премия за сборку авторских букетов' => $bonusMakeAuthor, 'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium, 'Премия за качество (' . $userQualityPercent . '%)' => $userQualityPremium, 'Командный бонус' => $teamBonusValue, @@ -3160,6 +3185,9 @@ false 'Премия за продажи пиротехники' => $userSalarySalutPremium, // 'Премия за продажи матрицы' => $bonusSalaryMatrix, // 'Премия за сборку матрицы' => $bonusMakeMatrix, // + 'Премия за продажи авторских букетов' => $bonusSalaryAuthor, + 'Премия за сборку авторских букетов' => $bonusMakeAuthor, + 'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium, ]; @@ -3220,6 +3248,8 @@ false 'Премия за продажи пиротехники' => $userSalarySalutPremium, // 'Премия за продажи матрицы' => $bonusSalaryMatrix, // 'Премия за сборку матрицы' => $bonusMakeMatrix, // + 'Премия за продажи авторских букетов' => $bonusSalaryAuthor, + 'Премия за сборку авторских букетов' => $bonusMakeAuthor, 'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium, 'Премия за качество (' . $userQualityPercent . '%)' => $userQualityPremium, 'Командный бонус' => $teamBonusValue, @@ -3311,6 +3341,8 @@ false 'Премия за продажи пиротехники' => $userSalarySalutPremium, // 'Премия за продажи матрицы' => $bonusSalaryMatrix, // 'Премия за сборку матрицы' => $bonusMakeMatrix, // + 'Премия за продажи авторских букетов' => $bonusSalaryAuthor, + 'Премия за сборку авторских букетов' => $bonusMakeAuthor, 'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium, ]; @@ -3522,9 +3554,17 @@ false 'makeMatrix' => $makeMatrix ?? [], 'salaryMakeMatrix' => $salaryMakeMatrix ?? 0, 'bonusMakeMatrix' => $bonusMakeMatrix ?? 0, - 'matrixPrime' => $matrixPrime ?? 0, + 'salesAuthor' => $salesAuthor ?? [], + 'salaryAuthor' => $salaryAuthor ?? 0, + 'bonusSalaryAuthor' => $bonusSalaryAuthor ?? 0, + 'makeAuthor' => $makeAuthor ?? [], + 'salaryMakeAuthor' => $salaryMakeAuthor ?? 0, + 'bonusMakeAuthor' => $bonusMakeAuthor ?? 0, + 'authorPrime' => $authorPrime ?? 0, + 'showAuthorPremium' => $showAuthorPremium, + 'possibleSumValuesAdministrator' => $possibleSumValuesAdministrator ?? [], 'allPossibleSumValuesAdministrator' => $allPossibleSumValuesAdministrator ?? 0, @@ -8230,14 +8270,19 @@ Group BY admin_id $adminGuid, $dateFrom, $dateTo, - $isAdministrator - ): array - { + $isAdministrator, + $showAuthorPremium + ): array { + if (!$showAuthorPremium) { + return []; + } + $adminGuidDateArr = []; $adminGuidArrAll = []; - - $dates = ['dateFrom' => $dateFrom, 'dateTo' => $dateTo]; + $dates = [ + ['dateFrom' => $dateFrom, 'dateTo' => $dateTo] + ]; $salesAuthorTemp = []; $makeAuthorTemp = []; @@ -8256,6 +8301,7 @@ Group BY admin_id } } + // Получаем данные о продажах и сборке $salesAuthorRow = $this->salesService->getAuthorSalesProducts($adminGuid, $dateFromRow, $dateToRow, $isAdministrator, $adminGuids); $salesAuthorTemp = array_merge($salesAuthorTemp, $salesAuthorRow); @@ -8275,8 +8321,11 @@ Group BY admin_id $bonusSalaryAuthor = 0; $salesAuthor = $salesAuthorTemp; + // Рассчитываем премии для продаж foreach ($salesAuthorTemp as $keySalesAuthor => $row) { - $rowBonus = $row["summ"] * 0.01; + // Вводим бонус + $matrixBonusCoefficientRow = $this->bonusService->getAuthorBonusCoefficient($row['date']); + $rowBonus = $row["summ"] * $matrixBonusCoefficientRow; $salesAuthor[$keySalesAuthor]["bonus"] = $rowBonus; if ($row["operation"] == Sales::OPERATION_SALE) { @@ -8292,7 +8341,6 @@ Group BY admin_id $adminNameRow = $adminGuidNames[$row["seller_id"]] ?? ''; $salesAuthor[$keySalesAuthor]["admin_name"] = $adminNameRow; - } $bonusSalaryAuthor = round($bonusSalaryAuthor); @@ -8301,8 +8349,11 @@ Group BY admin_id $bonusMakeAuthor = 0; $makeAuthor = $makeAuthorTemp; + // Рассчитываем премии для собранных букетов foreach ($makeAuthorTemp as $keyMakeAuthor => $row) { - $rowBonus = $row["summ"] * 0.01; + // Вводим бонус + $matrixBonusCoefficientRow = $this->bonusService->getAuthorBonusCoefficient($row['date']); + $rowBonus = $row["summ"] * $matrixBonusCoefficientRow; $makeAuthor[$keyMakeAuthor]["bonus"] = $rowBonus; if ($row["operation"] == Sales::OPERATION_SALE) { @@ -8318,11 +8369,11 @@ Group BY admin_id $adminNameRow = $adminGuidNames[$row["seller_id"]] ?? ''; $makeAuthor[$keyMakeAuthor]["admin_name"] = $adminNameRow; - } $bonusMakeAuthor = round($bonusMakeAuthor); + // Итоговая премия сборщика $authorPrime = $bonusSalaryAuthor + $bonusMakeAuthor; return [ diff --git a/erp24/services/SalesService.php b/erp24/services/SalesService.php index 4c72ab47..a7336524 100755 --- a/erp24/services/SalesService.php +++ b/erp24/services/SalesService.php @@ -1102,7 +1102,7 @@ class SalesService * @return array * @throws \yii\db\Exception */ - public function getMatrixSalesProducts(string $adminGuid, string $dateFrom, string $dateTo, $isAdministrator, $adminGuids = null): array + public function getMatrixSalesProducts(string $adminGuid, string $dateFrom, string $dateTo, $isAdministrator, $adminGuids = null): array { $adminsGuids = $this->adminsGuids; @@ -1339,6 +1339,8 @@ class SalesService $dateTimeEndDay = true; } + $dateFrom = !empty($dateFrom) ? max($dateFrom, '2025-04-01') : '2025-04-01'; + $dateTo = $dateTo ?? null; $connection = Yii::$app->getDb(); $command = $connection->createCommand(" @@ -1355,9 +1357,9 @@ class SalesService s.order_id, s.operation FROM sales s - LEFT JOIN sales_products sp ON sp.check_id = s.id + 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 + LEFT JOIN products_class pc ON p1.id = pc.category_id WHERE sp.seller_id IN (:admin_guid) AND (s.order_id = '' OR s.order_id = '0') AND pc.tip = :tip @@ -1396,6 +1398,9 @@ class SalesService $dateTimeEndDay = true; } + $dateFrom = !empty($dateFrom) ? max($dateFrom, '2025-04-01') : '2025-04-01'; + $dateTo = $dateTo ?? null; + $connection = Yii::$app->getDb(); $command = $connection->createCommand(" SELECT @@ -1413,19 +1418,17 @@ class SalesService 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 + LEFT JOIN products_class pc ON p1.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%', + ':date_to' => $dateTo ]); diff --git a/erp24/views/cabinet202310/_personal_values.php b/erp24/views/cabinet202310/_personal_values.php index 9602612b..3efd5cc9 100755 --- a/erp24/views/cabinet202310/_personal_values.php +++ b/erp24/views/cabinet202310/_personal_values.php @@ -82,10 +82,10 @@ if (!empty($userSalaryServices)) { echo '
Премия за продажу услуг 10% : ' . HtmlHelper::getNumberFormat($userSalaryServicesPremium) . ' руб'; echo $this->render('_table_salary_checks', [ - 'arrUsersSalary' => $arrUsersSalaryCheck['services'], - 'tableName' => 'продажи услуг', - 'userSalarySum' => $userSalaryServices, - ]); + 'arrUsersSalary' => $arrUsersSalaryCheck['services'], + 'tableName' => 'продажи услуг', + 'userSalarySum' => $userSalaryServices, + ]); } else { echo '
Факта продажи услуг нет
'; @@ -148,16 +148,17 @@ if ($isShowBonusOtherItems) { } } $textInfoMatrix = ' 2% '; -if (date('Y-m-d') < '2022-12-01' ) { +$textInfoAuthor = ' 1%'; +if (date('Y-m-d') < '2022-12-01') { $textInfoMatrix = ' 2,5% (с 16.11.2022 2%) '; } if (!empty($salesMatrix)) { - echo"

"; - echo"

Букеты по матрице

"; - echo"
Проданные букеты по матрице
"; + echo "

"; + echo "

Букеты по матрице

"; + echo "
Проданные букеты по матрице
"; $tbl = ''; @@ -165,7 +166,7 @@ if (!empty($salesMatrix)) { $tbl .= "" . $row["date"] . " " . $row["operation"] . " " . $row["number"] . " " . $row["product_name"] . " " . HtmlHelper::getNumberFormat($row["summ"]) . " " . HtmlHelper::getNumberFormat($row["bonus"]) . " "; } - echo' + echo '
показать список
@@ -195,7 +196,7 @@ if (!empty($salesMatrix)) { echo '
Продаж по матрице нет'; } -echo"
Собранные букеты по матрице
"; +echo "
Собранные букеты по матрице
"; if (!empty($makeMatrix)) { @@ -205,7 +206,7 @@ if (!empty($makeMatrix)) { $tbl2 .= "" . $row["date"] . " " . $row["operation"] . " " . $row["number"] . " " . $row["product_name"] . " " . HtmlHelper::getNumberFormat($row["summ"]) . " " . HtmlHelper::getNumberFormat($row["bonus"]) . " "; } - echo' + echo '
показать список
@@ -240,6 +241,94 @@ if (!empty($matrixPrime)) { echo '
'; } +if ($showAuthorPremium) { + if (!empty($salesAuthor)) { + + echo "

"; + echo "

Авторские букеты

"; + echo "
Проданные авторские букеты
"; + + $tblAuthorSales = ''; + + foreach ($salesAuthor as $row) { + $tblAuthorSales .= "" . $row["date"] . " " . $row["operation"] . " " . $row["number"] . " " . $row["product_name"] . " " . HtmlHelper::getNumberFormat($row["summ"]) . " " . HtmlHelper::getNumberFormat($row["bonus"]) . " "; + } + + echo ' +
+ показать список +
+ + + + + + + + + + ' . $tblAuthorSales . ' +
ДатаОперацияНазвание чекаБукетСуммаБонус
+

+ Число чеков ' . count($salesAuthor) . ' +

+
+
+
+ Сумма продаж авторских букетов ' . HtmlHelper::getNumberFormat($salaryAuthor) . ' руб * ' . $textInfoAuthor . ' = ' . HtmlHelper::getNumberFormat($bonusSalaryAuthor) . ' руб +
+
+ +
'; + } else { + echo '
Продаж авторских букетов нет
'; + } + + if (!empty($makeAuthor)) { + echo "
Собранные авторские букеты
"; + + $tblAuthorMake = ''; + + foreach ($makeAuthor as $row) { + $tblAuthorMake .= "" . $row["date"] . " " . $row["operation"] . " " . $row["number"] . " " . $row["product_name"] . " " . HtmlHelper::getNumberFormat($row["summ"]) . " " . HtmlHelper::getNumberFormat($row["bonus"]) . " "; + } + + echo ' +
+ показать список +
+ + + + + + + + + + ' . $tblAuthorMake . ' +
ДатаОперацияНазвание чекаБукетСуммаБонус
+

+ Число чеков ' . count($makeAuthor) . ' +

+
+
+
+ Сумма продаж собранных авторских букетов ' . HtmlHelper::getNumberFormat($salaryMakeAuthor) . ' руб * ' . $textInfoAuthor . ' = ' . HtmlHelper::getNumberFormat($bonusMakeAuthor) . ' руб +
+
+ +
'; + } else { + echo 'Собранных авторских букетов нет
'; + } + + if (!empty($authorPrime)) { + echo '
Сумма премии с авторских букетов ' . HtmlHelper::getNumberFormat($authorPrime) . ' руб
'; + echo '
'; + } +} + /**/ echo '

Премия за качество

'; diff --git a/erp24/views/cabinet202310/administrator.php b/erp24/views/cabinet202310/administrator.php index 91e5084e..f69a9d9a 100755 --- a/erp24/views/cabinet202310/administrator.php +++ b/erp24/views/cabinet202310/administrator.php @@ -298,7 +298,15 @@ $this->params['breadcrumbs'][] = $this->title; 'teamBonus' => $teamBonus, 'teamBonusValue' => $teamBonusValue, 'adminTeamPayrollTable' => $adminTeamPayrollTable, - 'showHolidayVersion' => $showHolidayVersion + 'showHolidayVersion' => $showHolidayVersion, + 'salesAuthor' => $salesAuthor , + 'salaryAuthor' => $salaryAuthor, + 'bonusSalaryAuthor' => $bonusSalaryAuthor, + 'makeAuthor' => $makeAuthor , + 'salaryMakeAuthor' => $salaryMakeAuthor, + 'bonusMakeAuthor' => $bonusMakeAuthor, + 'authorPrime' => $authorPrime, + 'showAuthorPremium' => $showAuthorPremium ]); ?> diff --git a/erp24/views/cabinet202310/florist.php b/erp24/views/cabinet202310/florist.php index 1f3f07c8..e1bc967f 100755 --- a/erp24/views/cabinet202310/florist.php +++ b/erp24/views/cabinet202310/florist.php @@ -302,7 +302,15 @@ $this->params['breadcrumbs'][] = $this->title; 'userQualityPremium' => $userQualityPremium, 'teamBonus' => $teamBonus, 'teamBonusValue' => $teamBonusValue, - 'showHolidayVersion' => $showHolidayVersion + 'showHolidayVersion' => $showHolidayVersion, + 'salesAuthor' => $salesAuthor , + 'salaryAuthor' => $salaryAuthor, + 'makeAuthor' => $makeAuthor , + 'salaryMakeAuthor' => $salaryMakeAuthor, + 'bonusMakeAuthor' => $bonusMakeAuthor, + 'authorPrime' => $authorPrime, + 'bonusSalaryAuthor' => $bonusSalaryAuthor, + 'showAuthorPremium' => $showAuthorPremium ]); ?>