diff --git a/app/Http/Controllers/Admin/OrganizationController.php b/app/Http/Controllers/Admin/OrganizationController.php
index eb631bf..3bf09a5 100755
--- a/app/Http/Controllers/Admin/OrganizationController.php
+++ b/app/Http/Controllers/Admin/OrganizationController.php
@@ -62,14 +62,124 @@ class OrganizationController extends Controller
return view('admin.organizations.show', compact('organization'));
}
-
+
+ /**
+ * Добавить пользователя в организацию
+ */
+ public function addUser(Organization $organization, Request $request)
+ {
+ Gate::authorize('update', $organization);
+
+ $validated = $request->validate([
+ 'user_ids' => 'nullable|string',
+ ]);
+
+ if (!empty($validated['user_ids'])) {
+ $userIds = array_map('intval', array_filter(explode(',', $validated['user_ids'])));
+
+ foreach ($userIds as $userId) {
+ $user = User::find($userId);
+ if (!$user) continue;
+
+ // Проверка: не состоит ли уже в организации
+ if ($user->organization_id === $organization->id) {
+ continue;
+ }
+
+ $user->update(['organization_id' => $organization->id]);
+ }
+ }
+
+ if ($request->ajax()) {
+ return response()->json(['success' => true]);
+ }
+
+ return back()->with('success', 'Пользователи добавлены в организацию.');
+ }
+
+ /**
+ * Удалить пользователя из организации
+ */
+ public function removeUser(Organization $organization, User $user)
+ {
+ Gate::authorize('update', $organization);
+
+ if ($user->organization_id === $organization->id) {
+ $user->update(['organization_id' => null]);
+ }
+
+ if ($request->ajax()) {
+ return response()->json(['success' => true]);
+ }
+
+ return back()->with('success', 'Пользователь удалён из организации.');
+ }
+
+ /**
+ * Добавить группу в организацию
+ */
+ public function addGroup(Organization $organization, Request $request)
+ {
+ Gate::authorize('update', $organization);
+
+ $validated = $request->validate([
+ 'group_ids' => 'nullable|string',
+ ]);
+
+ if (!empty($validated['group_ids'])) {
+ $groupIds = array_map('intval', array_filter(explode(',', $validated['group_ids'])));
+
+ foreach ($groupIds as $groupId) {
+ $group = Group::find($groupId);
+ if (!$group) continue;
+
+ // Проверка: не состоит ли уже в организации
+ if ($group->organization_id === $organization->id) {
+ continue;
+ }
+
+ $group->update(['organization_id' => $organization->id]);
+ }
+ }
+
+ if ($request->ajax()) {
+ return response()->json(['success' => true]);
+ }
+
+ return back()->with('success', 'Группы добавлены в организацию.');
+ }
+
+ /**
+ * Удалить группу из организации
+ */
+ public function removeGroup(Organization $organization, Group $group)
+ {
+ Gate::authorize('update', $organization);
+
+ if ($group->organization_id === $organization->id) {
+ $group->update(['organization_id' => null]);
+ }
+
+ if ($request->ajax()) {
+ return response()->json(['success' => true]);
+ }
+
+ return back()->with('success', 'Группа удалена из организации.');
+ }
+
+ /**
+ * Редактирование организации (modal)
+ */
public function edit(Organization $organization)
{
Gate::authorize('update', $organization);
- return view('admin.organizations.edit', compact('organization'));
+ return redirect()->route('admin.organizations.show', $organization)->with('edit', true);
}
-
+
+ /**
+ * Обновление организации
+ */
public function update(Request $request, Organization $organization)
{
Gate::authorize('update', $organization);
@@ -82,12 +192,16 @@ class OrganizationController extends Controller
'phone' => 'nullable|string|max:20',
'email' => 'nullable|email|max:255',
'description' => 'nullable|string',
+ 'is_active' => 'boolean',
]);
- $validated['is_active'] = $request->boolean('is_active');
-
$organization->update($validated);
+ // Для AJAX запросов
+ if ($request->ajax()) {
+ return response()->json(['success' => true, 'organization' => $organization]);
+ }
+
return redirect()->route('admin.organizations.show', $organization)
->with('success', 'Организация успешно обновлена.');
}
diff --git a/app/Http/Controllers/Api/GroupSearchController.php b/app/Http/Controllers/Api/GroupSearchController.php
index 07ec634..d1da17d 100755
--- a/app/Http/Controllers/Api/GroupSearchController.php
+++ b/app/Http/Controllers/Api/GroupSearchController.php
@@ -12,8 +12,17 @@ class GroupSearchController extends Controller
{
$query = $request->get('q', '');
$userId = $request->get('user_id', null);
-
+ $organizationId = $request->get('organization_id', null);
+
$groupsQuery = Group::query()->with('organization');
+
+ // Если указан organization_id - показываем только общие группы или группы из других организаций
+ if ($organizationId) {
+ $groupsQuery->where(function($q) use ($organizationId) {
+ $q->whereNull('organization_id')
+ ->orWhere('organization_id', '!=', $organizationId);
+ });
+ }
// Если указан user_id - фильтруем по доступным группам
if ($userId) {
@@ -31,12 +40,12 @@ class GroupSearchController extends Controller
}
}
}
-
+
// Если запрос не пустой - фильтруем по названию
if (!empty(trim($query))) {
$groupsQuery->where('name', 'like', "%{$query}%");
}
-
+
$groups = $groupsQuery
->orderBy('name')
->limit(50)
@@ -47,7 +56,7 @@ class GroupSearchController extends Controller
'text' => $group->name . ($group->organization ? " ({$group->organization->name})" : ' (Общая)'),
];
});
-
+
return response()->json($groups);
}
}
diff --git a/resources/views/admin/organizations/show.blade.php b/resources/views/admin/organizations/show.blade.php
index 2986b41..308d32d 100644
--- a/resources/views/admin/organizations/show.blade.php
+++ b/resources/views/admin/organizations/show.blade.php
@@ -1,182 +1,118 @@
@extends('layouts.app')
-
@section('title', $organization->name)
-
@section('content')
-
-
+
-
+
{{ $organization->name }}
-
-
- @if(session('success'))
-
- {{ session('success') }}
-
- @endif
-
-
-
-
-
+
+
+
+
+
-
-
- | Название: |
- {{ $organization->name }} |
-
-
- | ИНН/КПП: |
- {{ $organization->inn ?? '—' }} / {{ $organization->kpp ?? '—' }} |
-
-
- | Адрес: |
- {{ $organization->address ?? '—' }} |
-
-
- | Email: |
- {{ $organization->email ?? '—' }} |
-
-
- | Телефон: |
- {{ $organization->phone ?? '—' }} |
-
-
- | Статус: |
-
- @if($organization->is_active)
- Активна
- @else
- Не активна
- @endif
- |
-
-
- | Описание: |
- {{ $organization->description ?? '—' }} |
-
-
+
ИНН/КПП: {{ $organization->inn ?? '—' }} / {{ $organization->kpp ?? '—' }}
+
Адрес: {{ $organization->address ?? '—' }}
+
Телефон: {{ $organization->phone ?? '—' }}
+
Email: {{ $organization->email ?? '—' }}
+
Статус:
+ @if($organization->is_active)
+ Активна
+ @else
+ Не активна
+ @endif
+
-
-
-
-
+
+
+
-
-
{{ $organization->users->count() }}
-
Пользователей
+
+
{{ $organization->users->count() }}
+
Пользователей
-
-
{{ $organization->groups->count() }}
-
Групп
-
-
-
{{ $organization->courseRequests->count() }}
-
Заявок
+
+
{{ $organization->groups->count() }}
+
Групп
-
+