use yii_app\forms\timetable\StartForm;
use yii_app\records\Admin;
use yii_app\records\AdminCheckin;
+use yii_app\records\TimetableFactModel;
class StartShiftStepThreeAction extends Action
{
->andWhere(['id' => $model->checkin_id])
->one();
- /** @var AdminCheckin[] $dayCheckins */
- $dayCheckinsQuery = AdminCheckin::find()
- ->andWhere(['admin_id' => $userModel->id])
- ->andWhere(['>', 'time', date('Y-m-d H:i:s', strtotime('-1 day'))]);
-
- if (!empty($currentCheckin)) {
- $dayCheckinsQuery->andWhere(['!=', 'id', $model->checkin_id]);
+ //отрабатывает только для открытия
+ $fact = TimetableFactModel::getOpening($userModel->id, date('Y-m-d'));
+
+ //делается для того что при закрытии нужны дата и время фактического закрытия
+ if (!$fact) {
+ $fact = TimetableFactModel::find()
+ ->andWhere(['admin_id' => $userModel->id])
+ ->andWhere(['date_shift' => date('Y-m-d')])
+ ->andWhere(['is_close' => true])
+ ->orderBy('id desc')
+ ->one();
}
-
- $dayCheckinsQuery->orderBy(['time' => SORT_ASC]);
-
- $dayCheckins = $dayCheckinsQuery->all();
- $lastCheckin = end($dayCheckins);
if ($request->isAjax
&&
return $this->controller->render('/timetable/start_shift_step_three.php', [
'userModel' => $userModel,
- 'lastCheckin' => $lastCheckin,
+ 'fact' => $fact,
'currentCheckin' => $currentCheckin,
'model' => $model,
namespace yii_app\actions\timetable;
use yii_app\records\AdminGroup;
+use yii_app\records\Timetable;
use yii_app\records\TimetableFactModel;
use Yii;
use yii\base\Action;
->andWhere(['>', 'time', date('Y-m-d H:i:s', strtotime('-1 day'))])
->orderBy(['time' => SORT_ASC])
->all();
- $lastCheckin = end($dayCheckins);
+
+ $plan = Timetable::find()
+ ->andWhere(['admin_id' => $userModel->id])
+ ->andWhere([
+ 'OR',
+ ['date' => date('Y-m-d')],
+ ['date' => date('Y-m-d', strtotime('-1 day'))],
+ ])
+ ->one();
+ $fact = TimetableFactModel::getOpening($userModel->id, date('Y-m-d'));
$adminStoreId = null;
$model->admin_id = $userModel->id;
$model->d_id = $userModel->group_id;
$model->ball = 5;
- $model->shift_id = $request->getBodyParam('shift_id');
- if (empty($model->store_id)) {
- $model->store_id = (!empty($adminStoreId)) ? $adminStoreId : $device->store_id;
- }
$model->device_id = $device->id;
$model->time = date('Y-m-d H:i:s');
- $model->type_id = (function () use ($userModel, $lastCheckin) {
- if ($userModel->adminGroup->isRoaming()) {
- return AdminCheckin::TYPE_APPEAR;
- }
- if ($lastCheckin && $lastCheckin->isStart()) {
+ $model->type_id = (function () use ($userModel, $fact) {
+ if ($fact) {
return AdminCheckin::TYPE_END;
}
return AdminCheckin::TYPE_START;
})();
-
/** @var TimetablePlan[] $planSlots */
$planSlots = TimetablePlan::find()
->andWhere(
])
->all();
- if ($lastCheckin && $lastCheckin->isStart()) {
- $model->plan_id = $lastCheckin->plan_id;
- $model->replaced_admin_id = $lastCheckin->replaced_admin_id;
- $model->date = $lastCheckin->date;
- $model->d_id = $lastCheckin->d_id;
+ $model->shift_id = $request->getBodyParam('shift_id');
+ $model->store_id = $request->getBodyParam('store_id');
+
+ if ($plan) {
+ $model->shift_id = $plan->shift_id;
+ $model->store_id = $plan->store_id;
+ }
+
+ if ($fact) {
+ $model->shift_id = $fact->shift_id;
+ $model->store_id = $fact->store_id;
+ }
+
+ if ($fact) {
+ $model->plan_id = $fact->plan_id;
+ $model->replaced_admin_id = $fact->admin_id_add;
+ $model->date = $fact->date_shift;
+ $model->d_id = $fact->d_id;
} else {
- if ($device->isFixedStore() && !$userModel->adminGroup->isRoaming()) {
+ if ($device->isFixedStore()) {
/** @var TimetablePlan[] $planSlotsByAdminId */
$planSlotsByAdminId = ArrayHelper::index($planSlots, 'admin_id');
if (array_key_exists($model->admin_id, $planSlotsByAdminId)) {
$model->date = date('Y-m-d');
}
- $adminStoreArrayPrepared = CityStore::getNames([$model->store_id]);
- $adminStoreArray = array_values($adminStoreArrayPrepared);
- $adminStoreName = $adminStoreArray[array_key_first($adminStoreArray)];
-
if ($this->controller->request->getIsPost() && !$firstRun) {
$model->load($this->controller->request->post());
$model->photo = UploadedFile::getInstance($model, 'photo');
$model->checkin_id = $model->checkinModel->id;
$model->id = $model->checkinModel->id;
- $is_start = ($model->d_id == AdminGroup::GROUP_ADMINISTRATORS) ?
- (count($dayCheckins) % 2 == 0 ? true : false) :
- ($model->checkinModel->type_id == AdminCheckin::TYPE_START ? true : false);
-
- TimetableFactModel::setValues($model, $is_start);
+ TimetableFactModel::setValues($model, empty($fact));
if ($this->controller->request->getHeaders()->get('Accept') == 'application/json') {
$this->controller->response->format = Response::FORMAT_JSON;
'userModel' => $userModel,
'model' => $model,
'modelId' => $model->id,
- 'adminStoreName' => $adminStoreName,
'device' => $device,
- 'dayCheckins' => $dayCheckins,
- 'lastCheckin' => $lastCheckin,
'planSlots' => $planSlots,
]);
}
return $this->controller->render('/timetable/start_shift_step_two.php', [
'userModel' => $userModel,
'model' => $model,
- 'adminStoreName' => $adminStoreName,
'device' => $device,
- 'dayCheckins' => $dayCheckins,
- 'lastCheckin' => $lastCheckin,
'planSlots' => $planSlots,
+ 'fact' => $fact,
+ 'plan' => $plan,
+ 'dayCheckins' => $dayCheckins,
]);
}
}
\ No newline at end of file
*/
public static function getOpening(int $adminId, $date) {
return self::find()
- ->where(['admin_id' => $adminId, 'is_opening' => true])
- ->andWhere(['date_shift' => $date])
-// ->andWhere(['status' => array(AdminCheckin::TYPE_START, AdminCheckin::TYPE_APPEAR)])
+ ->andWhere(['admin_id' => $adminId])
+ ->andWhere(['is_opening' => true])
+ ->andWhere([
+ 'OR',
+ ['date_shift' => $date],
+ ['date_shift' => date('Y-m-d', strtotime('-1 day'))],
+ ])
->orderBy('id desc')
->one();
}
* @var AdminCheckin $currentCheckin\r
* @var string $adminStoreName\r
* @var TimetablePlan[] $planSlots\r
+ * @var \yii_app\records\TimetableFactModel $fact\r
*/\r
\r
\r
$currentCheckinTimeHours = date("H:i", strtotime($currentCheckin->time));\r
$currentCheckinDate = date("d.m.Y", strtotime($currentCheckin->time));\r
\r
-if ($userModel->adminGroup->isRoaming()) {\r
- $textButton = 'Отметится';\r
- $textInfo = 'Вы успешно отметились';\r
-} else {\r
+if ($fact->is_opening) {\r
$textButton = 'Открытие смены';\r
$textInfo = 'Смена успешно открыта';\r
- if (!empty($lastCheckin)) {\r
- if ($lastCheckin->isStart()) {\r
- $textButton = 'Закрытие смены';\r
- $textInfo = 'Смена успешно закрыта';\r
- $flowersStyleClass = 'closure-flower';\r
- $lastCheckinTimeHours = date("d.m.Y H:i", strtotime($lastCheckin->time));\r
- $dateTimeHoursInfo = $lastCheckinTimeHours . ' - ' . date("H:i d.m.Y", strtotime($currentCheckin->time));\r
- }\r
- }\r
+} else {\r
+ $textButton = 'Закрытие смены';\r
+ $textInfo = 'Смена успешно закрыта';\r
+ $flowersStyleClass = 'closure-flower';\r
+ $lastCheckinTimeHours = date("H:i d.m.Y", strtotime($fact->time_start . $fact->date_start));\r
+ $dateTimeHoursInfo = $lastCheckinTimeHours . ' - ' . date("H:i d.m.Y", strtotime($fact->time_end . $fact->date_end));\r
}\r
\r
\r
-\r
$timeInfo = 1;\r
?>\r
<div class="container background-site-color pb-5">\r
* @var AdminCheckin $lastCheckin\r
* @var string $adminStoreName\r
* @var TimetablePlan[] $planSlots\r
+ * @var \yii_app\records\TimetableFactModel $fact\r
*/\r
\r
use yii\helpers\ArrayHelper;\r
use yii\helpers\Html;\r
use yii_app\forms\timetable\StartForm;\r
use yii_app\records\AdminCheckin;\r
+use yii_app\records\CityStore;\r
use yii_app\records\Shift;\r
use yii_app\records\TimetablePlan;\r
\r
'name' => $store->name,\r
];\r
}\r
-$this->registerJsVar('isRoam', $userModel->adminGroup->isRoaming() || !$device->isFixedStore());\r
+//$this->registerJsVar('isRoam', $userModel->adminGroup->isRoaming() || !$device->isFixedStore());\r
$this->registerJsVar('settings', [\r
'planSlots' => $planSlots,\r
'model' => $model,\r
'modelPlanSlot' => $model->planSlot,\r
- 'startShiftTime' => $model->isEnd() ? ((int) $lastCheckin->dateTime()->getTimestamp() * 1000) : null,\r
+ 'startShiftTime' => $model->isEnd() ? ((int) $fact->time_start * 1000) : null,\r
'fieldNames' => $formNames,\r
'stores' => $stores,\r
]);\r
/** @var AdminCheckin[][] $checkinsByDate */\r
$checkinsByDate = ArrayHelper::index($dayCheckins, 'type_id', ['date']);\r
\r
-\r
-\r
$textButton = '';\r
-if ($userModel->adminGroup->isRoaming()) {\r
- $textButton = 'Отметится';\r
+\r
+if ($fact) {\r
+ $textButton = 'Закрытие смены';\r
} else {\r
- if (!empty($lastCheckin)) {\r
- $textButton = ($lastCheckin->isStart()) ? 'Закрытие смены' : 'Открытие смены';\r
- } else {\r
- $textButton = 'Открытие смены';\r
- }\r
+ $textButton = 'Открытие смены';\r
}\r
\r
?>\r
<div\r
class="d-flex gap-3 justify-content-left justify-content-lg-start align-items-lg-end"\r
>\r
- <div class="fs-5"><?= $adminStoreName?></div>\r
+ <div class="fs-5"><?= $fact->store->name ?? $plan->store->name ?? $model->store->name ?></div>\r
</div>\r
<div\r
class="d-flex gap-3 justify-content-left justify-content-lg-start align-items-lg-end my-3"\r
>\r
- <div class="fs-5"><?= !empty($shift = Shift::findOne($model->shift_id)) ? $shift->name : null?></div>\r
+ <div class="fs-5"><?= $fact->shift->name ?? $plan->shift->name ??!empty($model->shift_id) ? Shift::findOne($model->shift_id)->name : null ?></div>\r
</div>\r
</div>\r
</div>\r
<button type="submit" id="start_smena" class="btn btn-bd-primary ps-3 pe-3" disabled>\r
<?php if ($model->isStart()) { ?>\r
Открыть смену\r
- <?php } elseif ($model->isAppear()) { ?>\r
- Отметиться\r
<?php } elseif ($model->isEnd()) { ?>\r
Закрыть смену\r
<?php } ?>\r