diff --git a/app/Models/Deal/Deal.php b/app/Models/Deal/Deal.php index a9ab826..928602f 100644 --- a/app/Models/Deal/Deal.php +++ b/app/Models/Deal/Deal.php @@ -27,10 +27,6 @@ public function complex() { return $this->belongsTo(Complex::class); } - public function user() - { - return $this->belongsTo(User::class, 'client_id'); - } public function agent() { return $this->belongsTo(Agent::class, 'agent_id'); diff --git a/app/Modules/Bitrix/Database/Migrations/2025_11_12_000002_add_token_column_to_bitrixes_table.php b/app/Modules/Bitrix/Database/Migrations/2025_11_12_000002_add_token_column_to_bitrixes_table.php new file mode 100644 index 0000000..df44fdf --- /dev/null +++ b/app/Modules/Bitrix/Database/Migrations/2025_11_12_000002_add_token_column_to_bitrixes_table.php @@ -0,0 +1,27 @@ +string('token')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('bx_ids'); + } +}; diff --git a/app/Modules/Bitrix/Http/Controllers/ContractUpdateController.php b/app/Modules/Bitrix/Http/Controllers/ContractUpdateController.php index b463304..655174a 100644 --- a/app/Modules/Bitrix/Http/Controllers/ContractUpdateController.php +++ b/app/Modules/Bitrix/Http/Controllers/ContractUpdateController.php @@ -13,6 +13,11 @@ class ContractUpdateController { public function __invoke(Deal $deal, Request $request) { + $companyToken = $deal->agent->company->secret; + if ($request->token != $companyToken) + { + return false; + } $status = Contract::updateOrCreate( ['deal_id' => $deal->id], diff --git a/app/Modules/Bitrix/Models/BitrixId.php b/app/Modules/Bitrix/Models/BitrixId.php index 9c3ec0e..8e2d977 100644 --- a/app/Modules/Bitrix/Models/BitrixId.php +++ b/app/Modules/Bitrix/Models/BitrixId.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Facades\Hash; use Modules\Main\Models\Deal\Deal; use Modules\Main\Models\Deal\Client; @@ -35,56 +36,49 @@ protected static function booted() { return; } + $object = false; + $sender = new BitrixSender(); switch ( $bitrixId->bitrixable_type ) { case Deal::class: $deal = Deal::findOrFail($bitrixId->bitrixable_id); $sender = new SendDeal($deal); - $result = $sender->send(); - if ($result == true) - { - $id = $sender->resultData['id']; - $bitrixId->bx_id = $id; - return; - } + $object = $deal; break; case Agent::class: $agent = Agent::findOrFail($bitrixId->bitrixable_id); $sender = new SendAgent($agent); - $result = $sender->send(); - if ($result == true) - { - $id = $sender->resultData['id']; - $bitrixId->bx_id = $id; - return; - }; break; case DealClients::class: $dealClient = DealClients::findOrFail($bitrixId->bitrixable_id); $client = $dealClient->client; $sender = new SendClient($client); - $result = $sender->send(); - if ($result) - { - $id = $sender->resultData['id']; - $bitrixId->bx_id = $id; - $bitrixId->bitrixable_type = Client::class; - $bitrixId->bitrixable_id = $client->id; - return; - }; + $bitrixId->bitrixable_type = Client::class; + $bitrixId->bitrixable_id = $client->id; + $object = $client; break; case Company::class: $company = Company::findOrFail($bitrixId->bitrixable_id); $sender = new SendCompany($company); - $result = $sender->send(); - if ($result == true) - { - $id = $sender->resultData['id']; - $bitrixId->bx_id = $id; - return; - }; + $object = $company; break; } + if ($sender) + { + $bitrixId->token = Hash::make(json_encode([$object])); + $sender->setCallbackUrl( + route('api.company.confirm', [ + 'token' => $bitrixId->token + ]) + ); + $result = $sender->send(); + if ($result) + { + $id = $sender->resultData['id']; + $bitrixId->bx_id = $id; + return; + }; + } throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id); }); static::created(function (BitrixId $bitrixId) diff --git a/app/Modules/Bitrix/Models/BitrixSender.php b/app/Modules/Bitrix/Models/BitrixSender.php index fabbab5..ba0b338 100644 --- a/app/Modules/Bitrix/Models/BitrixSender.php +++ b/app/Modules/Bitrix/Models/BitrixSender.php @@ -8,13 +8,17 @@ class BitrixSender { + private $callbackUrl = false; protected $data; public $resultData; - public function __construct(array $data) + public function __construct() { - $this->data = $data; - } + } + public function setCallbackUrl($callbackUrl) + { + $this->callbackUrl = $callbackUrl; + } protected function getUrl() { $webhookEnumItem = false; @@ -51,6 +55,10 @@ protected function getUrl() } public function send() { + if ($this->callbackUrl) + { + $this->data['callbackUrl'] = $this->callbackUrl; + } $postdata = http_build_query( $this->data ); diff --git a/app/Modules/Main/Http/Controllers/Company/CreateCompanyController.php b/app/Modules/Main/Http/Controllers/Company/CreateCompanyController.php index 733d686..9dd682c 100644 --- a/app/Modules/Main/Http/Controllers/Company/CreateCompanyController.php +++ b/app/Modules/Main/Http/Controllers/Company/CreateCompanyController.php @@ -16,11 +16,6 @@ class CreateCompanyController extends Controller */ public function __invoke(Request $request) { - if ($request->user()->cannot('create', Company::class)) - { - abort(403, 'Unauthorized action'); - } - $company = false; $request->enum('type', CompanyType::class); $validated = $request->validate([