]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Установка group_name и вывод смены по группе
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 21 Nov 2025 14:57:51 +0000 (17:57 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 21 Nov 2025 14:57:51 +0000 (17:57 +0300)
erp24/actions/grade/AdminUpdateAction.php
erp24/actions/grade/UpdateAction.php
erp24/views/grade/admin-update.php
erp24/views/grade/update.php

index fbe8480019e793186b21ce2c72ffd1ec5e4b66ac..c086b25be65990ef4534af43f314e366bb1e749d 100644 (file)
@@ -122,6 +122,14 @@ class AdminUpdateAction extends Action
                 $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
@@ -155,10 +163,12 @@ class AdminUpdateAction extends Action
                                     }
                                 }
                                 
-                                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']);
                                     
@@ -174,16 +184,13 @@ class AdminUpdateAction extends Action
                                                 );
                                             }
                                         } 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}' не найдена. Текущая группа сохранена."
@@ -198,11 +205,15 @@ class AdminUpdateAction extends Action
                     // Очищаем 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']);
index b543301753c3a31b9299c3584f3b4770c3169047..2e091236c284c9c87592996ac1a1bb1775b7e2e7 100755 (executable)
@@ -70,11 +70,9 @@ class UpdateAction extends Action
                         }
                     }
                     
-                    // Ð\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;
                     }
                     
                     // Показываем уведомление, если группа не соответствует грейду
index fcb9abd5a41db646fa98d340847350571013c28d..77999557ef74d8806145f7ff1b7d74e06b90d5f8 100644 (file)
@@ -78,6 +78,27 @@ use yii_app\services\FileService;
             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> Выбранный грейд не соответствует текущей группе. 
@@ -297,6 +318,41 @@ use yii_app\services\FileService;
             // Очищаем поле 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();
+        }
     }
 
     // Данные для проверки соответствия грейда и группы
@@ -367,6 +423,9 @@ use yii_app\services\FileService;
             $('select[name="Admin[employee_position_id]"]').val('');
         }
         
+        // Обновляем поле Смена при загрузке страницы
+        updateShiftField(initialGroupId);
+        
         // Проверяем соответствие при загрузке страницы
         checkGradeGroupMatch();
     });
index 6a033451975d5f19113ea5bc8dce350176315350..150d13e3dedd7918c3a061ed3ed31773310f8381 100755 (executable)
@@ -131,6 +131,34 @@ use dosamigos\datetimepicker\DateTimePicker;
             <?= $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): ?>