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
$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");
use yii\base\Action;
use yii_app\records\Motivation;
use yii_app\services\MotivationService;
-use DateTime;
+
class SumSalaryAction extends Action
{
use Yii;
use yii\base\Action;
-use DateTime;
use yii_app\models\SumSalaryForm;
use yii_app\records\Motivation;
use yii_app\services\MotivationService;
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']));
use yii_app\records\SalesProducts;
use yii_app\records\TimetableFactModel;
use yii_app\records\Timetable;
-use DateTime;
+
}
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;
+ }
}