From 474c97d4e873121a5de49e0995a0350ad8b79e94 Mon Sep 17 00:00:00 2001 From: developer Date: Tue, 9 Dec 2025 10:35:53 +0800 Subject: [PATCH] =?UTF-8?q?fix!=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B4=D0=B5=D0=BB=D0=BA=D0=B8=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=B1=D0=B8=D1=82=D1=80=D0=B8=D0=BA=D1=81=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=9B=D0=9A=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/BitrixApiController.php | 58 +++++++++---------- .../Controllers/ConfirmCompanyController.php | 3 +- app/Modules/Bitrix/Models/BitrixId.php | 2 +- app/Modules/Bitrix/Models/BitrixSender.php | 8 ++- app/Modules/Bitrix/Models/SendAgent.php | 6 +- app/Modules/Bitrix/Models/SendClient.php | 6 +- app/Modules/Bitrix/Models/SendCompany.php | 16 ++--- app/Modules/Bitrix/Models/SendDeal.php | 5 +- .../Bitrix/Providers/RouteServiceProvider.php | 6 +- app/Modules/Bitrix/Routes/api.php | 3 +- app/Notifications/NotUniqueContact.php | 9 ++- app/Notifications/UniqueContact.php | 10 +++- routes/api.php | 6 -- 13 files changed, 66 insertions(+), 72 deletions(-) diff --git a/app/Modules/Bitrix/Http/Controllers/BitrixApiController.php b/app/Modules/Bitrix/Http/Controllers/BitrixApiController.php index bf4b290..fd51192 100644 --- a/app/Modules/Bitrix/Http/Controllers/BitrixApiController.php +++ b/app/Modules/Bitrix/Http/Controllers/BitrixApiController.php @@ -5,74 +5,74 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; -use App\Models\Deal\Deal; -use App\Models\Deal\DealStatus; +use Modules\Main\Models\Deal\Deal; +use Modules\Main\Models\Deal\DealStatus; use App\Notifications\UniqueContact; use App\Notifications\NotUniqueContact; use App\Notifications\Deal\DealUnique; use App\Notifications\Deal\DealNotUnique; +use Modules\Bitrix\Models\BitrixId; + use Illuminate\Support\Facades\Log; class BitrixApiController extends Controller { - public const ACTION_CONFIRM_DEAL = 'confirm_deal'; + public const ACTION_CONFIRM_DEAL = 'confirm_deal'; public const ACTION_UPDATE_CONTRACT = 'update_contract'; public const ACTION_CONFIRM_COMPANY = 'confirm_company'; public function index(Request $request) { - switch ( $request->action ) - { - case $this::ACTION_CONFIRM_DEAL: - $deal = Deal::where('confirm_token', $request->token)->first(); - $this->confirmDeal($deal, $request); - break; - case $this::ACTION_UPDATE_CONTRACT: - $deal = Deal::where('confirm_token', $request->token)->first(); - $this->updateContract($deal, $request); - break; - case $this::ACTION_CONFIRM_COMPANY: - $this->confirmCompany($request); - break; - } + if (!$bxId = BitrixId::where('token', $request->token)->first()) { + return false; + }; + $object = $bxId->bitrixable; + switch ($request->action) { + case $this::ACTION_CONFIRM_DEAL: + $this->confirmDeal($object, $request); + break; + case $this::ACTION_UPDATE_CONTRACT: + $this->updateContract($object, $request); + break; + case $this::ACTION_CONFIRM_COMPANY: + $this->confirmCompany($request, $object); + break; + } return false; } - public function confirmCompany(Request $request) + public function confirmCompany(Request $request, $company) { $confirmer = new ConfirmCompanyController; - $confirmer($request); + $confirmer($request, $company); } public function confirmDeal(Deal $deal, Request $request) { $agent = $deal->agent; - if ((bool) $request->is_unique == true) - { + $request->is_unique = json_decode($request->is_unique, true); + if ($request->is_unique == true) { $deal->status = DealStatus::UNIQUE; $agent->user->notify(new UniqueContact($deal)); $deal->notify(new DealUnique()); - } - else - { + } else { $deal->status = DealStatus::NOT_UNIQUE; $agent->user->notify(new NotUniqueContact($deal)); $deal->notify(new DealNotUnique()); } - if (!$agent->bitrixId()) - { + if (!$agent->bitrixId()) { $agent->setBitrixId($request->agent_id); } Log::build([ 'driver' => 'single', - 'path' => storage_path('logs/bitrix.log'), + 'path' => storage_path('logs/bitrix.log'), ])->error( json_encode( [ 'is_unique' => $request->is_unique, - 'deal' => $deal->id, - 'status' => $deal->status + 'deal' => $deal->id, + 'status' => $deal->status ] ) ); diff --git a/app/Modules/Bitrix/Http/Controllers/ConfirmCompanyController.php b/app/Modules/Bitrix/Http/Controllers/ConfirmCompanyController.php index efed76b..88c26be 100644 --- a/app/Modules/Bitrix/Http/Controllers/ConfirmCompanyController.php +++ b/app/Modules/Bitrix/Http/Controllers/ConfirmCompanyController.php @@ -20,9 +20,8 @@ class ConfirmCompanyController extends Controller * @param $reqest['status'] - new|accepted|declined * @return bool */ - public function __invoke(Request $request) + public function __invoke(Request $request, Company $company) { - $company = Company::find($request->company_id); if ($company->secret == $request->token) { $company->status = $request->status; diff --git a/app/Modules/Bitrix/Models/BitrixId.php b/app/Modules/Bitrix/Models/BitrixId.php index 989ca2b..f3fd3f4 100644 --- a/app/Modules/Bitrix/Models/BitrixId.php +++ b/app/Modules/Bitrix/Models/BitrixId.php @@ -67,7 +67,7 @@ protected static function booted() { $bitrixId->token = Hash::make(json_encode([$object])); $sender->setCallbackUrl( - route('api.company.confirm', [ + route('api.bx.action', [ 'token' => $bitrixId->token ]) ); diff --git a/app/Modules/Bitrix/Models/BitrixSender.php b/app/Modules/Bitrix/Models/BitrixSender.php index ba0b338..0bc78a3 100644 --- a/app/Modules/Bitrix/Models/BitrixSender.php +++ b/app/Modules/Bitrix/Models/BitrixSender.php @@ -8,17 +8,21 @@ class BitrixSender { - private $callbackUrl = false; + protected $callbackUrl = false; protected $data; public $resultData; public function __construct() { - + $this->data = []; } public function setCallbackUrl($callbackUrl) { $this->callbackUrl = $callbackUrl; } + + public function addDataItem($key, $value) { + $this->data[$key] = $value; + } protected function getUrl() { $webhookEnumItem = false; diff --git a/app/Modules/Bitrix/Models/SendAgent.php b/app/Modules/Bitrix/Models/SendAgent.php index ddad41b..f0fa4ce 100644 --- a/app/Modules/Bitrix/Models/SendAgent.php +++ b/app/Modules/Bitrix/Models/SendAgent.php @@ -12,9 +12,7 @@ class SendAgent extends BitrixSender use HasFactory; public function __construct(Agent $agent) { - $this->data = [ - 'name' => $agent->user->name, - 'phones' => [$agent->user->phone], - ]; + $this->addDataItem('name', $agent->user->name); + $this->addDataItem('phones', [$agent->user->phone]); } } diff --git a/app/Modules/Bitrix/Models/SendClient.php b/app/Modules/Bitrix/Models/SendClient.php index 4cc44d7..4fd598b 100644 --- a/app/Modules/Bitrix/Models/SendClient.php +++ b/app/Modules/Bitrix/Models/SendClient.php @@ -12,9 +12,7 @@ class SendClient extends BitrixSender use HasFactory; public function __construct(Client $client) { - $this->data = [ - 'name' => $client->name, - 'phones' => [$client->phone], - ]; + $this->addDataItem('name', $client->name); + $this->addDataItem('phones', $client->phone); } } diff --git a/app/Modules/Bitrix/Models/SendCompany.php b/app/Modules/Bitrix/Models/SendCompany.php index 36847a4..0aa3bce 100644 --- a/app/Modules/Bitrix/Models/SendCompany.php +++ b/app/Modules/Bitrix/Models/SendCompany.php @@ -11,16 +11,10 @@ class SendCompany extends BitrixSender use HasFactory; public function __construct(Company $company) { - $this->data = [ - 'name' => $company->name, - 'inn' => $company->inn, - 'email' => $company->email, - 'phone' => $company->phone, - 'address' => $company->legal_address, - 'callbackUrl' => route('api.company.confirm', [ - 'token' => $company->secret - ]) - - ]; + $this->addDataItem('name', $company->name); + $this->addDataItem('inn', $company->inn); + $this->addDataItem('email', $company->email); + $this->addDataItem('phone', $company->phone); + $this->addDataItem('address', $company->legal_address); } } diff --git a/app/Modules/Bitrix/Models/SendDeal.php b/app/Modules/Bitrix/Models/SendDeal.php index 947e12c..2628b47 100644 --- a/app/Modules/Bitrix/Models/SendDeal.php +++ b/app/Modules/Bitrix/Models/SendDeal.php @@ -12,9 +12,6 @@ class SendDeal extends BitrixSender use HasFactory; public function __construct(Deal $deal) { - $this->data = [ - 'token' => $deal->confirm_token, - 'complexName' => $deal->complex->name - ]; + $this->addDataItem('complexName', $deal->complex->name); } } diff --git a/app/Modules/Bitrix/Providers/RouteServiceProvider.php b/app/Modules/Bitrix/Providers/RouteServiceProvider.php index fbc6a0b..cb7a0cf 100644 --- a/app/Modules/Bitrix/Providers/RouteServiceProvider.php +++ b/app/Modules/Bitrix/Providers/RouteServiceProvider.php @@ -20,8 +20,10 @@ protected function registerWebRoutes() //Set Default Controllers Namespace ->namespace('Modules\\Bitrix\\Http\\Controllers') ->group(app_path('Modules/Bitrix/Routes/web.php')); + Route::middleware('api') - ->prefix('api') - ->group(base_path('Modules/Bitrix/Routes/api.php')); + ->namespace('Modules\\Bitrix\\Http\\Controllers') + ->prefix('api/bx') + ->group(app_path('Modules/Bitrix/Routes/api.php')); } } \ No newline at end of file diff --git a/app/Modules/Bitrix/Routes/api.php b/app/Modules/Bitrix/Routes/api.php index 1dd580d..f9e938c 100644 --- a/app/Modules/Bitrix/Routes/api.php +++ b/app/Modules/Bitrix/Routes/api.php @@ -21,4 +21,5 @@ return $request->user(); }); -Route::get('/action', [BitrixApiController::class, 'index']); +Route::post('/action', [BitrixApiController::class, 'index'])->name('api.bx.action'); +Route::get('/action', [BitrixApiController::class, 'index']); \ No newline at end of file diff --git a/app/Notifications/NotUniqueContact.php b/app/Notifications/NotUniqueContact.php index 97b2596..0a9029d 100644 --- a/app/Notifications/NotUniqueContact.php +++ b/app/Notifications/NotUniqueContact.php @@ -7,8 +7,8 @@ use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Models\Deal\Deal; -use App\Models\Deal\DealStatus; +use Modules\Main\Models\Deal\Deal; +use Modules\Main\Models\Deal\DealStatus; class NotUniqueContact extends Notification { @@ -54,9 +54,12 @@ public function toMail(object $notifiable): MailMessage */ public function toArray(object $notifiable): array { + $clientsNames = $this->deal->clients->pluck('name')->toArray(); return [ 'deal' => $this->deal->id, - 'text' => __('notifications.' . get_class($this), ['contact' => $this->deal->user->name]) + 'text' => __('notifications.' . get_class($this), [ + 'contact' => implode(', ', $clientsNames) + ]) ]; } } diff --git a/app/Notifications/UniqueContact.php b/app/Notifications/UniqueContact.php index ddcabe1..f3f30c7 100644 --- a/app/Notifications/UniqueContact.php +++ b/app/Notifications/UniqueContact.php @@ -7,8 +7,8 @@ use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; -use App\Models\Deal\Deal; -use App\Models\Deal\DealStatus; +use Modules\Main\Models\Deal\Deal; +use Modules\Main\Models\Deal\DealStatus; class UniqueContact extends Notification { @@ -54,9 +54,13 @@ public function toMail(object $notifiable): MailMessage */ public function toArray(object $notifiable): array { + $clientsNames = $this->deal->clients->pluck('name')->toArray(); return [ 'deal' => $this->deal->id, - 'text' => __('notifications.' . get_class($this), ['contact' => $this->deal->user->name]) + 'text' => __('notifications.' . get_class($this), + [ + 'contact' => implode(', ', $clientsNames) + ]) ]; } } diff --git a/routes/api.php b/routes/api.php index 23d41fc..35bfb0c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,9 +24,3 @@ return $request->user(); }); -Route::post('/client', [BitrixApiController::class, 'index'])->name('api.client'); -Route::post('/company/confirm', [BitrixApiController::class, 'index'])->name('api.company.confirm'); - - -//Route::post('/client/confirm', [ConfirmClientFromBitrix::class, 'confirm'])->name('deal.confirm'); -//Route::post('/client/{$deal}/contract', CoController::class)->name('company.status.update');