import from bitrix created
This commit is contained in:
parent
c5f369e2a5
commit
28a8933fb9
@ -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'),
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 = [
|
||||
|
||||
@ -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',
|
||||
|
||||
69
app/Modules/Admin/Http/Controllers/AdminBitrixController.php
Normal file
69
app/Modules/Admin/Http/Controllers/AdminBitrixController.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Admin\Http\Controllers;
|
||||
|
||||
use Modules\Docs\Models\Document;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Models\Agent\Agent;
|
||||
use App\Models\Deal\Deal;
|
||||
use App\Models\Deal\DealStatus;
|
||||
use Modules\Bitrix\Models\BitrixId;
|
||||
use App\Models\User;
|
||||
//use App\Models\User\UserRole;
|
||||
//use App\Models\User\Role;
|
||||
|
||||
class AdminBitrixController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('admin::bitrix.index', [
|
||||
|
||||
]);
|
||||
}
|
||||
public function agents()
|
||||
{
|
||||
return view('admin::bitrix.agents', [
|
||||
'agents' => 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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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');
|
||||
|
||||
});
|
||||
38
app/Modules/Admin/Views/bitrix/agents.blade.php
Normal file
38
app/Modules/Admin/Views/bitrix/agents.blade.php
Normal file
@ -0,0 +1,38 @@
|
||||
@php($title = 'Битрикс24: агенты')
|
||||
@extends('layouts.admin')
|
||||
@section('content')
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Имя</th>
|
||||
<th scope="col">Агентство</th>
|
||||
<th scope="col">Телефон</th>
|
||||
<th scope="col">Эл. почта</th>
|
||||
<th scope="col">ID</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($agents as $agent)
|
||||
<tr>
|
||||
<td>{{ $agent->user->name }}
|
||||
<td>{{ $agent->company->name }}
|
||||
<td>{{ $agent->user->phone }}
|
||||
<td>{{ $agent->user->email }}
|
||||
<td>
|
||||
<form method="post" action="{{ route('admin.bitrix.agent.set', ['agent' => $agent->id]) }}"
|
||||
class="input-group mb-3">
|
||||
@csrf
|
||||
<input type="text" name="id" class="form-control" placeholder="ID из Битрикс24"
|
||||
aria-label="" aria-describedby="button-addon2" value="{{ $agent->bitrixId() }}">
|
||||
<button class="btn btn-outline-secondary" type="submit" id="button-addon2">Сохранить</button>
|
||||
</form>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ route('admin.bitrix.agent.deals.sync', ['agent' => $agent->id]) }}">Sync</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endsection
|
||||
15
app/Modules/Admin/Views/bitrix/index.blade.php
Normal file
15
app/Modules/Admin/Views/bitrix/index.blade.php
Normal file
@ -0,0 +1,15 @@
|
||||
@php($title = 'Битрикс24')
|
||||
@extends('layouts.admin')
|
||||
@section('content')
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Агенты
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Управление агентами</h5>
|
||||
<p class="card-text">Установить идентификаторы агентов для автоматической синхронизации информации по сделкам
|
||||
</p>
|
||||
<a href="{{ route('admin.bitrix.agents') }}" class="btn btn-primary">Перейти</a>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@ -38,6 +38,12 @@ class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4"
|
||||
<li class="nav-item text-center m-2"><a
|
||||
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4"
|
||||
href="{{ route('admin.docs') }}">Документы</a></li>
|
||||
<li>
|
||||
<h6 class="dropdown-header text-uppercase">Интеграции</h6>
|
||||
</li>
|
||||
<li class="nav-item text-center m-2"><a
|
||||
class="nav-link d-flex align-items-center gap-2 fs-5 border rounded-4"
|
||||
href="{{ route('admin.bitrix') }}">Битрикс24</a></li>
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
5
app/Modules/Bitrix/Config/config.php
Normal file
5
app/Modules/Bitrix/Config/config.php
Normal file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
];
|
||||
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('bx_ids', function (Blueprint $table)
|
||||
{
|
||||
$table->id();
|
||||
$table->morphs('bitrixable');
|
||||
$table->integer('bx_id')->nullable();
|
||||
$table->text('data')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('bx_ids');
|
||||
}
|
||||
};
|
||||
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Http\Controllers;
|
||||
|
||||
use Modules\Bitrix\Models\Bitrix;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AdminBitrixController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('bitrix::index');
|
||||
}
|
||||
}
|
||||
17
app/Modules/Bitrix/Http/Controllers/BitrixController.php
Normal file
17
app/Modules/Bitrix/Http/Controllers/BitrixController.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Http\Controllers;
|
||||
|
||||
use Modules\Bitrix\Models\Bitrix;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BitrixController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('bitrix::index');
|
||||
}
|
||||
}
|
||||
22
app/Modules/Bitrix/Models/BitrixId.php
Normal file
22
app/Modules/Bitrix/Models/BitrixId.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
|
||||
|
||||
class BitrixId extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'bx_ids';
|
||||
protected $fillable = [
|
||||
'bx_id'
|
||||
];
|
||||
public function bitrixable(): MorphTo
|
||||
{
|
||||
return $this->morphTo();
|
||||
}
|
||||
}
|
||||
68
app/Modules/Bitrix/Providers/ModuleServiceProvider.php
Normal file
68
app/Modules/Bitrix/Providers/ModuleServiceProvider.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Illuminate\Support\Facades\Blade;
|
||||
use Livewire\Livewire;
|
||||
|
||||
class ModuleServiceProvider extends ServiceProvider
|
||||
{
|
||||
protected String $moduleName = 'Bitrix';
|
||||
|
||||
public function register()
|
||||
{
|
||||
$this->app->register(RouteServiceProvider::class);
|
||||
}
|
||||
|
||||
public function boot()
|
||||
{
|
||||
$this->registerViews();
|
||||
$this->registerLivewireViews();
|
||||
$this->registerMigrations();
|
||||
$this->registerConfig();
|
||||
$this->registerComponent();
|
||||
$this->registerLivewire();
|
||||
}
|
||||
|
||||
protected function registerViews()
|
||||
{
|
||||
$moduleViewsPath = __DIR__.'/../Views';
|
||||
$this->loadViewsFrom(
|
||||
$moduleViewsPath, strtolower($this->moduleName)
|
||||
);
|
||||
}
|
||||
|
||||
protected function registerLivewireViews()
|
||||
{
|
||||
$moduleViewsPath = __DIR__.'/../Views/livewire';
|
||||
$this->loadViewsFrom(
|
||||
$moduleViewsPath, strtolower($this->moduleName)
|
||||
);
|
||||
}
|
||||
|
||||
protected function registerMigrations()
|
||||
{
|
||||
$this->loadMigrationsFrom(
|
||||
app_path('Modules/'.$this->moduleName.'/Database/Migrations')
|
||||
);
|
||||
}
|
||||
|
||||
protected function registerConfig()
|
||||
{
|
||||
$path = app_path('Modules/'.$this->moduleName.'/Config/config.php');
|
||||
$this->mergeConfigFrom(
|
||||
$path, strtolower($this->moduleName)
|
||||
);
|
||||
}
|
||||
|
||||
protected function registerLivewire()
|
||||
{
|
||||
//Livewire::component('<name>', \Modules\<NAME>\Http\Livewire\<NAME>::class);
|
||||
}
|
||||
|
||||
protected function registerComponent()
|
||||
{
|
||||
//Blade::component('<name>', \Modules\<NAME>\Http\Components\<NAME>::class);
|
||||
}
|
||||
}
|
||||
24
app/Modules/Bitrix/Providers/RouteServiceProvider.php
Normal file
24
app/Modules/Bitrix/Providers/RouteServiceProvider.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
|
||||
public function map()
|
||||
{
|
||||
$this->registerWebRoutes();
|
||||
}
|
||||
|
||||
protected function registerWebRoutes()
|
||||
{
|
||||
//Add Web Routes with web Guard
|
||||
Route::middleware('web')
|
||||
//Set Default Controllers Namespace
|
||||
->namespace('Modules\\Bitrix\\Http\\Controllers')
|
||||
->group(app_path('Modules/Bitrix/Routes/web.php'));
|
||||
}
|
||||
}
|
||||
13
app/Modules/Bitrix/Routes/web.php
Normal file
13
app/Modules/Bitrix/Routes/web.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Modules\Bitrix\Http\Controllers\BitrixController;
|
||||
|
||||
Route::middleware(['auth'])->group(function() {
|
||||
|
||||
Route::get('/bitrix', [BitrixController::class, 'index']);
|
||||
|
||||
Route::middleware(['hasAccess'])->group(function() {
|
||||
/** Routes that need to be protected - Маршруты которые нужно защитить */
|
||||
});
|
||||
});
|
||||
37
app/Modules/Bitrix/Traits/Bitrixable.php
Normal file
37
app/Modules/Bitrix/Traits/Bitrixable.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Bitrix\Traits;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Modules\Bitrix\Models\BitrixId;
|
||||
|
||||
|
||||
trait Bitrixable
|
||||
{
|
||||
private function bitrixable(): MorphOne
|
||||
{
|
||||
return $this->morphOne(BitrixId::class, 'bitrixable');
|
||||
}
|
||||
public function bitrixId()
|
||||
{
|
||||
if ($row = $this->bitrixable()->first())
|
||||
{
|
||||
return $row->bx_id;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function setBitrixId($id): bool
|
||||
{
|
||||
$this->bitrixable()->delete();
|
||||
$bitrixId = new BitrixId([
|
||||
'bx_id' => $id
|
||||
]);
|
||||
if ($this->bitrixable()->save($bitrixId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
4
app/Modules/Bitrix/Views/index.blade.php
Normal file
4
app/Modules/Bitrix/Views/index.blade.php
Normal file
@ -0,0 +1,4 @@
|
||||
@extends('layouts.app')
|
||||
@section('content')
|
||||
<h1> Example views </h1>
|
||||
@endsection
|
||||
@ -2,13 +2,16 @@
|
||||
<div class="fs-5 bg-light p-0 m-0 border border-1 rounded-4 overflow-hidden">
|
||||
<table class="table m-0">
|
||||
<tbody class="">
|
||||
@foreach ($agents as $agent)
|
||||
@foreach ($agents as $num => $agent)
|
||||
<tr>
|
||||
<td>
|
||||
<img src="../../images/icons/user.png" class="img-fluid align-middle" style="height: 50px;">
|
||||
</td>
|
||||
<td class="fw-semibold fs-5 align-middle">
|
||||
{{ $agent->user->name }}
|
||||
@if (env('APP_DEBUG'))
|
||||
<div class="text-secondary fs-6 fw-light">Bitrix ID: {{ $agent->bitrixId() }} </div>
|
||||
@endif
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
{{ $agent->user->phone }}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user