]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-402 Добавить в ЛК Флориста расчёт премии за авторские букеты
authormarina <m.zozirova@gmail.com>
Mon, 28 Apr 2025 11:53:15 +0000 (14:53 +0300)
committermarina <m.zozirova@gmail.com>
Mon, 28 Apr 2025 11:53:15 +0000 (14:53 +0300)
erp24/services/BonusService.php
erp24/services/CabinetService.php
erp24/services/SalesService.php
erp24/views/cabinet202310/_personal_values.php
erp24/views/cabinet202310/administrator.php
erp24/views/cabinet202310/florist.php

index 0a5d592a7b7138eb6154f4b5d988e757df4d00da..14b26bcd35ea6fdc3d5c9fdfeb55e96e0a938f32 100755 (executable)
@@ -116,6 +116,12 @@ class BonusService
     }
 
 
+    public function getAuthorBonusCoefficient($rowDate) : float
+    {
+        return 0.01;
+    }
+
+
     public function getSumConversionGameBonusToMoney($adminSumGameBonus, $yearSelect, $monthWithZeroSelect)
     {
         $base = 1;
index 5def7552649da0b2ffff0f6038d0ca5601fdd7ce..bee486d338f7e8c4a1d0023885e4f27d5e822881 100755 (executable)
@@ -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 [
index 4c72ab470c29076cc759f6e7467d51b8409fe557..a73365246dd61fe6f1d35c926ed1d8c03872d29a 100755 (executable)
@@ -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
         ]);
 
 
index 9602612b36a3c97dff1d794b1f46f60870ef104d..3efd5cc9a462716d5927879ee4fa8928375d4891 100755 (executable)
@@ -82,10 +82,10 @@ if (!empty($userSalaryServices)) {
     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>';
@@ -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% <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 = '';
 
@@ -165,7 +166,7 @@ if (!empty($salesMatrix)) {
         $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">
@@ -195,7 +196,7 @@ if (!empty($salesMatrix)) {
     echo '<br> Продаж по матрице нет';
 }
 
-echo"<h5>Собранные букеты по матрице</h5>";
+echo "<h5>Собранные букеты по матрице</h5>";
 
 if (!empty($makeMatrix)) {
 
@@ -205,7 +206,7 @@ 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">
@@ -240,6 +241,94 @@ if (!empty($matrixPrime)) {
     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>';
index 91e5084e4f011cddef4bb33f010c8128580bc79e..f69a9d9a6c67175c8cbd398767966f6a47cd0301 100755 (executable)
@@ -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
     ]);
     ?>
 
index 1f3f07c8d9b9695b743e5707f8b56fe662fdc448..e1bc967f551a46cefb6495eafe5f82a182fbfff8 100755 (executable)
@@ -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
     ]);
     ?>
     <?php