}
+ public function getAuthorBonusCoefficient($rowDate) : float
+ {
+ return 0.01;
+ }
+
+
public function getSumConversionGameBonusToMoney($adminSumGameBonus, $yearSelect, $monthWithZeroSelect)
{
$base = 1;
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;//Стоимость одной смены
$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(
'Премия за продажи пиротехники' => $userSalarySalutPremium,
'Премия за продажи матрицы' => $bonusSalaryMatrix,
'Премия за сборку матрицы' => $bonusMakeMatrix,
+ 'Премия за продажи авторских букетов' => $bonusSalaryAuthor,
+ 'Премия за сборку авторских букетов' => $bonusMakeAuthor,
'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium,
'Премия за качество (' . $userQualityPercent . '%)' => $userQualityPremium,
'Командный бонус' => $teamBonusValue,
'Премия за продажи пиротехники' => $userSalarySalutPremium, //
'Премия за продажи матрицы' => $bonusSalaryMatrix, //
'Премия за сборку матрицы' => $bonusMakeMatrix, //
+ 'Премия за продажи авторских букетов' => $bonusSalaryAuthor,
+ 'Премия за сборку авторских букетов' => $bonusMakeAuthor,
+
'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium,
];
'Премия за продажи пиротехники' => $userSalarySalutPremium, //
'Премия за продажи матрицы' => $bonusSalaryMatrix, //
'Премия за сборку матрицы' => $bonusMakeMatrix, //
+ 'Премия за продажи авторских букетов' => $bonusSalaryAuthor,
+ 'Премия за сборку авторских букетов' => $bonusMakeAuthor,
'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium,
'Премия за качество (' . $userQualityPercent . '%)' => $userQualityPremium,
'Командный бонус' => $teamBonusValue,
'Премия за продажи пиротехники' => $userSalarySalutPremium, //
'Премия за продажи матрицы' => $bonusSalaryMatrix, //
'Премия за сборку матрицы' => $bonusMakeMatrix, //
+ 'Премия за продажи авторских букетов' => $bonusSalaryAuthor,
+ 'Премия за сборку авторских букетов' => $bonusMakeAuthor,
'Премия за продажи не фокусной продукции (Другие товары)' => $userSalaryOtherItemsPremium,
];
'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,
$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 = [];
}
}
+ // Получаем данные о продажах и сборке
$salesAuthorRow = $this->salesService->getAuthorSalesProducts($adminGuid, $dateFromRow, $dateToRow, $isAdministrator, $adminGuids);
$salesAuthorTemp = array_merge($salesAuthorTemp, $salesAuthorRow);
$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) {
$adminNameRow = $adminGuidNames[$row["seller_id"]] ?? '';
$salesAuthor[$keySalesAuthor]["admin_name"] = $adminNameRow;
-
}
$bonusSalaryAuthor = round($bonusSalaryAuthor);
$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) {
$adminNameRow = $adminGuidNames[$row["seller_id"]] ?? '';
$makeAuthor[$keyMakeAuthor]["admin_name"] = $adminNameRow;
-
}
$bonusMakeAuthor = round($bonusMakeAuthor);
+ // Итоговая премия сборщика
$authorPrime = $bonusSalaryAuthor + $bonusMakeAuthor;
return [
* @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;
$dateTimeEndDay = true;
}
+ $dateFrom = !empty($dateFrom) ? max($dateFrom, '2025-04-01') : '2025-04-01';
+ $dateTo = $dateTo ?? null;
$connection = Yii::$app->getDb();
$command = $connection->createCommand("
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
$dateTimeEndDay = true;
}
+ $dateFrom = !empty($dateFrom) ? max($dateFrom, '2025-04-01') : '2025-04-01';
+ $dateTo = $dateTo ?? null;
+
$connection = Yii::$app->getDb();
$command = $connection->createCommand("
SELECT
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
]);
echo '<br> Премия за продажу услуг 10% : ' . HtmlHelper::getNumberFormat($userSalaryServicesPremium) . ' руб';
echo $this->render('_table_salary_checks', [
- 'arrUsersSalary' => $arrUsersSalaryCheck['services'],
- 'tableName' => 'продажи услуг',
- 'userSalarySum' => $userSalaryServices,
- ]);
+ 'arrUsersSalary' => $arrUsersSalaryCheck['services'],
+ 'tableName' => 'продажи услуг',
+ 'userSalarySum' => $userSalaryServices,
+ ]);
} else {
echo '<br> Факта продажи услуг нет<br>';
}
}
$textInfoMatrix = ' 2% ';
-if (date('Y-m-d') < '2022-12-01' ) {
+$textInfoAuthor = ' 1%';
+if (date('Y-m-d') < '2022-12-01') {
$textInfoMatrix = ' 2,5% <b>(с 16.11.2022 2%)</b> ';
}
if (!empty($salesMatrix)) {
- echo"<br><br>";
- echo"<h4>Букеты по матрице</h4>";
- echo"<h5>Проданные букеты по матрице</h5>";
+ echo "<br><br>";
+ echo "<h4>Букеты по матрице</h4>";
+ echo "<h5>Проданные букеты по матрице</h5>";
$tbl = '';
$tbl .= "<tr><td>" . $row["date"] . " </td><td>" . $row["operation"] . " </td><td> " . $row["number"] . " </td><td> " . $row["product_name"] . " </td><td> " . HtmlHelper::getNumberFormat($row["summ"]) . " </td><td>" . HtmlHelper::getNumberFormat($row["bonus"]) . " </td></tr>";
}
- echo'
+ echo '
<div class="block_info">
<span class="btn_toggle_block" >показать список<i class="arrow down"></i></span>
<div class="block_body block_body_hide">
echo '<br> Продаж по матрице нет';
}
-echo"<h5>Собранные букеты по матрице</h5>";
+echo "<h5>Собранные букеты по матрице</h5>";
if (!empty($makeMatrix)) {
$tbl2 .= "<tr><td>" . $row["date"] . " </td><td>" . $row["operation"] . " </td><td> " . $row["number"] . " </td><td> " . $row["product_name"] . " </td><td> " . HtmlHelper::getNumberFormat($row["summ"]) . " </td><td>" . HtmlHelper::getNumberFormat($row["bonus"]) . " </td></tr>";
}
- echo'
+ echo '
<div class="block_info">
<span class="btn_toggle_block" >показать список<i class="arrow down"></i></span>
<div class="block_body block_body_hide">
echo '<br>';
}
+if ($showAuthorPremium) {
+ if (!empty($salesAuthor)) {
+
+ echo "<br><br>";
+ echo "<h4>Авторские букеты</h4>";
+ echo "<h5>Проданные авторские букеты</h5>";
+
+ $tblAuthorSales = '';
+
+ foreach ($salesAuthor as $row) {
+ $tblAuthorSales .= "<tr><td>" . $row["date"] . " </td><td>" . $row["operation"] . " </td><td> " . $row["number"] . " </td><td> " . $row["product_name"] . " </td><td> " . HtmlHelper::getNumberFormat($row["summ"]) . " </td><td>" . HtmlHelper::getNumberFormat($row["bonus"]) . " </td></tr>";
+ }
+
+ echo '
+ <div class="block_info">
+ <span class="btn_toggle_block">показать список<i class="arrow down"></i></span>
+ <div class="block_body block_body_hide">
+ <table class="salary table table-border">
+ <thead>
+ <th>Дата</th>
+ <th>Операция</th>
+ <th>Название чека</th>
+ <th>Букет</th>
+ <th>Сумма</th>
+ <th>Бонус</th>
+ </thead>
+ <tbody>' . $tblAuthorSales . '</tbody>
+ </table>
+ <p class="p-3">
+ <span>Число чеков ' . count($salesAuthor) . '</span>
+ </p>
+ </div>
+ <br>
+ <div>
+ Сумма продаж авторских букетов ' . HtmlHelper::getNumberFormat($salaryAuthor) . ' руб * ' . $textInfoAuthor . ' = ' . HtmlHelper::getNumberFormat($bonusSalaryAuthor) . ' руб
+ </div>
+ </div>
+
+ <br>';
+ } else {
+ echo '<br> Продаж авторских букетов нет<br>';
+ }
+
+ if (!empty($makeAuthor)) {
+ echo "<h5>Собранные авторские букеты</h5>";
+
+ $tblAuthorMake = '';
+
+ foreach ($makeAuthor as $row) {
+ $tblAuthorMake .= "<tr><td>" . $row["date"] . " </td><td>" . $row["operation"] . " </td><td> " . $row["number"] . " </td><td> " . $row["product_name"] . " </td><td> " . HtmlHelper::getNumberFormat($row["summ"]) . " </td><td>" . HtmlHelper::getNumberFormat($row["bonus"]) . " </td></tr>";
+ }
+
+ echo '
+ <div class="block_info">
+ <span class="btn_toggle_block">показать список<i class="arrow down"></i></span>
+ <div class="block_body block_body_hide">
+ <table class="salary table table-border">
+ <thead>
+ <th>Дата</th>
+ <th>Операция</th>
+ <th>Название чека</th>
+ <th>Букет</th>
+ <th>Сумма</th>
+ <th>Бонус</th>
+ </thead>
+ <tbody>' . $tblAuthorMake . '</tbody>
+ </table>
+ <p class="p-3">
+ <span>Число чеков ' . count($makeAuthor) . '</span>
+ </p>
+ </div>
+ <br>
+ <div>
+ Сумма продаж собранных авторских букетов ' . HtmlHelper::getNumberFormat($salaryMakeAuthor) . ' руб * ' . $textInfoAuthor . ' = ' . HtmlHelper::getNumberFormat($bonusMakeAuthor) . ' руб
+ </div>
+ </div>
+
+ <br>';
+ } else {
+ echo '<b>Собранных авторских букетов нет</b> <br>';
+ }
+
+ if (!empty($authorPrime)) {
+ echo '<br><h5>Сумма премии с авторских букетов <b>' . HtmlHelper::getNumberFormat($authorPrime) . ' руб </b></h5>';
+ echo '<br>';
+ }
+}
+
/**/
echo '<br><h4>Премия за качество</h4>';
'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
]);
?>
'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
]);
?>
<?php