]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Перевод личного кабинета на новый факт смены
authorAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Thu, 4 Jul 2024 10:55:00 +0000 (13:55 +0300)
committerAleksey Filippov <Aleksey.Filippov@erp-flowers.ru>
Thu, 4 Jul 2024 10:55:00 +0000 (13:55 +0300)
erp24/actions/timetable/AddFactHandAction.php
erp24/actions/timetable/StartShiftStepOneAction.php
erp24/actions/timetable/StartShiftStepTwoAction.php
erp24/controllers/TimetableFactController.php
erp24/helpers/DateHelper.php
erp24/records/TimetableFactModel.php
erp24/services/CabinetService.php
erp24/views/timetable-fact/index.php
erp24/views/timetable-fact/view.php

index 50edac458c07bfbb54bfbbdd9691013d08339851..a6e5ec475a17cb5b419b7897b22b69c0cd218476 100644 (file)
@@ -2,7 +2,7 @@
 
 namespace yii_app\actions\timetable;
 
-use app\records\TimetableFactModel;
+use yii_app\records\TimetableFactModel;
 use Yii;
 use yii\base\Action;
 use yii\base\DynamicModel;
index 3dbf471ba5152b199ff80987156621e2ad30e485..937d5b00b9297b10bc604e8956ae0dd833a761ac 100755 (executable)
@@ -3,7 +3,7 @@ declare(strict_types=1);
 
 namespace yii_app\actions\timetable;
 
-use app\records\TimetableFactModel;
+use yii_app\records\TimetableFactModel;
 use yii\base\Action;
 use yii\helpers\ArrayHelper;
 use yii_app\records\Admin;
index 85d51a0467d722a842fe40cfb0dbd8ac0a4fc6f6..b9f5978936fff147ae0aae6317d09b4126d4842c 100755 (executable)
@@ -3,7 +3,7 @@ declare(strict_types = 1);
 
 namespace yii_app\actions\timetable;
 
-use app\records\TimetableFactModel;
+use yii_app\records\TimetableFactModel;
 use Yii;
 use yii\base\Action;
 use yii\helpers\ArrayHelper;
index 40781e51f110e0476c1e81a47ff6bfbc14c937a6..8a00bb4c677d696d702bbcab8ef8d97c08c9f349 100644 (file)
@@ -2,7 +2,7 @@
 
 namespace app\controllers;
 
-use app\records\TimetableFactModel;
+use yii_app\records\TimetableFactModel;
 use yii\data\ActiveDataProvider;
 use yii\web\Controller;
 use yii\web\NotFoundHttpException;
index 4952cc683a5ecd2f7a7afa0d8aa15c34e9654437..e6c618eafef41e81f66c588213b69abe0df3b805 100644 (file)
@@ -42,7 +42,7 @@ class DateHelper
     public static function getExistTimetableOneDayBefore($dateFrom, $adminId): bool
     {
         $dateFromOneDayBefore = self::getOneDayBefore($dateFrom);
-        $timetableOneDayBefore = (new CabinetService())->getTimetableData($adminId, null, $dateFromOneDayBefore, $dateFromOneDayBefore);
+        $timetableOneDayBefore = (new CabinetService())->getTimetablePlanData($adminId, null, $dateFromOneDayBefore, $dateFromOneDayBefore);
         $existTimetableOneDayBefore = (0 !== count($timetableOneDayBefore));
 
         return $existTimetableOneDayBefore;
@@ -73,7 +73,7 @@ class DateHelper
         $dateToPrepared = new DateTime($dateTo);
         date_modify($dateToPrepared, '+1 day');
         $dateToOneDayAfter =  $dateToPrepared->format('Y-m-d H:i:s');
-        $timetableOneDayAfter = (new CabinetService())->getTimetableData($adminId, null, $dateToOneDayAfter, $dateToOneDayAfter);
+        $timetableOneDayAfter = (new CabinetService())->getTimetablePlanData($adminId, null, $dateToOneDayAfter, $dateToOneDayAfter);
         $existTimetableOneDayAfter = (0 !== count($timetableOneDayAfter));
 
         return $existTimetableOneDayAfter;
index 48d3304245b6b0ef19872ad6bd548321242040e7..01a2343ed6d5d7e684f47c08335b3cf1e579508b 100644 (file)
@@ -2,7 +2,7 @@
 
 declare(strict_types=1);
 
-namespace app\records;
+namespace yii_app\records;
 
 use Throwable;
 use yii\db\ActiveRecord;
index 6d984519b4d2de4db40251929af6225b23d35746..7b368cffc77deb427005b631f62d2f702acd4443 100755 (executable)
@@ -2,6 +2,7 @@
 
 namespace yii_app\services;
 
+use yii_app\records\TimetableFactModel;
 use DateTime;
 use Yii;
 use yii\db\Exception;
@@ -11,6 +12,7 @@ use yii_app\helpers\DateHelper;
 use yii_app\helpers\HtmlHelper;
 use yii_app\helpers\SalaryHelper;
 use yii_app\records\Admin;
+use yii_app\records\AdminCheckin;
 use yii_app\records\AdminGroupDynamic;
 use yii_app\records\AdminPayroll;
 use yii_app\records\AdminPayrollValues;
@@ -2264,9 +2266,13 @@ class CabinetService
         }
 
         if (empty($timetable) && empty($timetableAnotherStore)) {
+            $text = 'в графике';
+            if ($dateFrom >= '2024-06-01') {
+                $text = 'фактов';
+            }
             $errorText = 'У сотрудника "' . $employeeSelect['name_full'] . '" <br>';
             $errorText .= 'за выбранный интервал с ' . $dateFrom . '  по  ' . $dateTo . ' <br>';
-            $errorText .= 'в графике смен не найдено cs1';
+            $errorText .= $text . ' смен не найдено cs1';
 
             $dateFromInfo=date("Y-m-d",time()-7*86400+7200);
             $dateToInfo=date("Y-m-d",time());
@@ -3649,6 +3655,25 @@ false
      * @return array
      */
     public function getTimetableData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
+    {
+        if ($dateFrom >= '2024-06-01') {
+            $result = $this->getTimetableFactData($adminId, $storeId, $dateFrom, $dateTo, $notInStore);
+        } else {
+            $result = $this->getTimetablePlanData($adminId, $storeId, $dateFrom, $dateTo, $notInStore);
+        }
+
+        return $result;
+    }
+
+    /**
+     * @param $adminId
+     * @param $storeId
+     * @param $dateFrom
+     * @param $dateTo
+     * @param bool $notInStore
+     * @return array
+     */
+    public function getTimetablePlanData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
     {
 
         $slotTypeId = [
@@ -3685,6 +3710,45 @@ false
         return $query->asArray()->all();
     }
 
+    public function getTimetableFactData($adminId, $storeId, $dateFrom, $dateTo, bool $notInStore = false): array
+    {
+        $query = TimetableFactModel::find()
+            ->with('admin')
+            ->andWhere(['>=', 'date_shift', $dateFrom])
+            ->andWhere(['<=', 'date_shift', $dateTo])
+            ->andWhere(['admin_id' => $adminId])
+            ->andWhere(['status' => AdminCheckin::TYPE_END])
+        ;
+
+        if (!empty($storeId)) {
+            if (!$notInStore) {
+                $query->andWhere(['=', 'store_id', $storeId]);
+            } else {
+                $query->andWhere(['<>', 'store_id', $storeId]);
+            }
+        }
+
+        $query->orderBy(['date_shift' => SORT_ASC]);
+        $query->indexBy(['id']);
+//        $query->groupBy(['date_shift']);
+
+        $action = $query->createCommand()->getRawSql();
+
+        $timetableFactForMonthPrepared = $query->asArray()->all();
+
+        $timetableFactForMonth = [];
+        $listDateCount = [];
+        foreach ($timetableFactForMonthPrepared as $key => $row) {
+            if (!array_key_exists($row['date_shift'], $listDateCount)) {
+                $listDateCount[$row['date_shift']] = 1;
+                $timetableFactForMonth[$key] = $row;
+                $timetableFactForMonth[$key]['date'] = $row['date_shift'];
+            }
+        }
+
+        return $timetableFactForMonth;
+    }
+
 
     public function getTimetableDataCounter($dateFrom, $dateTo, $adminId = null): array
     {
index 62136097e27e540bb973602629256cbfdd5ac3f6..02b8a6823efb20d2e67ceebbf38736b4144bc2f6 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use app\records\TimetableFactModel;
+use yii_app\records\TimetableFactModel;
 use yii\helpers\Html;
 use yii\helpers\Url;
 use yii\grid\ActionColumn;
index a553499a5c899de1ca476859777f772c018b0389..53aec39b69e6ac0aa0adbc70f2de4a4c336847d3 100644 (file)
@@ -5,7 +5,7 @@ use yii\widgets\DetailView;
 use yii_app\records\AdminCheckin;
 
 /** @var yii\web\View $this */
-/** @var app\records\TimetableFactModel $model */
+/** @var yii_app\records\TimetableFactModel $model */
 
 $this->title = "Фактический табель #$model->id";