From f011fd2eaefb836527fafca86847ecad3d50fbd8 Mon Sep 17 00:00:00 2001 From: developer Date: Thu, 15 Jan 2026 22:44:10 +0800 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20soft=20delete=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=B8=20=D0=B0=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Livewire/AgentsTable.php | 7 +++++ .../Controllers/AdminCompaniesController.php | 19 ++++++++++-- app/Modules/Admin/Routes/web.php | 7 +++-- .../Admin/Views/companies/index.blade.php | 19 +++++++++--- ...001_add_soft_delete_to_companies_table.php | 30 ++++++++++++++++++ .../Company/AgentsTableController.php | 2 -- .../Company/DeleteAgentController.php | 7 ++++- app/Modules/Main/Models/Company/Company.php | 4 +++ app/Modules/Main/Routes/web.php | 2 +- .../views/livewire/agents-table.blade.php | 31 +++++++++++++------ 10 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 app/Modules/Main/Database/Migrations/2026_01_14_000001_add_soft_delete_to_companies_table.php diff --git a/app/Livewire/AgentsTable.php b/app/Livewire/AgentsTable.php index 7b81517..b9d6909 100644 --- a/app/Livewire/AgentsTable.php +++ b/app/Livewire/AgentsTable.php @@ -46,4 +46,11 @@ public function restore($id) 'agent' => $id ]); } + + public function delete($id) + { + to_route('company.agents.delete', [ + 'agent' => $id + ]); + } } diff --git a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php index 0c45d78..2a32666 100644 --- a/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php +++ b/app/Modules/Admin/Http/Controllers/AdminCompaniesController.php @@ -16,9 +16,15 @@ public function index(Request $request) { $companies = Company::orderBy('name'); //if ($request->filter) { - if (!(!$request->filter || $request->filter == 'all')) + if ($request->filter) { - $companies->where('status', $request->filter); + if ($request->filter == 'trashed') { + $companies->onlyTrashed(); + } else { + if ($request->filter != 'all') { + $companies->where('status', $request->filter); + } + } } $companies = $companies->get(); return view('admin::companies.index', [ @@ -41,5 +47,14 @@ public function update(Request $request, Company $company) $company->update($request->only('name', 'email', 'phone')); return to_route('admin.companies.edit', ['company' => $company]); } + public function delete(Company $company) { + $company->delete(); + return back()->withSuccess('Агентство было перемещено в корзину. Все пользователи, прикрепленные к агентству не смогут войти на портал.'); + } + + public function restore(Company $company) { + $company->restore(); + return to_route('admin.companies.edit', ['company' => $company])->withSuccess('Агентство "' . $company->name . '" было восстановлено из корзины'); + } } diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index 5ce6c23..e419b53 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -29,11 +29,14 @@ Route::post('/admin/users/create', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'store'])->name('admin.users.create'); Route::get('/admin/users/{user}/edit', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'edit'])->name('admin.users.edit'); Route::post('/admin/users/{user}/update', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'update'])->name('admin.users.update'); + Route::post('/admin/users/{user}/delete', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'delete'])->name('admin.users.delete'); + Route::post('/admin/user-role/{userRole}/delete', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'deleteUserRole'])->name('admin.users.role.delete'); Route::get('/admin/companies', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'index'])->name('admin.companies'); - Route::get('/admin/companies/{company}/edit', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'edit'])->name('admin.companies.edit'); + Route::get('/admin/companies/{company}/edit', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'edit'])->name('admin.companies.edit')->withTrashed(); Route::post('/admin/companies/{company}/update', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'update'])->name('admin.companies.update'); - Route::post('/admin/companies/{company}/delete', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'update'])->name('admin.companies.delete'); + Route::post('/admin/companies/{company}/delete', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'delete'])->name('admin.companies.delete'); + Route::post('/admin/companies/{company}/restore', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'restore'])->name('admin.companies.restore')->withTrashed(); Route::get('/admin/cities', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'index'])->name('admin.cities'); Route::get('/admin/cities/managers', [Modules\Admin\Http\Controllers\AdminCityManagersController::class, 'index'])->name('admin.cities.managers'); diff --git a/app/Modules/Admin/Views/companies/index.blade.php b/app/Modules/Admin/Views/companies/index.blade.php index ba0b046..2c5ee6a 100644 --- a/app/Modules/Admin/Views/companies/index.blade.php +++ b/app/Modules/Admin/Views/companies/index.blade.php @@ -2,7 +2,7 @@ @extends('layouts.admin') @section('content')
-
+
@@ -16,6 +16,7 @@ @endforeach
+ Удаленные @@ -63,11 +64,19 @@
diff --git a/app/Modules/Main/Database/Migrations/2026_01_14_000001_add_soft_delete_to_companies_table.php b/app/Modules/Main/Database/Migrations/2026_01_14_000001_add_soft_delete_to_companies_table.php new file mode 100644 index 0000000..0b0d4cc --- /dev/null +++ b/app/Modules/Main/Database/Migrations/2026_01_14_000001_add_soft_delete_to_companies_table.php @@ -0,0 +1,30 @@ +softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('companies', function (Blueprint $table) + { + $table->dropSoftDeletes(); + }); + } +}; diff --git a/app/Modules/Main/Http/Controllers/Company/AgentsTableController.php b/app/Modules/Main/Http/Controllers/Company/AgentsTableController.php index c230070..acd1d02 100644 --- a/app/Modules/Main/Http/Controllers/Company/AgentsTableController.php +++ b/app/Modules/Main/Http/Controllers/Company/AgentsTableController.php @@ -23,10 +23,8 @@ public function index(Request $request) } return view('main::company.agents.table', [ - //'agents' => $agents->get(), 'status' => $request->status, 'cities' => City::all() ])->with('statuses', AgentStatus::class); - } } diff --git a/app/Modules/Main/Http/Controllers/Company/DeleteAgentController.php b/app/Modules/Main/Http/Controllers/Company/DeleteAgentController.php index aa039d1..fa84639 100644 --- a/app/Modules/Main/Http/Controllers/Company/DeleteAgentController.php +++ b/app/Modules/Main/Http/Controllers/Company/DeleteAgentController.php @@ -27,7 +27,12 @@ public function __invoke(Request $request, Agent $agent) abort(404); return; } - $agent->delete(); + + if ($agent->trashed()) { + $agent->forceDelete(); + } else { + $agent->delete(); + }; return to_route('company.agents.table'); } } diff --git a/app/Modules/Main/Models/Company/Company.php b/app/Modules/Main/Models/Company/Company.php index 418d692..2b5c567 100644 --- a/app/Modules/Main/Models/Company/Company.php +++ b/app/Modules/Main/Models/Company/Company.php @@ -2,15 +2,19 @@ namespace Modules\Main\Models\Company; +use Illuminate\Database\Eloquent\SoftDeletes; + use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Modules\Payment\Traits\Paymentable; use Modules\Main\Models\City; use Modules\Bitrix\Traits\Bitrixable; + class Company extends Model { use HasFactory; + use SoftDeletes; use Paymentable; use Bitrixable; const STATUS_NEW = 'new'; diff --git a/app/Modules/Main/Routes/web.php b/app/Modules/Main/Routes/web.php index e83943c..09530f7 100644 --- a/app/Modules/Main/Routes/web.php +++ b/app/Modules/Main/Routes/web.php @@ -29,7 +29,7 @@ //Route::post('/company/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store'); Route::post('/companies/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store'); Route::post('/company/agents/{agent}/password/reset/', Modules\Main\Http\Controllers\Company\ResetAgentPasswordController::class)->name('company.agent.password.reset'); - Route::get('/company/agents/{agent}/delete', Modules\Main\Http\Controllers\Company\DeleteAgentController::class)->name('company.agents.delete'); + Route::get('/company/agents/{agent}/delete', Modules\Main\Http\Controllers\Company\DeleteAgentController::class)->name('company.agents.delete')->withTrashed(); Route::get('/company/agents/{agent}/restore', Modules\Main\Http\Controllers\Company\RestoreAgentController::class)->name('company.agents.restore'); }); diff --git a/resources/views/livewire/agents-table.blade.php b/resources/views/livewire/agents-table.blade.php index fd3da22..08bb57c 100644 --- a/resources/views/livewire/agents-table.blade.php +++ b/resources/views/livewire/agents-table.blade.php @@ -1,5 +1,5 @@
-
+
@foreach ($agents as $num => $agent) @@ -17,7 +17,7 @@ {{ $agent->user->email }} @if (!$agent->trashed()) - @else + @endif
+ - {{ $agent->deleted_at->diffForHumans() }} -
- - Восстановить - + Уволен {{ $agent->deleted_at->diffForHumans() }} +
+