lk.zachem.info/app/Modules/Bitrix/Models/BitrixId.php

116 lines
4.0 KiB
PHP

<?php
namespace Modules\Bitrix\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Modules\Main\Models\Deal\Deal;
use Modules\Main\Models\Deal\Client;
use Modules\Main\Models\Deal\DealClients;
use Modules\Main\Models\Agent\Agent;
use Modules\Main\Models\Company\Company;
use Modules\Main\Models\Complex;
class BitrixId extends Model
{
use HasFactory;
protected $table = 'bx_ids';
protected $fillable = [
'bx_id'
];
public function bitrixable(): MorphTo
{
return $this->morphTo();
}
protected static function booted()
{
static::creating(function (BitrixId $bitrixId)
{
if ($bitrixId->bx_id)
{
return;
}
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;
}
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;
};
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;
};
break;
}
throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id);
});
static::created(function (BitrixId $bitrixId)
{
if (!$bitrixId->bx_id)
{
return;
}
switch ( $bitrixId->bitrixable_type )
{
case Deal::class:
$deal = Deal::findOrFail($bitrixId->bitrixable_id);
$agentAppender = new SendDealAgent($deal);
$agentAppender->send();
break;
case Client::class:
$client = Client::findOrFail($bitrixId->bitrixable_id);
if ($dealClient = DealClients::where('client_id', $client->id)->orderByDesc('id')->first())
{
$clientAppender = new SendDealClient(Deal::find($dealClient->deal_id), $client);
$result = $clientAppender->send();
}
break;
}
});
}
}