diff --git a/app/Http/Controllers/Bitrix/ClientsApiController.php b/app/Http/Controllers/Bitrix/ClientsApiController.php index 319ebaf..351a241 100644 --- a/app/Http/Controllers/Bitrix/ClientsApiController.php +++ b/app/Http/Controllers/Bitrix/ClientsApiController.php @@ -53,6 +53,11 @@ public function confirm(Deal $deal, Request $request) $deal->notify(new DealNotUnique()); } + if (!$agent->bitrixId) + { + $agent->bitrixId()->create(['bx_id' => $request->agent_id]); + } + Log::build([ 'driver' => 'single', 'path' => storage_path('logs/bitrix.log'), diff --git a/app/Http/Controllers/Bitrix/ContractApiController.php b/app/Http/Controllers/Bitrix/ContractApiController.php index 2f50964..2485f50 100644 --- a/app/Http/Controllers/Bitrix/ContractApiController.php +++ b/app/Http/Controllers/Bitrix/ContractApiController.php @@ -31,6 +31,11 @@ public function __invoke(Deal $deal, Request $request) ] ); $agent = $deal->agent; + if (!$deal->bitrixId) + { + $deal->bitrixId()->create(['bx_id' => $request->deal_id]); + } + $agent->user->notify(new ContractUpdated($deal->contract)); return true; } diff --git a/app/Models/Agent/Agent.php b/app/Models/Agent/Agent.php index fd9d9f3..6fc30b9 100644 --- a/app/Models/Agent/Agent.php +++ b/app/Models/Agent/Agent.php @@ -14,14 +14,16 @@ use App\Models\Deal\Deal; use App\Notifications\AgentCreated; - use Modules\Payment\Traits\Paymentable; +use Modules\Bitrix\Traits\Bitrixable; class Agent extends Model { use HasFactory; use SoftDeletes; use Paymentable; + use Bitrixable; + public const STATUS_ACTIVE = "ACTIVE"; public const STATUS_DISMISSED = "DISMISSED"; protected $fillable = [ diff --git a/app/Models/Deal/Deal.php b/app/Models/Deal/Deal.php index ea690c4..c796c39 100644 --- a/app/Models/Deal/Deal.php +++ b/app/Models/Deal/Deal.php @@ -9,10 +9,11 @@ use App\Models\User\Role; use Modules\Contracts\Models\Contract; use Illuminate\Notifications\Notifiable; +use Modules\Bitrix\Traits\Bitrixable; class Deal extends Model { - use HasFactory, Notifiable; + use HasFactory, Notifiable, Bitrixable; protected $fillable = [ 'client_id', 'complex_id', diff --git a/app/Modules/Admin/Http/Controllers/AdminBitrixController.php b/app/Modules/Admin/Http/Controllers/AdminBitrixController.php new file mode 100644 index 0000000..947dd04 --- /dev/null +++ b/app/Modules/Admin/Http/Controllers/AdminBitrixController.php @@ -0,0 +1,69 @@ + Agent::all() + ]); + } + public function setAgentId(Request $request, Agent $agent) + { + $agent->setBitrixId($request->id); + return back()->withSuccess('ID агента обновлен'); + } + public function syncDeals(Agent $agent) + { + $url = 'https://b24alfa.pro/channels/lk/getDealsOfContact?id=' . $agent->bitrixId(); + $data = file_get_contents($url); + $deals = json_decode($data, true); + foreach ($deals as $deal) + { + $client = false; + //Загрузка контактов + if ($deal['contacts'][0]['phone']) + { + $client = User::createOrFirst( + ['phone' => $deal['contacts'][0]['phone']], + [ + 'name' => $deal['contacts'][0]['name'], + 'phone' => $deal['contacts'][0]['phone'] + ] + ); + } + //Загрузка сделок + if (BitrixId::where('bx_id', $deal['deal']['deal_id'])->count() == 0) + { + $dealItem = Deal::create([ + 'client_id' => $client->id, + 'complex_id' => 1, + 'agent_id' => $agent->id, + 'status' => DealStatus::UNIQUE, + ]); + $dealItem->setBitrixId($deal['deal']['deal_id']); + } + } + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index 86c1f1c..1532b76 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -55,4 +55,10 @@ Route::get('/admin/docs/{document}/edit', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'edit'])->name('admin.docs.edit'); Route::post('/admin/docs/{document}/update', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'update'])->name('admin.docs.update'); Route::post('/admin/docs/{document}/delete', [Modules\Admin\Http\Controllers\AdminDocsController::class, 'delete'])->name('admin.docs.delete'); + + Route::get('/admin/bitrix', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'index'])->name('admin.bitrix'); + Route::get('/admin/bitrix/agents', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'agents'])->name('admin.bitrix.agents'); + 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'); + }); \ No newline at end of file diff --git a/app/Modules/Admin/Views/bitrix/agents.blade.php b/app/Modules/Admin/Views/bitrix/agents.blade.php new file mode 100644 index 0000000..50281c3 --- /dev/null +++ b/app/Modules/Admin/Views/bitrix/agents.blade.php @@ -0,0 +1,38 @@ +@php($title = 'Битрикс24: агенты') +@extends('layouts.admin') +@section('content') +
| Имя | +Агентство | +Телефон | +Эл. почта | +ID | ++ |
|---|---|---|---|---|---|
| {{ $agent->user->name }} + | {{ $agent->company->name }} + | {{ $agent->user->phone }} + | {{ $agent->user->email }} + | + + | ++ Sync + | +
Установить идентификаторы агентов для автоматической синхронизации информации по сделкам +
+ Перейти +|
|
{{ $agent->user->name }}
+ @if (env('APP_DEBUG'))
+ Bitrix ID: {{ $agent->bitrixId() }}
+ @endif
|
{{ $agent->user->phone }} |