логика работы с компаниями перенесена в модуль 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; break;
} }
throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id); throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id);
}); });
static::created(function (BitrixId $bitrixId) static::created(function (BitrixId $bitrixId)
{ {

View File

@ -38,9 +38,9 @@ public function send()
$result = file_get_contents($this->url, false, $context); $result = file_get_contents($this->url, false, $context);
$result = json_decode($result, $associative = true); $result = json_decode($result, $associative = true);
$this->resultData = $result; $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 else
{ {

View File

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

View File

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

View File

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

View File

@ -1,13 +1,13 @@
<?php <?php
namespace App\Http\Controllers\Company; namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Foundation\Auth\RegistersUsers;
use App\Models\Company\Company; use Modules\Main\Models\Company\Company;
use App\Models\Company\CompanyAdmin; use Modules\Main\Models\Company\CompanyAdmin;
use App\Models\User; use App\Models\User;
class ConfirmCompanyController extends Controller class ConfirmCompanyController extends Controller

View File

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

View File

@ -1,13 +1,13 @@
<?php <?php
namespace App\Http\Controllers\Company; namespace Modules\Main\Http\Controllers\Company;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Company\Company; use Modules\Main\Models\Company\Company;
use App\Models\Company\CompanyType; use Modules\Main\Models\Company\CompanyType;
use App\Models\Bitrix\SendCompany; use App\Models\Bitrix\SendCompany;
class CreateCompanyController extends Controller class CreateCompanyController extends Controller
{ {
@ -16,6 +16,7 @@ class CreateCompanyController extends Controller
*/ */
public function __invoke(Request $request) public function __invoke(Request $request)
{ {
$company = false;
$request->enum('type', CompanyType::class); $request->enum('type', CompanyType::class);
$validated = $request->validate([ $validated = $request->validate([
'name' => 'required|max:255', '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'); $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', [ $data['callback_url'] = route('company.status.update', [
'company_id' => $company->id, 'company_id' => $company->id,
'secret' => $company->secret 'secret' => $company->secret
]); ]);
$companyConfirmByBitrix = new SendCompany($company->id, $data); /*$companyConfirmByBitrix = new SendCompany($company->id, $data);
if (!$sender = $companyConfirmByBitrix->send()) if (!$sender = $companyConfirmByBitrix->send())
{ {
$company->delete(); $company->delete();
return back()->withErrors(['msg' => 'Error with bitrix sender'])->withInput(); 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 <?php
namespace App\Http\Controllers\Company; namespace Modules\Main\Http\Controllers\Company;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Company\Company; use Modules\Main\Models\Company\Company;
use App\Models\Company\CompanyType; use Modules\Main\Models\Company\CompanyType;
use App\Models\City; use Modules\Main\Models\City;
class CreateCompanyFormController extends Controller class CreateCompanyFormController extends Controller
{ {
@ -28,7 +28,7 @@ public function __invoke(Request $request)
$city_id = $request->city_id; $city_id = $request->city_id;
} }
; ;
return view('company.create', [ return view('main::company.create', [
'type' => $type, 'type' => $type,
'city_id' => $city_id, 'city_id' => $city_id,
'typesList' => CompanyType::cases(), 'typesList' => CompanyType::cases(),

View File

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

View File

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

View File

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

View File

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

View File

@ -38,4 +38,13 @@ public function city()
{ {
return $this->belongsTo(City::class); 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() public function get()
{
if (!$this->company->details)
{
$this->create();
}
return $this->details = $this->company->details;
}
public function create()
{ {
if (!$this->company->details) if (!$this->company->details)
{ {

View File

@ -3,11 +3,37 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Modules\Main\Http\Controllers\MainController; 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::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 - Маршруты которые нужно защитить */ /** Routes that need to be protected - Маршруты которые нужно защитить */
}); });
}); });

View File

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

View File

@ -27,4 +27,3 @@
//Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm'); //Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm');
//Route::post('/client/{$deal}/contract', CoController::class)->name('company.status.update'); //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'); return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify'); })->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::middleware(['auth'])->group(function ()
{ {
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); 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('/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');
}); });
//МАКЕТЫ //МАКЕТЫ