maked admin creator livewire
This commit is contained in:
parent
3a37207be3
commit
9eb03d9ede
@ -8,6 +8,8 @@
|
|||||||
use Modules\Main\Models\Company\CompanyStatus;
|
use Modules\Main\Models\Company\CompanyStatus;
|
||||||
|
|
||||||
use Modules\Main\Models\Agent\Agent;
|
use Modules\Main\Models\Agent\Agent;
|
||||||
|
use Modules\Main\Models\Company\CompanyAdmin;
|
||||||
|
|
||||||
class AdminCompaniesController extends Controller
|
class AdminCompaniesController extends Controller
|
||||||
{
|
{
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
@ -30,7 +32,7 @@ public function edit(Company $company)
|
|||||||
return view('admin::companies.edit', [
|
return view('admin::companies.edit', [
|
||||||
'company' => $company,
|
'company' => $company,
|
||||||
'companyAgentsRelation' => Agent::where('company_id', $company->id)->get(),
|
'companyAgentsRelation' => Agent::where('company_id', $company->id)->get(),
|
||||||
'companyAdminsRelation' => []
|
'companyAdminsRelation' => CompanyAdmin::where('company_id', $company->id)->get(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,6 +36,53 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 mt-3 pb-3">
|
||||||
|
<div class="d-flex align-items-center m-3">
|
||||||
|
<h4 class="fw-bold">Администраторы</h4>
|
||||||
|
<div class="ms-auto d-flex gap-3">
|
||||||
|
<a href="" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#createCompanyAdminModal">
|
||||||
|
<i class="bi bi-person-plus-fill"></i> <span class="d-none d-lg-inline">Добавить</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="table m-0">
|
||||||
|
<thead>
|
||||||
|
<tr scope="col">
|
||||||
|
<th>ФИО
|
||||||
|
<th>Когда назначен
|
||||||
|
<th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class=" ">
|
||||||
|
@foreach ($companyAdminsRelation as $companyAdmin)
|
||||||
|
<tr scope="row">
|
||||||
|
<td class="align-middle">
|
||||||
|
{{ $companyAdmin->user->name }}
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
{{ $companyAdmin->created_at?->diffForHumans() }}
|
||||||
|
</td>
|
||||||
|
<td class="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">
|
||||||
|
<form method="post"
|
||||||
|
action="{{ route('admin.users.role.delete', ['userRole' => 999]) }}">
|
||||||
|
@csrf
|
||||||
|
<button class="dropdown-item" type="submit">Удалить</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 mt-3 pb-3">
|
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 mt-3 pb-3">
|
||||||
<div class="d-flex align-items-center m-3">
|
<div class="d-flex align-items-center m-3">
|
||||||
<h4 class="fw-bold">Агенты</h4>
|
<h4 class="fw-bold">Агенты</h4>
|
||||||
@ -63,7 +110,7 @@
|
|||||||
{{ $companyAgent->user->name }}
|
{{ $companyAgent->user->name }}
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
{{ $companyAgent->created_at->diffForHumans() }}
|
{{ $companyAgent->created_at?->diffForHumans() }}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-end">
|
<td class="text-end">
|
||||||
<div class="dropdown" style="">
|
<div class="dropdown" style="">
|
||||||
@ -86,4 +133,5 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@livewire('company.agent.create', ['containerId' => 'createAgentModal', 'companyId' => $company->id])
|
@livewire('company.agent.create', ['containerId' => 'createAgentModal', 'companyId' => $company->id])
|
||||||
|
@livewire('company.admin.create', ['containerId' => 'createCompanyAdminModal', 'companyId' => $company->id])
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Main\Http\Controllers\Company;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Modules\Main\Models\Company\Company;
|
||||||
|
use Modules\Main\Models\Company\CompanyAdmin;
|
||||||
|
use Modules\User\Models\User;
|
||||||
|
|
||||||
|
use App\Notifications\UserRegistered;
|
||||||
|
|
||||||
|
|
||||||
|
class CreateAdminController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(Request $request)
|
||||||
|
{
|
||||||
|
$company = Company::findOrFail($request->company_id);
|
||||||
|
if ($request->user()->cannot('update', $company))
|
||||||
|
{
|
||||||
|
abort(403, 'Unauthorized action');
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = User::where('email', $request->email)->orWhere('phone', $request->phone)->first();
|
||||||
|
if ($user)
|
||||||
|
{
|
||||||
|
if ($user->id !== auth()->id()) //если это не текущий пользователь-админ, который хочет себя сделать агентом, то ошибка
|
||||||
|
{
|
||||||
|
if (CompanyAdmin::where('user_id', $user->id)->count()) // и если этот пользователь уже админ
|
||||||
|
{
|
||||||
|
return back()->with('error', __('Admin is not unique'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$user = $user = User::create($request->all());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($user)
|
||||||
|
{
|
||||||
|
CompanyAdmin::where('user_id', $user->id)->delete(); //на случай, если где-то этот пользователь уже был админом
|
||||||
|
$agent = CompanyAdmin::create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'company_id' => $company->id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->sendToEmail)
|
||||||
|
{
|
||||||
|
$user->setForcedPassword();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$password = $user->setForcedPassword(false);
|
||||||
|
return back()->with('success', 'Пароль для пользователя установлен: ' . $password);
|
||||||
|
}
|
||||||
|
return back();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Main\Http\Livewire;
|
||||||
|
|
||||||
|
use Livewire\Component;
|
||||||
|
use Modules\Main\Models\Agent\Agent;
|
||||||
|
use Modules\Main\Models\Company\Company;
|
||||||
|
use Modules\Main\Models\Company\CompanyAdmin;
|
||||||
|
|
||||||
|
class CreateCompanyAdminLivewire extends Component
|
||||||
|
{
|
||||||
|
public $availableCompanies;
|
||||||
|
public $companyId;
|
||||||
|
public $containerId;
|
||||||
|
public function mount($containerId = 'createCompanyAdminModal')
|
||||||
|
{
|
||||||
|
$this->containerId = $containerId;
|
||||||
|
$availableCompaniesIds = GetAvailableAgents('Builder')->pluck('company_id');
|
||||||
|
$this->availableCompanies = Company::whereIn('id', $availableCompaniesIds)->get();
|
||||||
|
if ($this->availableCompanies->count() == 1) {
|
||||||
|
$this->companyId = $this->availableCompanies->first()->id;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
return view('main::company.livewire.createAdmin', [
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@
|
|||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
use Modules\User\Models\User;
|
||||||
use Modules\User\Models\UserRole;
|
use Modules\User\Models\UserRole;
|
||||||
use Modules\User\Models\Role;
|
use Modules\User\Models\Role;
|
||||||
|
|
||||||
@ -19,6 +20,10 @@ public function company()
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Company::class);
|
return $this->belongsTo(Company::class);
|
||||||
}
|
}
|
||||||
|
public function user()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(User::class);
|
||||||
|
}
|
||||||
protected static function booted(): void
|
protected static function booted(): void
|
||||||
{
|
{
|
||||||
static::created(function (CompanyAdmin $admin)
|
static::created(function (CompanyAdmin $admin)
|
||||||
|
|||||||
@ -67,6 +67,7 @@ protected function registerLivewire()
|
|||||||
{
|
{
|
||||||
//Livewire::component('<name>', \Modules\<NAME>\Http\Livewire\<NAME>::class);
|
//Livewire::component('<name>', \Modules\<NAME>\Http\Livewire\<NAME>::class);
|
||||||
Livewire::component('company.agent.create', \Modules\Main\Http\Livewire\CreateAgentLivewire::class);
|
Livewire::component('company.agent.create', \Modules\Main\Http\Livewire\CreateAgentLivewire::class);
|
||||||
|
Livewire::component('company.admin.create', \Modules\Main\Http\Livewire\CreateCompanyAdminLivewire::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function registerComponent()
|
protected function registerComponent()
|
||||||
|
|||||||
@ -22,6 +22,9 @@
|
|||||||
{
|
{
|
||||||
Route::get('/company/details/{company?}', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'index'])->name('company.details');
|
Route::get('/company/details/{company?}', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'index'])->name('company.details');
|
||||||
Route::post('/company/{company}/details/', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'store'])->name('company.details.store');
|
Route::post('/company/{company}/details/', [Modules\Main\Http\Controllers\Company\DetailsController::class, 'store'])->name('company.details.store');
|
||||||
|
|
||||||
|
Route::post('/companies/admins/store/', Modules\Main\Http\Controllers\Company\CreateAdminController::class)->name('company.admin.store');
|
||||||
|
|
||||||
Route::get('/agents/table', [Modules\Main\Http\Controllers\Company\AgentsTableController::class, 'index'])->name('company.agents.table');
|
Route::get('/agents/table', [Modules\Main\Http\Controllers\Company\AgentsTableController::class, 'index'])->name('company.agents.table');
|
||||||
//Route::post('/company/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store');
|
//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('/companies/agents/store/', Modules\Main\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store');
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
<div>
|
||||||
|
<div class="modal fade" id="{{ $containerId }}" tabindex="-1" aria-labelledby="createCompanyAdminModalLabel"
|
||||||
|
aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<form class="modal-content" action="{{ route('company.admin.store') }}" method="post">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5" id="exampleModalLabel">Новый администратор</h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@if($availableCompanies->count() == 0)
|
||||||
|
<div class="modal-body">
|
||||||
|
Нет доступных агентств для продолжения работы
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">ОК</button>
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
<div class="modal-body">
|
||||||
|
@csrf
|
||||||
|
@if($availableCompanies->count() > 1)
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="companyId" class="form-label">Агентство</label>
|
||||||
|
<select wire:model="companyId" class="form-select @error('companyId') is-invalid @enderror"
|
||||||
|
id="companyId" name="company_id" aria-label="Агентство">
|
||||||
|
<option selected></option>
|
||||||
|
@foreach ($availableCompanies as $company)
|
||||||
|
<option value="{{ $company['id'] }}">
|
||||||
|
{{ $company['name'] }}
|
||||||
|
</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
@elseif($availableCompanies->count() == 1)
|
||||||
|
<input type="hidden" class="form-control" id="company_id" name="company_id"
|
||||||
|
value="{{ $companyId }}">
|
||||||
|
@endif
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="adminName" class="form-label">Полное имя (ФИО)</label>
|
||||||
|
<input type="text" class="form-control" id="adminName" name="name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="adminEmail" class="form-label">Электронная почта</label>
|
||||||
|
<input type="text" class="form-control" id="adminEmail" name="email">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="adminPhone" class="form-label">Телефон</label>
|
||||||
|
<input type="text" class="form-control" id="adminPhone" name="phone">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3 form-check form-switch">
|
||||||
|
<input class="form-check-input" type="checkbox" role="switch" id="sendEmailSwitch"
|
||||||
|
name="sendToEmail" checked>
|
||||||
|
<label class="form-check-label" for="sendEmailSwitch">Отправить учетные данные на электронную
|
||||||
|
почту</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<input type="submit" class="btn btn-primary" value="Добавить">
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Loading…
Reference in New Issue
Block a user