добавлен soft delete для компаний и агентов

This commit is contained in:
developer 2026-01-15 22:44:10 +08:00
parent 457a77f7c2
commit f011fd2eae
10 changed files with 106 additions and 22 deletions

View File

@ -46,4 +46,11 @@ public function restore($id)
'agent' => $id
]);
}
public function delete($id)
{
to_route('company.agents.delete', [
'agent' => $id
]);
}
}

View File

@ -16,10 +16,16 @@ public function index(Request $request)
{
$companies = Company::orderBy('name');
//if ($request->filter) {
if (!(!$request->filter || $request->filter == 'all'))
if ($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', [
'companies' => $companies,
@ -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 . '" было восстановлено из корзины');
}
}

View File

@ -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');

View File

@ -2,7 +2,7 @@
@extends('layouts.admin')
@section('content')
<div>
<div class="d-flex mb-3">
<div class="d-flex mb-3 align-items-center">
<form class="p-2 border rounded-3 border-1 bg-white" method="GET" action="{{ route('admin.companies') }}">
<input type="radio" class="btn-check" name="filter" value="all" id="status_all" autocomplete="off"
onclick="this.form.submit()" {{ $filter == 'all' || !$filter ? 'checked' : '' }}>
@ -16,6 +16,7 @@
@endforeach
</form>
<div class="ms-auto p-2">
<a class="btn btn-secondary" href="{{ route('admin.companies', ['filter' => 'trashed']) }}">Удаленные</a>
<!--<button class="btn btn-primary py-2 px-3 fs-5" data-bs-toggle="modal" data-bs-target="#createCityModal">
<i class="bi bi-plus"></i> Добавить комплекс
</button>-->
@ -63,11 +64,19 @@
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item"
href="{{ route('admin.companies.edit', ['company' => $company]) }}">Редактировать</a>
@if($company->trashed())
<form method="post"
action="{{ route('admin.companies.restore', ['company' => $company]) }}">
@csrf
<button class="dropdown-item" type="submit">Восстановить</button>
</form>
@else
<form method="post"
action="{{ route('admin.companies.delete', ['company' => $company]) }}">
@csrf
<button class="dropdown-item" type="submit">Удалить</button>
</form>
@endif
</div>
</div>
</td>

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('companies', function (Blueprint $table)
{
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('companies', function (Blueprint $table)
{
$table->dropSoftDeletes();
});
}
};

View File

@ -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);
}
}

View File

@ -27,7 +27,12 @@ public function __invoke(Request $request, Agent $agent)
abort(404);
return;
}
if ($agent->trashed()) {
$agent->forceDelete();
} else {
$agent->delete();
};
return to_route('company.agents.table');
}
}

View File

@ -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';

View File

@ -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');
});

View File

@ -1,5 +1,5 @@
<div>
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 overflow-hidden">
<div class="fs-5 bg-light py-4 m-0 border border-1 rounded-4">
<table class="table m-0">
<tbody class="">
@foreach ($agents as $num => $agent)
@ -17,7 +17,7 @@
{{ $agent->user->email }}
</td>
@if (!$agent->trashed())
<td class="align-middle text-center">
<td class="align-middle text-end ">
<div class="dropdown" style="">
<button class="btn btn-light" type="button" id="dropdownMenuButton"
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@ -39,13 +39,26 @@
</td>
@else
<td class="align-middle">
{{ $agent->deleted_at->diffForHumans() }}
<div>
<a style="text-decoration: underline dotted;" href="#"
Уволен {{ $agent->deleted_at->diffForHumans() }}
</td>
<td class="align-middle text-end ">
<div class="dropdown" style="">
<button class="btn btn-light" type="button" id="dropdownMenuButton"
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="bi bi-three-dots-vertical"></i>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item"
wire:confirm = "Выбранный агент сможет создавать новые контакты.\nПродолжить?"
wire:click = "restore({{ $agent->id }})">
Восстановить
</a>
<a class="dropdown-item"
wire:confirm = "Запись об этом агенте и всех его контактах будут безвозвратно удалены.\nПродолжить?"
wire:click = "delete({{ $agent->id }})">
Удалить навсегда
</a>
</div>
</div>
</td>
@endif