diff --git a/app/Livewire/CreateClientForm.php b/app/Livewire/CreateClientForm.php index 9d95361..dc24942 100644 --- a/app/Livewire/CreateClientForm.php +++ b/app/Livewire/CreateClientForm.php @@ -176,6 +176,7 @@ public function sendToBitrix(Deal $deal) 'BROKER_SECOND_NAME' => $agentName['secondName'], 'BROKER_PHONE' => $agent->user->phone, 'BROKER_INN' => $agent->company->inn, + 'BROKER_CONTACT_ID' => $agent->bitrixId(), 'OBJECT_NAME' => Complex::find($this->client['complexId'])->name, 'CALLBACK_URL' => route('api.client', ['hash' => $deal->confirmToken]), ]; diff --git a/app/Models/Deal/Deal.php b/app/Models/Deal/Deal.php index 5539156..cefb676 100644 --- a/app/Models/Deal/Deal.php +++ b/app/Models/Deal/Deal.php @@ -42,7 +42,6 @@ public function contract() protected static function booted(): void { - static::creating(function (Deal $deal) { $deal->confirm_token = hash('sha256', json_encode($deal->all())); @@ -58,11 +57,11 @@ protected static function booted(): void static::deleted(function (Deal $deal) { - /*UserRole::where([ - 'user_id' => $deal->client_id, - 'role_id' => Role::CLIENT - ])->delete();*/ + $deal->bitrixy()->delete(); + }); } + + } diff --git a/app/Modules/Admin/Http/Controllers/AdminBitrixController.php b/app/Modules/Admin/Http/Controllers/AdminBitrixController.php index 077893b..6976770 100644 --- a/app/Modules/Admin/Http/Controllers/AdminBitrixController.php +++ b/app/Modules/Admin/Http/Controllers/AdminBitrixController.php @@ -45,6 +45,7 @@ public function syncDeals(Agent $agent) foreach ($deals as $deal) { $inDeal = $deal['deal'];//входящие данные по сделке + if (count($deal['contacts']) == 0) { continue; @@ -70,7 +71,7 @@ public function syncDeals(Agent $agent) { $dealItem = Deal::create([ 'client_id' => $client->id, - 'complex_id' => $inDeal->complex_id, + 'complex_id' => $inDeal['complex_id'], 'agent_id' => $agent->id, 'status' => DealStatus::UNIQUE, ]); diff --git a/app/Modules/Admin/Http/Controllers/AdminBitrixWebhooksController.php b/app/Modules/Admin/Http/Controllers/AdminBitrixWebhooksController.php new file mode 100644 index 0000000..237a122 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/AdminBitrixWebhooksController.php @@ -0,0 +1,54 @@ +keyBy('name')->toArray(); + + return view('admin::bitrix.webhooks', [ + 'names' => $this->names, + 'webhooks' => $webhooks + ]); + } + + public function create(Request $request) + { + foreach ($this->names as $name) + { + if ($request->has($name) && $request->$name) + { + BitrixWebhooks::updateOrCreate( + ['name' => $name], + [ + 'name' => $name, + 'url' => $request->$name + ] + ); + } + } + return back(); + } + + public function delete($name) + { + BitrixWebhooks::where('name', $name)->delete(); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index 1532b76..a3511bc 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -61,4 +61,8 @@ Route::post('/admin/bitrix/agents/{agent}/set', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'setAgentId'])->name('admin.bitrix.agent.set'); Route::get('/admin/bitrix/agents/{agent}/deals/sync', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'syncDeals'])->name('admin.bitrix.agent.deals.sync'); + Route::get('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'index'])->name('admin.bitrix.webhooks'); + Route::post('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'create'])->name('admin.bitrix.webhooks.create'); + + }); \ No newline at end of file diff --git a/app/Modules/Admin/Views/bitrix/index.blade.php b/app/Modules/Admin/Views/bitrix/index.blade.php index d672a6d..b2ace4b 100644 --- a/app/Modules/Admin/Views/bitrix/index.blade.php +++ b/app/Modules/Admin/Views/bitrix/index.blade.php @@ -1,6 +1,17 @@ @php($title = 'Битрикс24') @extends('layouts.admin') @section('content') +
+
+ Вебхуки +
+
+
Управление вебхуками
+

Создать вебхуки на стороне Битрикса и указать их в этом разделе +

+ Перейти +
+
Агенты diff --git a/app/Modules/Admin/Views/bitrix/webhooks.blade.php b/app/Modules/Admin/Views/bitrix/webhooks.blade.php new file mode 100644 index 0000000..32db269 --- /dev/null +++ b/app/Modules/Admin/Views/bitrix/webhooks.blade.php @@ -0,0 +1,26 @@ +@php($title = 'Битрикс24: вебхуки') + +@extends('layouts.admin') +@section('content') + +
+ @foreach ($names as $name) +
+ @csrf +
+ {{ __('admin.' . $name) }} +
+
+ +
+
+ @endforeach + + +
+@endsection diff --git a/app/Modules/Bitrix/Database/Migrations/2025_08_28_276566_create_bitriks_webhooks_table.php b/app/Modules/Bitrix/Database/Migrations/2025_08_28_276566_create_bitriks_webhooks_table.php new file mode 100644 index 0000000..68320e3 --- /dev/null +++ b/app/Modules/Bitrix/Database/Migrations/2025_08_28_276566_create_bitriks_webhooks_table.php @@ -0,0 +1,36 @@ +id(); + $table->enum('name', [ + 'CREATE_COMPANY', + 'CREATE_CONTACT', + 'CREATE_DEAL', + 'UPDATE_DEAL', + 'DEAL_SYNC' + ]); + $table->text('url'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('bx_webhooks'); + } +}; diff --git a/app/Modules/Bitrix/Models/BitrixId.php b/app/Modules/Bitrix/Models/BitrixId.php index 5b2d93f..7e964a2 100644 --- a/app/Modules/Bitrix/Models/BitrixId.php +++ b/app/Modules/Bitrix/Models/BitrixId.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class BitrixId extends Model diff --git a/app/Modules/Bitrix/Models/BitrixWebhooks.php b/app/Modules/Bitrix/Models/BitrixWebhooks.php new file mode 100644 index 0000000..6aed767 --- /dev/null +++ b/app/Modules/Bitrix/Models/BitrixWebhooks.php @@ -0,0 +1,19 @@ +morphOne(BitrixId::class, 'bitrixable'); + return $this->MorphOne(BitrixId::class, 'bitrixable'); } public function bitrixId() { - if ($row = $this->bitrixable()->first()) + if ($row = $this->bitrixy()->first()) { return $row->bx_id; } @@ -24,29 +28,16 @@ public function bitrixId() } public function setBitrixId($id): bool { - $this->bitrixable()->delete(); + $this->bitrixy()->delete(); $bitrixId = new BitrixId([ 'bx_id' => $id ]); - if ($this->bitrixable()->save($bitrixId)) + if ($this->bitrixy()->save($bitrixId)) { return true; } return false; } - - protected static function booted() - { - static::deleted(function ($bitrixableItem) - { - $this->bitrixable()->delete(); - }); - - static::forceDeleted(function ($bitrixableItem) - { - $this->bitrixable()->delete(); - }); - } } diff --git a/app/Modules/Contracts/Http/Controllers/ContractsController.php b/app/Modules/Contracts/Http/Controllers/ContractsController.php index dceafce..0b663ac 100644 --- a/app/Modules/Contracts/Http/Controllers/ContractsController.php +++ b/app/Modules/Contracts/Http/Controllers/ContractsController.php @@ -8,6 +8,7 @@ use Illuminate\Http\Request; + class ContractsController extends Controller { public function index(Request $request) @@ -32,11 +33,13 @@ public function index(Request $request) public function delete(Contract $contract) { - $deal = $contract->deal(); + $deal = $contract->deal; if ($contract->delete()) { + $bitrixable = $deal->bitrixy; if ($deal->delete()) { + $bitrixable->delete(); return back()->with('success', 'Договор был успешно удален из базы данных'); } } diff --git a/app/Modules/Contracts/Http/Livewire/ContractsTableLivewire.php b/app/Modules/Contracts/Http/Livewire/ContractsTableLivewire.php index da2a96a..ffd97d1 100644 --- a/app/Modules/Contracts/Http/Livewire/ContractsTableLivewire.php +++ b/app/Modules/Contracts/Http/Livewire/ContractsTableLivewire.php @@ -74,7 +74,14 @@ private function appendFilter(&$query) { foreach ($this->filter as $fKey => $fValue) { - $query->where($fKey, $fValue); + if (is_array($fValue)) + { + $query->whereIn($fKey, $fValue); + } + else + { + $query->where($fKey, $fValue); + } } } public function render() diff --git a/app/Modules/Contracts/Views/index.blade.php b/app/Modules/Contracts/Views/index.blade.php index eaa0790..b923445 100644 --- a/app/Modules/Contracts/Views/index.blade.php +++ b/app/Modules/Contracts/Views/index.blade.php @@ -36,14 +36,23 @@
+ + + + + -->
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 17f689d..b166231 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -15,7 +15,7 @@ - + @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/js/multiselect.js', 'resources/css/app.css', 'resources/css/docs.css', 'resources/css/multiselect.css']) @@ -127,7 +127,6 @@ @include('notice::index') - @vite(['resources/sass/app.scss', 'resources/js/app.js', 'resources/css/app.css', 'resources/css/docs.css']) diff --git a/vite.config.js b/vite.config.js index fa92396..d5dc576 100644 --- a/vite.config.js +++ b/vite.config.js @@ -7,8 +7,10 @@ export default defineConfig({ input: [ 'resources/sass/app.scss', 'resources/js/app.js', + 'resources/js/multiselect.js', 'resources/css/app.css', 'resources/css/docs.css', + 'resources/css/multiselect.css', ], refresh: true, }),