From 9bc4752c6b715cc737d51cd9cda47249bfe807cc Mon Sep 17 00:00:00 2001 From: Aleksey Filippov Date: Thu, 4 Jul 2024 13:55:00 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20?= =?utf8?q?=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=B0=D0=B1?= =?utf8?q?=D0=B8=D0=BD=D0=B5=D1=82=D0=B0=20=D0=BD=D0=B0=20=D0=BD=D0=BE?= =?utf8?q?=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=BA=D1=82=20=D1=81=D0=BC?= =?utf8?q?=D0=B5=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/actions/timetable/AddFactHandAction.php | 2 +- .../timetable/StartShiftStepOneAction.php | 2 +- .../timetable/StartShiftStepTwoAction.php | 2 +- erp24/controllers/TimetableFactController.php | 2 +- erp24/helpers/DateHelper.php | 4 +- erp24/records/TimetableFactModel.php | 2 +- erp24/services/CabinetService.php | 66 ++++++++++++++++++- erp24/views/timetable-fact/index.php | 2 +- erp24/views/timetable-fact/view.php | 2 +- 9 files changed, 74 insertions(+), 10 deletions(-) diff --git a/erp24/actions/timetable/AddFactHandAction.php b/erp24/actions/timetable/AddFactHandAction.php index 50edac45..a6e5ec47 100644 --- a/erp24/actions/timetable/AddFactHandAction.php +++ b/erp24/actions/timetable/AddFactHandAction.php @@ -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; diff --git a/erp24/actions/timetable/StartShiftStepOneAction.php b/erp24/actions/timetable/StartShiftStepOneAction.php index 3dbf471b..937d5b00 100755 --- a/erp24/actions/timetable/StartShiftStepOneAction.php +++ b/erp24/actions/timetable/StartShiftStepOneAction.php @@ -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; diff --git a/erp24/actions/timetable/StartShiftStepTwoAction.php b/erp24/actions/timetable/StartShiftStepTwoAction.php index 85d51a04..b9f59789 100755 --- a/erp24/actions/timetable/StartShiftStepTwoAction.php +++ b/erp24/actions/timetable/StartShiftStepTwoAction.php @@ -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; diff --git a/erp24/controllers/TimetableFactController.php b/erp24/controllers/TimetableFactController.php index 40781e51..8a00bb4c 100644 --- a/erp24/controllers/TimetableFactController.php +++ b/erp24/controllers/TimetableFactController.php @@ -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; diff --git a/erp24/helpers/DateHelper.php b/erp24/helpers/DateHelper.php index 4952cc68..e6c618ea 100644 --- a/erp24/helpers/DateHelper.php +++ b/erp24/helpers/DateHelper.php @@ -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; diff --git a/erp24/records/TimetableFactModel.php b/erp24/records/TimetableFactModel.php index 48d33042..01a2343e 100644 --- a/erp24/records/TimetableFactModel.php +++ b/erp24/records/TimetableFactModel.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace app\records; +namespace yii_app\records; use Throwable; use yii\db\ActiveRecord; diff --git a/erp24/services/CabinetService.php b/erp24/services/CabinetService.php index 6d984519..7b368cff 100755 --- a/erp24/services/CabinetService.php +++ b/erp24/services/CabinetService.php @@ -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'] . '"
'; $errorText .= 'за выбранный интервал с ' . $dateFrom . ' по ' . $dateTo . '
'; - $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 { diff --git a/erp24/views/timetable-fact/index.php b/erp24/views/timetable-fact/index.php index 62136097..02b8a682 100644 --- a/erp24/views/timetable-fact/index.php +++ b/erp24/views/timetable-fact/index.php @@ -1,6 +1,6 @@ title = "Фактический табель #$model->id"; -- 2.39.5