]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Added compute action for previous mounth
authorJoySystem_v <fvv2011@gmail.com>
Wed, 7 Aug 2024 12:39:59 +0000 (15:39 +0300)
committerJoySystem_v <fvv2011@gmail.com>
Wed, 7 Aug 2024 12:39:59 +0000 (15:39 +0300)
erp24/actions/motivation/SumPreviousMonthSalaryAction.php [new file with mode: 0644]
erp24/actions/motivation/SumSalaryAction.php
erp24/controllers/MotivationController.php
erp24/services/MotivationService.php
erp24/views/motivation/run-sum-salary.php

diff --git a/erp24/actions/motivation/SumPreviousMonthSalaryAction.php b/erp24/actions/motivation/SumPreviousMonthSalaryAction.php
new file mode 100644 (file)
index 0000000..7225f69
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+namespace yii_app\actions\motivation;
+
+use Yii;
+use yii\base\Action;
+use DateTime;
+use yii_app\records\Motivation;
+use yii_app\records\MotivationValue;
+use yii_app\records\EmployeePayment;
+use yii_app\services\MotivationService;
+
+class SumPreviousMonthSalaryAction extends Action
+{
+    public function run()
+    {
+        $currentDate = new DateTime();
+        $previousMonthDate = (clone $currentDate)->modify('first day of last month');
+        $year = $previousMonthDate->format('Y');
+        $mounth = $previousMonthDate->format('m');
+
+        // Определяем даты начала и конца предыдущего месяца
+        $startOfPreviousMonth = new DateTime("$year-$mounth-01");
+        $endOfPreviousMonth = new DateTime($startOfPreviousMonth->format('Y-m-t'));
+
+        // Найти все записи по предыдущему месяцу и году
+        $motivations = Motivation::find()
+            ->where(['year' => $year, 'month' => $mounth])
+            ->all();
+
+        if (empty($motivations)) {
+            Yii::warning("Записи для текущего месяца и года таблицы мотивации не найдены.");
+            return $this->controller->redirect(['motivation/index']);
+        }
+
+        foreach ($motivations as $motivation) {
+            $store_id = $motivation->store_id;
+
+            $monthlyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startOfPreviousMonth->format('Y-m-d'), $endOfPreviousMonth->format('Y-m-d'), $store_id);
+            $monthlyVacationSum = MotivationService::getVacationsSum($startOfPreviousMonth->format('Y-m-d'), $endOfPreviousMonth->format('Y-m-d'), $store_id);
+
+            $monthlyTotalSalary = 0;
+            foreach ($monthlyRecords as $record) {
+                $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
+                $dailyPayment = $payment ? $payment->daily_payment : null;
+
+                // Если $record->salary_shift имеет значение, учитываем его и не добавляем dailyPayment
+                if (!empty($record->salary_shift)) {
+                    $monthlyTotalSalary += $record->salary_shift;
+                } else {
+                    $monthlyTotalSalary += $dailyPayment;
+                }
+            }
+
+            $monthlyTotalSalary += $monthlyVacationSum;
+            //TODO Проверка записи
+            $idMotivation = MotivationService::saveOrUpdateMotivationValue($motivation->id, 6, 11, "float", $monthlyTotalSalary);
+        }
+
+        return $this->controller->redirect(['motivation/index']);
+    }
+}
index e3b48ec24551cddf9d79162716a6fc0b79c70f3a..60053002eff1135c6837e374ef4217986958e3f0 100644 (file)
@@ -33,7 +33,7 @@ class SumSalaryAction extends \yii\base\Action
             ->all();
 
         if (empty($motivations)) {
-            Yii::warning("No motivation records found for the current month and year.");
+            Yii::warning("Записи для текущего месяца и года таблицы мотивации не найдены.");
             return $this->controller->redirect(['motivation/index']);
         }
 
@@ -96,59 +96,6 @@ class SumSalaryAction extends \yii\base\Action
             }
         }
 
-        // Определяем даты начала и конца текущего месяца
-        $startOfMonth = new DateTime("$currentYear-$currentMonth-01");
-        $endOfMonth = new DateTime($startOfMonth->format('Y-m-t'));
-
-        // Записываем информацию в таблицу MotivationValue за текущий месяц
-        foreach ($motivations as $motivation) {
-            $store_id = $motivation->store_id;
-
-            $monthlyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startOfMonth->format('Y-m-d'), $endOfMonth->format('Y-m-d'), $store_id);
-            $monthlyVacationSum = MotivationService::getVacationsSum($startOfMonth->format('Y-m-d'), $endOfMonth->format('Y-m-d'), $store_id);
-
-            $monthlyTotalSalary = 0;
-            foreach ($monthlyRecords as $record) {
-                $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
-                $dailyPayment = $payment ? $payment->daily_payment : null;
-
-                // Если $record->salary_shift имеет значение, учитываем его и не добавляем dailyPayment
-                if (!empty($record->salary_shift)) {
-                    $monthlyTotalSalary += $record->salary_shift;
-                } else {
-                    $monthlyTotalSalary += $dailyPayment;
-                }
-            }
-
-            $monthlyTotalSalary += $monthlyVacationSum;
-
-            // Проверка наличия записи в MotivationValue за текущий месяц
-            $motivationValue = MotivationValue::findOne([
-                'motivation_id' => $motivation->id,
-                'motivation_group_id' => 6, // 6 для обозначения всего месяца
-                'value_id' => 11
-            ]);
-
-            if ($motivationValue === null) {
-                // Если записи нет, создаем новую
-                $motivationValue = new MotivationValue();
-                $motivationValue->motivation_id = $motivation->id;
-                $motivationValue->motivation_group_id = 6;
-                $motivationValue->value_id = 11;
-                $motivationValue->value_type = 'float';
-            }
-
-            // Обновляем значение
-            $motivationValue->value_float = $monthlyTotalSalary;
-            $motivationValue->value_int = null;
-            $motivationValue->value_string = null;
-
-            // Сохраняем запись
-            if (!$motivationValue->save()) {
-                Yii::error("Не удалось записать данные для store_id: $store_id");
-            }
-        }
-
         return $this->controller->redirect(['motivation/index']);
     }
 }
index 412b0905589338a18710452af8af431afa0fb5b6..e56fe2402572fd98013213a43ccfea2bb4a810b4 100644 (file)
@@ -18,6 +18,7 @@ class MotivationController extends Controller
             'delete-value' => \yii_app\actions\motivation\DeleteValueAction::class,
             'get-salary' => \yii_app\actions\motivation\GetSalaryAction::class,
             'sum-salary' => \yii_app\actions\motivation\SumSalaryAction::class,
+            'mounth-salary' => \yii_app\actions\motivation\SumPreviousMonthSalaryAction::class,
         ];
     }
 
index 671285254f78ed3b721f531554b2b02777a72bb1..30b3b78578520ebaea9cce95309346dd26c22294 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace yii_app\services;
 
+use Yii;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use yii_app\records\Motivation;
 use yii_app\records\MotivationValue;
@@ -428,14 +429,14 @@ class MotivationService
                 $motivationValue->value_string = $value;
                 break;
             default:
-                throw new \InvalidArgumentException("Invalid value type: $value_type");
+                throw new \InvalidArgumentException("Неправильное значение типа: $value_type");
         }
 
         // Сохранить запись и вернуть id или false
         if ($motivationValue->save()) {
             return $motivationValue->id;
         } else {
-            Yii::error("Failed to save MotivationValue: " . json_encode($motivationValue->errors));
+            Yii::error("Не удалось сохранить значение: " . json_encode($motivationValue->errors));
             return false;
         }
     }
index 9ef37c430cd49249f79d7aee77cb9e8778561874..373fd020f61eb0628c9b1a02cb428e1c986124f1 100644 (file)
@@ -9,9 +9,16 @@ $this->title = 'Запуск экшена SumSalary';
 <div class="sum-salary-action">
     <h1><?= Html::encode($this->title) ?></h1>
 
-    <p>Нажмите кнопку ниже, чтобы запустить экшн SumSalary и вычислить суммы зарплат.</p>
+    <p>Нажмите кнопку ниже, чтобы запустить экшн SumSalary и вычислить суммы зарплат за текущую неделю.</p>
 
     <?= Html::beginForm(['motivation/sum-salary'], 'post') ?>
-    <?= Html::submitButton('Запустить SumSalary', ['class' => 'btn btn-primary']) ?>
+    <?= Html::submitButton('Запустить', ['class' => 'btn btn-primary']) ?>
     <?= Html::endForm() ?>
+
+    <p>Нажмите кнопку ниже, чтобы запустить экшн SumPreviousMonthSalary и вычислить суммы зарплат за предыдущий месяц.</p>
+
+    <?= Html::beginForm(['motivation/mounth-salary'], 'post') ?>
+    <?= Html::submitButton('Запустить', ['class' => 'btn btn-primary']) ?>
+    <?= Html::endForm() ?>
+
 </div>