]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
получение работников на смене
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 18 Mar 2026 13:07:18 +0000 (16:07 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 18 Mar 2026 13:07:18 +0000 (16:07 +0300)
erp24/api2/controllers/DataTestController.php

index 998a512799ab828d371f2ffc44639a9568c7144c..b4f4ff90ad48f50bac16c8ba5c6772309c010cc4 100644 (file)
@@ -8,9 +8,7 @@ use Yii;
 use yii\helpers\Json;
 use yii_app\records\ApiCronTest;
 use yii_app\records\ExportImportTable;
-use yii_app\records\Shift;
 use yii_app\records\TimetableFact;
-use yii_app\records\Timetable;
 
 
 class DataTestController extends BaseController {
@@ -368,19 +366,34 @@ class DataTestController extends BaseController {
         $shiftType = (int) ($input['shift_type'] ?? 0);
 
         try {
-            $shiftIds = Shift::getShiftIdsByShiftType($shiftType);
+            $dateObj      = new \DateTime($date);
+            $nextDateStr  = (clone $dateObj)->modify('+1 day')->format('Y-m-d');
 
-            $rows = TimetableFact::find()
+            $query = TimetableFact::find()
                 ->select(['timetable.admin_id'])
-                ->with('admin')
-                ->andWhere([
-                    'store_id'     => $storeId,
-                    'date'         => $date,
-                    'shift_id'     => $shiftIds,
-                    'slot_type_id' => [Timetable::TIMESLOT_WORK, Timetable::TIMESLOT_INTERNSHIP],
-                ])
-                ->asArray()
-                ->all();
+                ->andWhere(['store_id' => $storeId]);
+
+            if ($shiftType === 1) {
+                // Дневная: 08:00 – 20:00
+                $query->andWhere(['between', 'datetime_start',
+                    $date . ' 08:00:00',
+                    $date . ' 19:59:59',
+                ]);
+            } elseif ($shiftType === 2) {
+                // Ночная: 20:00 – 08:00 следующего дня
+                $query->andWhere(['OR',
+                    ['between', 'datetime_start', $date . ' 20:00:00', $date . ' 23:59:59'],
+                    ['between', 'datetime_start', $nextDateStr . ' 00:00:00', $nextDateStr . ' 07:59:59'],
+                ]);
+            } else {
+                // Все смены за дату
+                $query->andWhere(['between', 'datetime_start',
+                    $date . ' 00:00:00',
+                    $date . ' 23:59:59',
+                ]);
+            }
+
+            $rows = $query->asArray()->all();
 
             if (empty($rows)) {
                 return $this->asJson(['success' => true, 'data' => []]);