логика работы с компаниями перенесена в модуль main

This commit is contained in:
Thekindbull 2025-11-09 17:45:45 +08:00
parent b61f246b51
commit 67b31948bd
26 changed files with 125 additions and 79 deletions

View File

@ -86,7 +86,6 @@ protected static function booted()
break;
}
throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id);
});
static::created(function (BitrixId $bitrixId)
{

View File

@ -38,9 +38,9 @@ public function send()
$result = file_get_contents($this->url, false, $context);
$result = json_decode($result, $associative = true);
$this->resultData = $result;
if (array_key_exists('result', $result))
if (is_array($this->resultData) && array_key_exists('result', $result))
{
return $result['result'];
return true;
}
else
{

View File

@ -5,17 +5,21 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Modules\Main\Models\Agent\Agent;
use Modules\Main\Models\Complex;
use Modules\Main\Models\Company\Company;
class SendCompany extends BitrixSender
{
use HasFactory;
public function __construct(Agent $agent)
public function __construct(Company $company)
{
$this->data = [
'name' => $agent->user->name,
'phones' => [$agent->user->phone],
'name' => $company->name,
'inn' => $company->inn,
'email' => $company->email,
'address' => $company->legal_address
//'phone' => $company->phone,
];
//dd($company);
$this->url = 'https://b24alfa.pro/channels/lk/createCompany/';
}
}

View File

@ -48,8 +48,16 @@ protected static function create(array $attributes = [])
$model = new static();
$model->fill($attributes);
$model->save();
$model->setBitrixId();
return $model;
try
{
$model->setBitrixId();
return $model;
}
catch (\Exception $e)
{
$model->delete();
throw new \Exception('Error of bitrix identifier getter');
}
}
public static function firstOrCreate($attributes = [], $values = [])

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
@ -28,7 +28,7 @@ public function index(Request $request)
$agents->withTrashed();
}
return view('company.agents.table', [
return view('main::company.agents.table', [
'agents' => $agents->get(),
'status' => $request->status,
'cities' => City::all()

View File

@ -1,46 +1,46 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Foundation\Auth\RegistersUsers;
use App\Models\Company\Company;
use App\Models\Company\CompanyAdmin;
use Modules\Main\Models\Company\Company;
use Modules\Main\Models\Company\CompanyAdmin;
use App\Models\User;
class ConfirmCompanyController extends Controller
{
{
use RegistersUsers;
public function __invoke(Request $request)
{
{
$company = Company::find($request->company_id);
if ($company->secret == $request->secret)
{
{
$company->status = $request->status;
$company->save();
$user = User::where('email', $company->email);
if ($user->count() == 1)
{
{
$user = $user->first();
}
}
else
{
{
$user = User::create([
'name' => $request->user_name,
'name' => $request->user_name,
'email' => $company->email,
'phone' => $request->user_phone
]);
$user->setForcedPassword();
}
}
CompanyAdmin::where('user_id', $user->id)->delete();//удаляю, если уже была админская учетка
CompanyAdmin::create([
'user_id' => $user->id,
'user_id' => $user->id,
'company_id' => $company->id
]);
return true;
}
return false;
}
}
return false;
}
}

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Company\CompanyAdmin;
use App\Models\Agent\Agent;
use Modules\Main\Models\Company\CompanyAdmin;
use Modules\Main\Models\Agent\Agent;
use App\Models\User;
use App\Notifications\UserRegistered;

View File

@ -1,13 +1,13 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use Illuminate\Validation\Rule;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Company\Company;
use App\Models\Company\CompanyType;
use Modules\Main\Models\Company\Company;
use Modules\Main\Models\Company\CompanyType;
use App\Models\Bitrix\SendCompany;
class CreateCompanyController extends Controller
{
@ -16,6 +16,7 @@ class CreateCompanyController extends Controller
*/
public function __invoke(Request $request)
{
$company = false;
$request->enum('type', CompanyType::class);
$validated = $request->validate([
'name' => 'required|max:255',
@ -33,23 +34,31 @@ public function __invoke(Request $request)
]);
$data = $request->only('name', 'email', 'inn', 'legal_address', 'secret', 'status', 'type', 'phone', 'city_id');
$company = Company::create($data);
if (!$company)
try
{
return back()->withErrors(['msg' => 'Company creation error'])->withInput();
$company = Company::create($data);
}
catch (\Exception $e)
{
if ($e->getMessage() == 'Error of bitrix identifier getter')
{
return back()->withErrors(['msg' => 'Не удалось отправить данные на проверку. Попробуйте позже'])->withInput();
}
return back()->withErrors(['msg' => 'Не удалось создать агентство. Попробуйте позже'])->withInput();
}
$data['callback_url'] = route('company.status.update', [
'company_id' => $company->id,
'secret' => $company->secret
]);
$companyConfirmByBitrix = new SendCompany($company->id, $data);
/*$companyConfirmByBitrix = new SendCompany($company->id, $data);
if (!$sender = $companyConfirmByBitrix->send())
{
$company->delete();
return back()->withErrors(['msg' => 'Error with bitrix sender'])->withInput();
}
return view('company.created');
}*/
return view('main::company.created');
}
}

View File

@ -1,12 +1,12 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Company\Company;
use App\Models\Company\CompanyType;
use App\Models\City;
use Modules\Main\Models\Company\Company;
use Modules\Main\Models\Company\CompanyType;
use Modules\Main\Models\City;
class CreateCompanyFormController extends Controller
{
@ -28,7 +28,7 @@ public function __invoke(Request $request)
$city_id = $request->city_id;
}
;
return view('company.create', [
return view('main::company.create', [
'type' => $type,
'city_id' => $city_id,
'typesList' => CompanyType::cases(),

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Company\CompanyAdmin;
use App\Models\Agent\Agent;
use Modules\Main\Models\Company\CompanyAdmin;
use Modules\Main\Models\Agent\Agent;
use App\Models\User;
class DeleteAgentController extends Controller

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
@ -37,7 +37,7 @@ public function index($companyId = null)
$details = $details->get();
if ($company->type == CompanyType::SelfEmployer || $company->type == CompanyType::SoleProperty)
{
return view('company.details.selfemp', [
return view('main::company.details.selfemp', [
'company' => $company,
'details' => $details
]);
@ -45,7 +45,7 @@ public function index($companyId = null)
;
if ($company->type == CompanyType::Agency)
{
return view('company.details.agency', [
return view('main::company.details.agency', [
'company' => $company,
'details' => $details
]);

View File

@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

View File

@ -1,11 +1,11 @@
<?php
namespace App\Http\Controllers\Company;
namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Company\CompanyAdmin;
use App\Models\Agent\Agent;
use Modules\Main\Models\Company\CompanyAdmin;
use Modules\Main\Models\Agent\Agent;
use App\Models\User;
class RestoreAgentController extends Controller

View File

@ -38,4 +38,13 @@ public function city()
{
return $this->belongsTo(City::class);
}
protected static function booted()
{
static::created(function (Company $company)
{
$details = new Details($company);
$details->create();
});
}
}

View File

@ -17,6 +17,15 @@ public function __construct(Company $company)
}
public function get()
{
if (!$this->company->details)
{
$this->create();
}
return $this->details = $this->company->details;
}
public function create()
{
if (!$this->company->details)
{

View File

@ -3,11 +3,37 @@
use Illuminate\Support\Facades\Route;
use Modules\Main\Http\Controllers\MainController;
Route::middleware(['auth'])->group(function() {
//Company
Route::get('/company/create', Modules\Main\Http\Controllers\Company\CreateCompanyFormController::class)->name('company.form.create');
Route::post('/company/create', Modules\Main\Http\Controllers\Company\CreateCompanyController::class)->name('company.create');
Route::post('/company/status/update', Modules\Main\Http\Controllers\Company\ConfirmCompanyController::class)->name('company.status.update');
Route::middleware(['auth'])->group(function ()
{
Route::get('/main', [MainController::class, 'index']);
Route::middleware(['hasAccess'])->group(function() {
Route::get('/company/confirmer', function ()
{
return view(view: 'company.post_confirmer');
});
Route::middleware(['auth'])->group(function ()
{
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::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/{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}/restore', Modules\Main\Http\Controllers\Company\RestoreAgentController::class)->name('company.agents.restore');
});
Route::middleware(['hasAccess'])->group(function ()
{
/** Routes that need to be protected - Маршруты которые нужно защитить */
});
});

View File

@ -70,9 +70,9 @@
</div>
</div>
</header>
<main class="px-3">
<main class="p-3">
@foreach ($errors->all() as $error)
{{ $error }}
<div class="alert alert-danger">{{ $error }}</div>
@endforeach
@yield('content')
</main>

View File

@ -19,12 +19,11 @@
*/
Route::middleware('auth:sanctum')->get('/user', function (Request $request)
{
{
return $request->user();
});
});
Route::post('/client', [ClientsApiController::class, 'index'])->name('api.client');
//Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm');
//Route::post('/client/{$deal}/contract', CoController::class)->name('company.status.update');
Route::post('/company/status/update', ConfirmCompanyController::class)->name('company.status.update');

View File

@ -27,27 +27,10 @@
return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify');
//Company
Route::get('/company/create', App\Http\Controllers\Company\CreateCompanyFormController::class)->name('company.form.create');
Route::post('/company/create', CreateCompanyController::class)->name('company.create');
Route::get('/company/confirmer', function ()
{
return view(view: 'company.post_confirmer');
});
Route::middleware(['auth'])->group(function ()
{
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/clients/table', [App\Http\Controllers\ClientsTableController::class, 'index'])->name('clients.table');
Route::get('/company/details/{company?}', [App\Http\Controllers\Company\DetailsController::class, 'index'])->name('company.details');
Route::post('/company/{company}/details/', [App\Http\Controllers\Company\DetailsController::class, 'store'])->name('company.details.store');
Route::get('/agents/table', [App\Http\Controllers\Company\AgentsTableController::class, 'index'])->name('company.agents.table');
Route::post('/company/agents/store/', App\Http\Controllers\Company\CreateAgentController::class)->name('company.agents.store');
Route::post('/company/agents/{agent}/password/reset/', App\Http\Controllers\Company\ResetAgentPasswordController::class)->name('company.agent.password.reset');
Route::get('/company/agents/{agent}/delete', App\Http\Controllers\Company\DeleteAgentController::class)->name('company.agents.delete');
Route::get('/company/agents/{agent}/restore', App\Http\Controllers\Company\RestoreAgentController::class)->name('company.agents.restore');
});
//МАКЕТЫ