From f8732c71d939b8e1c68f4668a9094a1b11118d34 Mon Sep 17 00:00:00 2001 From: JoySystem_v Date: Fri, 16 Aug 2024 09:48:10 +0300 Subject: [PATCH] =?utf8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?utf8?q?=D1=8F=20=D0=B2=20=D0=BA=D0=BE=D0=B4=D0=B5=20-=20=D0=B4=D0=BE?= =?utf8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=B5?= =?utf8?q?=D1=82=D0=BE=D0=B4=D0=B0=20=D1=81=20=D0=BC=D0=B0=D1=81=D1=81?= =?utf8?q?=D0=B8=D0=B2=D0=BE=D0=BC=20=D0=BD=D0=B5=D0=B4=D0=B5=D0=BB=D1=8C?= =?utf8?q?=20=D0=B8=20=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20=D0=B7=D0=B0?= =?utf8?q?=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/actions/motivation/GetSalaryAction.php | 15 +------ erp24/actions/motivation/SumSalaryAction.php | 2 +- .../motivation/SumSalaryByMonthAction.php | 16 +------- erp24/services/MotivationService.php | 39 ++++++++++++++++++- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/erp24/actions/motivation/GetSalaryAction.php b/erp24/actions/motivation/GetSalaryAction.php index d78eae93..0c2e327b 100644 --- a/erp24/actions/motivation/GetSalaryAction.php +++ b/erp24/actions/motivation/GetSalaryAction.php @@ -7,9 +7,6 @@ use yii\base\Action; use yii\base\DynamicModel; use yii_app\models\SumSalaryForm; use yii_app\services\MotivationService; -use yii_app\records\TimetableFactModel; -use DateTime; -use yii_app\records\EmployeePayment; use yii_app\records\Admin; class GetSalaryAction extends Action @@ -43,20 +40,10 @@ class GetSalaryAction extends Action $month = (int)$month; $year = (int)$year; - $weeks = [ - ['start' => 1, 'end' => 7], - ['start' => 8, 'end' => 14], - ['start' => 15, 'end' => 21], - ['start' => 22, 'end' => 28], - ]; + $weeks = MotivationService::getWeeksOfMonthArray($year, $month); $lastDayOfMonth = date('t', strtotime("$year-$month-01")); - // Проверяем, существует ли 29-е число в текущем месяце (для не високосного года в феврале его не будет) - if ($lastDayOfMonth > 28) { - $weeks[] = ['start' => 29, 'end' => $lastDayOfMonth]; - } - $dailyPayments = MotivationService::getEmployeePayments("$year-$month-$lastDayOfMonth"); diff --git a/erp24/actions/motivation/SumSalaryAction.php b/erp24/actions/motivation/SumSalaryAction.php index 9d55f741..fd7f3742 100644 --- a/erp24/actions/motivation/SumSalaryAction.php +++ b/erp24/actions/motivation/SumSalaryAction.php @@ -6,7 +6,7 @@ use Yii; use yii\base\Action; use yii_app\records\Motivation; use yii_app\services\MotivationService; -use DateTime; + class SumSalaryAction extends Action { diff --git a/erp24/actions/motivation/SumSalaryByMonthAction.php b/erp24/actions/motivation/SumSalaryByMonthAction.php index 22c62f81..a9730335 100644 --- a/erp24/actions/motivation/SumSalaryByMonthAction.php +++ b/erp24/actions/motivation/SumSalaryByMonthAction.php @@ -4,7 +4,6 @@ namespace yii_app\actions\motivation; use Yii; use yii\base\Action; -use DateTime; use yii_app\models\SumSalaryForm; use yii_app\records\Motivation; use yii_app\services\MotivationService; @@ -28,20 +27,7 @@ class SumSalaryByMonthAction extends Action return $this->controller->redirect(['motivation/index']); } - $weeks = [ - ['start' => 1, 'end' => 7], - ['start' => 8, 'end' => 14], - ['start' => 15, 'end' => 21], - ['start' => 22, 'end' => 28], - ]; - - $lastDayOfMonth = date('t', strtotime("$year-$month-01")); - - - // Проверяем, существует ли 29-е число в текущем месяце (для не високосного года в феврале его не будет) - if ($lastDayOfMonth > 28) { - $weeks[] = ['start' => 29, 'end' => $lastDayOfMonth]; - } + $weeks = MotivationService::getWeeksOfMonthArray($year, $month); foreach ($weeks as $weekIndex => $week) { $startDate = date("Y-m-d", strtotime("$year-$month-" . $week['start'])); diff --git a/erp24/services/MotivationService.php b/erp24/services/MotivationService.php index 6829c53d..437cbf8c 100644 --- a/erp24/services/MotivationService.php +++ b/erp24/services/MotivationService.php @@ -19,7 +19,7 @@ use yii_app\records\Sales; use yii_app\records\SalesProducts; use yii_app\records\TimetableFactModel; use yii_app\records\Timetable; -use DateTime; + @@ -915,4 +915,41 @@ class MotivationService } return $dailyPayments; } + + /** + * Возвращает массив, представляющий недели месяца (с указаниме начала и конца недели) для указанного года и месяца. + * + * @param int|string $year Год в виде числа или строки (например, `2024` или `'2024'`). + * @param int|string $month Месяц в виде числа или строки (например, `2` или `'02'`). + * + * @return array Массив недель месяца, где каждая неделя представлена ассоциативным массивом с ключами 'start' и 'end'. + * Пример возвращаемого массива: + * [ + * ['start' => 1, 'end' => 7], + * ['start' => 8, 'end' => 14], + * ['start' => 15, 'end' => 21], + * ['start' => 22, 'end' => 28], + * ['start' => 29, 'end' => 30] // если месяц имеет больше 28 дней + * ] + */ + public static function getWeeksOfMonthArray($year, $month): array + { + // Массив недель, изначально включающий первые четыре недели + $weeks = [ + ['start' => 1, 'end' => 7], + ['start' => 8, 'end' => 14], + ['start' => 15, 'end' => 21], + ['start' => 22, 'end' => 28], + ]; + + // Определяем последний день месяца + $lastDayOfMonth = date('t', strtotime("$year-$month-01")); + + // Если в месяце больше 28 дней, добавляем пятую неделю + if ($lastDayOfMonth > 28) { + $weeks[] = ['start' => 29, 'end' => $lastDayOfMonth]; + } + + return $weeks; + } } -- 2.39.5