File: /var/www/quadcode/app/Services/BitrixService.php
<?php
namespace App\Services;
use App\Helpers\BitrixHelper;
use App\Models\BitrixStatuses;
use Exception;
class BitrixService extends AbstractService
{
private BitrixHelper $bitrixHelper;
public function __construct(BitrixHelper $bitrixHelper)
{
$this->bitrixHelper = $bitrixHelper;
}
public function check(): bool
{
return $this->bitrixHelper->check();
}
private function getAllStatuses(): array
{
$statuses = [];
$filter = ['ENTITY_ID' => 'STATUS'];
$leadStatuses = $this->bitrixHelper->statusesList($filter);
foreach ($leadStatuses as $status) {
$statuses[$status['ID']] = $status;
}
$filter = ['ENTITY_ID' => 'DEAL_STAGE'];
$dealStatuses = $this->bitrixHelper->statusesList($filter);
foreach ($dealStatuses as $status) {
$statuses[$status['ID']] = $status;
}
return $statuses;
}
public function syncStatuses(): bool
{
$this->cleanState();
try {
$this->addActionLog('Get all statuses');
$statuses = $this->getAllStatuses();
} catch (Exception $exception) {
$this->lastError = $exception->getMessage();
return false;
}
$this->addActionLog('All statuses count: ' . count($statuses));
$created = 0;
$updated = 0;
$createdStatuses = BitrixStatuses::query()->get()->keyBy('bitrix_id');
foreach ($statuses as $id => $status) {
if (in_array($id, $createdStatuses->keys()->toArray())) {
/** @var BitrixStatuses $createdStatus */
$createdStatus = $createdStatuses[$id];
if ($status['NAME'] === $createdStatus->name) {
continue;
}
$createdStatus->name = $status['NAME'];
$createdStatus->save();
$updated++;
} else {
$newBitrixStatus = new BitrixStatuses([
'bitrix_id' => $id,
'entity_id' => $status['ENTITY_ID'],
'status_id' => $status['STATUS_ID'],
'name' => $status['NAME'],
]);
$newBitrixStatus->save();
$created++;
}
}
$this->addActionLog('Created: ' . $created);
$this->addActionLog('Updated: ' . $updated);
return true;
}
}