$oldPositionId = $model->employee_position_id;
$oldGroupId = $model->group_id;
+ // При смене группы проставляем group_name из AdminGroup->name на основе group_id
+ if (isset($attributes['group_id']) && $oldGroupId != (int)$attributes['group_id']) {
+ $newAdminGroup = AdminGroup::findOne($attributes['group_id']);
+ if ($newAdminGroup) {
+ $attributes['group_name'] = $newAdminGroup->name;
+ }
+ }
+
if ($isSpecialGroup) {
if ($isWorkGroup) {
// Для рабочих групп (group_id = 50 и parent_id = 50) при заполнении employee_position_id
}
}
- if ($hasPartialMatch) {
- // Если группа и грейд частично совпадают - оставляем группу
- $attributes['group_name'] = $positionName;
- } else {
+ // При назначении грейда проставляем group_name из AdminGroup->name на основе group_id
+ if ($currentGroup) {
+ $attributes['group_name'] = $currentGroup->name;
+ }
+
+ if (!$hasPartialMatch) {
// Если не совпадают - ищем группу по названию грейда
$matchingGroup = self::findGroupByPositionName($positionName, $attributes['group_id']);
);
}
} else {
- // Нет прав на изменение группы - только обновляем group_name
- $attributes['group_name'] = $positionName;
+ // Нет прав на изменение группы - group_name уже установлен из текущей группы выше
Yii::$app->session->setFlash('warning',
"Грейд '{$positionName}' не соответствует группе '{$currentGroupName}'. Недостаточно прав для автоматического изменения группы."
);
}
} else {
- // Группа не найдена - оставляем текущую группу
- $attributes['group_name'] = $positionName;
-
+ // Группа не найдена - group_name уже установлен из текущей группы выше
if ($oldGroupId != $attributes['group_id']) {
Yii::$app->session->setFlash('warning',
"Группа для грейда '{$positionName}' не найдена. Текущая группа сохранена."
// Очищаем shift
unset($attributes['shift']);
} else {
- // Для остальных групп group_name берем из текстового поля
- if (isset($attributes['custom_position'])) {
+ // Для остальных групп group_name берем из AdminGroup->name на основе group_id
+ $adminGroup = AdminGroup::findOne($attributes['group_id']);
+ if ($adminGroup) {
+ $attributes['group_name'] = $adminGroup->name;
+ } else if (isset($attributes['custom_position'])) {
+ // Если группа не найдена, используем текстовое поле как fallback
$attributes['group_name'] = $attributes['custom_position'];
- unset($attributes['custom_position']);
}
+ unset($attributes['custom_position']);
// Очищаем employee_position_id и shift для не-специальных групп
$attributes['employee_position_id'] = null;
unset($attributes['shift']);
}
}
- // Ð\9eбновлÑ\8fем group_name в завиÑ\81имоÑ\81Ñ\82и оÑ\82 Ñ\82ипа гÑ\80Ñ\83ппÑ\8b
- if ($isWorkGroup && $currentGroup) {
+ // Ð\9eбновлÑ\8fем group_name из AdminGroup->name на оÑ\81нове group_id
+ if ($currentGroup) {
$admin->group_name = $currentGroup->name;
- } else {
- $admin->group_name = $positionName;
}
// Показываем уведомление, если группа не соответствует грейду
ArrayHelper::map($positions, 'id', 'name'), ['prompt' => 'Выберите должность', 'id' => 'employee-position-select', 'onchange' => 'checkGradeGroupMatch();']
)->label(false)) ?>
+ <?php
+ // Определяем значение смены из AdminGroup->name
+ $shiftValue = null;
+ if ($model->adminGroup && $model->adminGroup->name) {
+ $groupName = mb_strtolower($model->adminGroup->name);
+ if (mb_strpos($groupName, 'день') !== false) {
+ $shiftValue = 'День';
+ } elseif (mb_strpos($groupName, 'ночь') !== false) {
+ $shiftValue = 'Ночь';
+ }
+ }
+ ?>
+ <div id="shiftField" style="display: <?= $shiftValue !== null ? 'block' : 'none' ?>;">
+ <?php PrintBlockHelper::printBlock('Смена', Html::textInput('shift_display', $shiftValue ?? '', [
+ 'class' => 'form-control',
+ 'readonly' => true,
+ 'style' => 'background-color: #e9ecef; cursor: not-allowed;',
+ 'id' => 'shift-display-input'
+ ])) ?>
+ </div>
+
<!-- Уведомление о несовпадении группы и грейда -->
<div id="grade-group-mismatch-alert" class="alert alert-warning mt-2" style="display: none;">
<strong>⚠️ Внимание!</strong> Выбранный грейд не соответствует текущей группе.
// Очищаем поле employee_position_id для не-специальных групп
$('select[name="Admin[employee_position_id]"]').val('');
}
+
+ // Обновляем поле Смена на основе выбранной группы
+ updateShiftField(groupId);
+ }
+
+ /**
+ * Обновляет поле Смена на основе названия группы
+ */
+ function updateShiftField(groupId) {
+ var groupsData = <?= json_encode($adminGroups, JSON_UNESCAPED_UNICODE) ?>;
+ var groupName = groupsData[groupId] || '';
+ var shiftField = $('#shiftField');
+ var shiftInput = $('#shift-display-input');
+
+ if (!groupName) {
+ shiftField.hide();
+ return;
+ }
+
+ // Проверяем наличие "день" или "ночь" в названии группы
+ var groupNameLower = groupName.toLowerCase();
+ var shiftValue = null;
+
+ if (groupNameLower.indexOf('день') !== -1) {
+ shiftValue = 'День';
+ } else if (groupNameLower.indexOf('ночь') !== -1) {
+ shiftValue = 'Ночь';
+ }
+
+ if (shiftValue !== null) {
+ shiftInput.val(shiftValue);
+ shiftField.show();
+ } else {
+ shiftField.hide();
+ }
}
// Данные для проверки соответствия грейда и группы
$('select[name="Admin[employee_position_id]"]').val('');
}
+ // Обновляем поле Смена при загрузке страницы
+ updateShiftField(initialGroupId);
+
// Проверяем соответствие при загрузке страницы
checkGradeGroupMatch();
});
<?= $gradeForm->field($modelPosition, 'action')->hiddenInput()->label(false) ?>
</div>
</div>
+
+ <?php
+ // Определяем значение смены из AdminGroup->name
+ $shiftValue = null;
+ if ($admin->adminGroup && $admin->adminGroup->name) {
+ $groupName = mb_strtolower($admin->adminGroup->name);
+ if (mb_strpos($groupName, 'день') !== false) {
+ $shiftValue = 'День';
+ } elseif (mb_strpos($groupName, 'ночь') !== false) {
+ $shiftValue = 'Ночь';
+ }
+ }
+
+ // Выводим поле Смена только если найдено значение день/ночь
+ if ($shiftValue !== null):
+ ?>
+ <div class="row mb-3">
+ <div class="col-4">
+ <label class="font-weight-bold">Смена:</label>
+ <?= Html::textInput('shift_display', $shiftValue, [
+ 'class' => 'form-control',
+ 'readonly' => true,
+ 'style' => 'background-color: #e9ecef; cursor: not-allowed;'
+ ]) ?>
+ </div>
+ </div>
+ <?php endif; ?>
+
<?php ActiveForm::end(); ?>
<?php if (count($requiredSkills) > 0): ?>