File: /var/www/quadcode/app/Console/Commands/SyncBitrixToActiveCampaign.php
<?php
namespace App\Console\Commands;
use App\Helpers\ActiveCampaignHelper;
use App\Helpers\BitrixHelper;
use App\Models\BitrixAcSyncSetting;
use App\Models\BitrixStatuses;
use Symfony\Component\Console\Command\Command as CommandAlias;
class SyncBitrixToActiveCampaign extends AbstractSyncBitrixAndActiveCampaign
{
protected $signature = 'bitrix:sync-to-active-campaign {--e|echo}';
protected $description = 'Sync Bitrix leads and deals to Active Campaign';
public function handle(BitrixHelper $bitrixHelper, ActiveCampaignHelper $activeCampaignHelper): int
{
$this->info($this->description);
$this->isVerbose = (bool) $this->option('echo');
$this->activeCampaignHelper = $activeCampaignHelper;
$this->bitrixHelper = $bitrixHelper;
if (!$bitrixHelper->check()) {
$this->error('Need to fill BITRIX24_HOST, BITRIX24_USER_ID and BITRIX24_TOKEN in .env');
return CommandAlias::FAILURE;
}
if (!$activeCampaignHelper->check()) {
$this->error('Need to fill ACTIVE_CAMPAIGN_HOST and ACTIVE_CAMPAIGN_TOKEN in .env');
return CommandAlias::FAILURE;
}
$bitrixStatuses = BitrixStatuses::all()->toArray();
$bitrixStatusesDict = [];
foreach ($bitrixStatuses as $bitrixStatus) {
$bitrixStatusesDict[$bitrixStatus['status_id']] = $bitrixStatus['name'];
}
/** @var BitrixAcSyncSetting[] $bitrixAcSyncSettings */
$bitrixAcSyncSettings = BitrixAcSyncSetting::query()->get();
foreach ($bitrixAcSyncSettings as $bitrixAcSyncSetting) {
$this->report = [
'contacts_found' => 0,
'unique_contacts_found' => 0,
'subscribed' => 0,
'unsubscribed' => 0,
];
$msg = 'Sync «' . $bitrixStatusesDict[$bitrixAcSyncSetting->bitrix_status] . '»';
$msg .= ' to ' . $bitrixAcSyncSetting->active_campaign_list_id;
if ($bitrixAcSyncSetting->with_unsubscribe) {
$msg .= ' with unsubscribe deleted';
}
$this->info($msg);
match ($bitrixAcSyncSetting->entity_id) {
BitrixHelper::ENTITY_ID_STATUS => $this->syncLeadsToActiveCampaign($bitrixAcSyncSetting->active_campaign_list_id, $bitrixAcSyncSetting->bitrix_status, $bitrixAcSyncSetting->with_unsubscribe),
BitrixHelper::ENTITY_ID_DEAL_STAGE => $this->syncDealsToActiveCampaign($bitrixAcSyncSetting->active_campaign_list_id, $bitrixAcSyncSetting->bitrix_status, $bitrixAcSyncSetting->with_unsubscribe),
};
$this->line('');
$bitrixAcSyncSetting->last_sync_at = date('Y-m-d H:i:s');
$bitrixAcSyncSetting->last_updated_count = $this->report['subscribed'];
$bitrixAcSyncSetting->save();
}
return CommandAlias::SUCCESS;
}
}