Your IP : 18.221.21.145
<?php
namespace Bitrix\SalesCenter;
use Bitrix\Landing\Internals\LandingTable;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\ORM\Query\Query;
use Bitrix\SalesCenter\Fields\Manager;
use Bitrix\SalesCenter\Integration\Bitrix24Manager;
use Bitrix\SalesCenter\Integration\CrmManager;
use Bitrix\SalesCenter\Integration\ImManager;
use Bitrix\SalesCenter\Integration\IntranetManager;
use Bitrix\SalesCenter\Integration\LandingManager;
use Bitrix\SalesCenter\Integration\SaleManager;
use Bitrix\SalesCenter\Model\PageTable;
final class Driver
{
const MODULE_ID = 'salescenter';
protected static $instance;
protected $fieldsManager;
private function __construct()
{
$this->fieldsManager = new Manager();
}
public static function getInstance(): Driver
{
if(static::$instance === null)
{
static::$instance = new static();
}
return static::$instance;
}
public function getUserId(): int
{
global $USER;
if(is_object($USER))
{
return (int) CurrentUser::get()->getId();
}
return 0;
}
public function getManagerParams(): array
{
$params = [];
if(LandingManager::getInstance()->isEnabled())
{
LandingManager::getInstance()->tryInstallDefaultSiteOnce();
$params['siteTemplateCode'] = LandingManager::SITE_TEMPLATE_CODE;
$params['connectedSiteId'] = LandingManager::getInstance()->getConnectedSiteId();
$params['isSitePublished'] = LandingManager::getInstance()->isSitePublished();
$params['isSiteExists'] = LandingManager::getInstance()->isSiteExists();
$params['isOrderPublicUrlAvailable'] = LandingManager::getInstance()->isOrderPublicUrlAvailable();
$params['orderPublicUrl'] = LandingManager::getInstance()->getOrderPublicUrlInfo()['url'];
}
$params['isSalesInChatActive'] = $this->isSalesInChatActive();
$params['connectPath'] = $this->getConnectPath();
return $params;
}
public function addTopPanel(\CBitrixComponentTemplate $template)
{
$template->setViewTarget('above_pagetitle');
$menuId = static::MODULE_ID;
global $APPLICATION;
$APPLICATION->IncludeComponent(
'bitrix:main.interface.buttons',
'',
array(
'ID' => $menuId,
'ITEMS' => $this->getTopPanelItems(),
)
);
$template->endViewTarget();
}
public function getTopPanelItems(): array
{
$items = [
[
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_PANEL'),
'URL' => '/saleshub/',
'URL_CONSTANT' => true,
'SORT' => 10,
]
];
$dealsLink = CrmManager::getInstance()->getDealsLink();
if($dealsLink)
{
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_DEAL'),
'URL' => $dealsLink,
'URL_CONSTANT' => true,
'SORT' => 20,
'ON_CLICK' => 'BX.Salescenter.Manager.openSlider(\''.$dealsLink.'\');',
];
}
$ordersList = '/shop/orders/list/';
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_ORDER'),
'URL' => $ordersList,
'URL_CONSTANT' => true,
'SORT' => 30,
'ON_CLICK' => 'BX.Salescenter.Manager.openSlider(\''.$ordersList.'\');',
];
$contactsLink = CrmManager::getInstance()->getContactsLink();
if($contactsLink)
{
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_CONTACT'),
'URL' => $contactsLink,
'URL_CONSTANT' => true,
'SORT' => 40,
'ON_CLICK' => 'BX.Salescenter.Manager.openSlider(\''.$contactsLink.'\');',
];
}
$pages = CrmManager::getInstance()->getSaleAdminPages();
if(empty($pages))
{
return $items;
}
if(isset($pages['catalog']))
{
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_CATALOG'),
'URL' => $pages['catalog'],
'URL_CONSTANT' => true,
'SORT' => 50,
'ON_CLICK' => 'window.open(\''.$pages['catalog'].'\', \'_blank\');',
];
}
$cashboxCheckUrl = $pages['sale_cashbox_check'];
$cashboxIsSlider = false;
$cashboxPath = \CComponentEngine::makeComponentPath('bitrix:salescenter.cashbox');
$cashboxPath = getLocalPath('components'.$cashboxPath.'/slider.php');
if($cashboxPath)
{
$cashboxCheckUrl = $cashboxPath.'?show_checks=y';
$cashboxIsSlider = true;
}
if($cashboxIsSlider)
{
$cashboxOnClick = 'BX.Salescenter.Manager.openSlider(\''.$cashboxCheckUrl.'\');';
}
else
{
$cashboxOnClick = 'window.open(\''.$cashboxCheckUrl.'\', \'_blank\');';
}
if(SaleManager::getInstance()->isFullAccess() && $this->isCashboxEnabled())
{
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_CHECK'),
'URL' => $cashboxCheckUrl,
'URL_CONSTANT' => true,
'SORT' => 60,
'ON_CLICK' => $cashboxOnClick,
];
}
$taxesItems = [
[
'ID' => 'cat_vat_admin',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_TAXES_VAT_RATES'),
'PARENT_ID' => 'taxes',
'SORT' => 90,
'ON_CLICK' => 'window.open(\''.$pages['cat_vat_admin'].'\', \'_blank\');',
],
];
if($this->isExtendedTaxesSettingsEnabled())
{
$taxesItems = array_merge($taxesItems, [
[
'ID' => 'sale_tax',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_TAXES_LIST'),
'PARENT_ID' => 'taxes',
'SORT' => 100,
'ON_CLICK' => 'window.open(\''.$pages['sale_tax'].'\', \'_blank\');',
],
[
'ID' => 'sale_tax_rate',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_TAXES_RATES'),
'PARENT_ID' => 'taxes',
'SORT' => 110,
'ON_CLICK' => 'window.open(\''.$pages['sale_tax_rate'].'\', \'_blank\');',
],
[
'ID' => 'sale_tax_exempt',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_TAXES_EXEMPT'),
'PARENT_ID' => 'taxes',
'SORT' => 120,
'ON_CLICK' => 'window.open(\''.$pages['sale_tax_exempt'].'\', \'_blank\');',
],
]);
}
$items[] = [
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_SETTINGS'),
'ID' => 'settings',
'PARENT_ID' => '',
'SORT' => 70,
'ITEMS' => [
[
'ID' => 'taxes',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_TAXES'),
'PARENT_ID' => 'settings',
'SORT' => 80,
'ITEMS' => $taxesItems,
],
[
'ID' => 'prices',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_PRICES'),
'PARENT_ID' => 'settings',
'SORT' => 130,
'ITEMS' => [
[
'ID' => 'cat_group_admin',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_PRICES_TYPE'),
'PARENT_ID' => 'prices',
'SORT' => 140,
'ON_CLICK' => 'window.open(\''.$pages['cat_group_admin'].'\', \'_blank\');',
],
[
'ID' => 'cat_round_list',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_PRICES_ROUND'),
'PARENT_ID' => 'prices',
'SORT' => 150,
'ON_CLICK' => 'window.open(\''.$pages['cat_round_list'].'\', \'_blank\');',
],
[
'ID' => 'cat_extra',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_PRICES_EXTRA'),
'PARENT_ID' => 'prices',
'SORT' => 160,
'ON_CLICK' => 'window.open(\''.$pages['cat_extra'].'\', \'_blank\');',
],
],
],
[
'ID' => 'cat_measure_list',
'TEXT' => Loc::getMessage('SALESCENTER_DRIVER_TOP_PANEL_MEASURE_RATES'),
'PARENT_ID' => 'settings',
'SORT' => 170,
'ON_CLICK' => 'window.open(\''.$pages['cat_measure_list'].'\', \'_blank\');',
],
],
];
return $items;
}
public function getFilterForCustomUrlPages(): array
{
return [
'=HIDDEN' => 'N',
'=LANDING_ID' => null,
];
}
/**
* @return \Bitrix\Main\ORM\Query\Filter\ConditionTree|array
*/
public function getFilterForAnotherSitePages()
{
if(LandingManager::getInstance()->isEnabled())
{
return Query::filter()
->addCondition(Query::filter()
->where('HIDDEN', '=', 'N')
)
->addCondition(Query::filter()
->logic('or')
->whereNull('LANDING_ID')
->whereIn('LANDING_ID',
LandingTable::query()
->addSelect('ID')
->whereNot('SITE_ID', LandingManager::getInstance()->getConnectedSiteId())
->whereNot('DELETED', 'Y')
->whereNot('SITE.DELETED', 'Y'))
);
}
return ['=ID' => 0];
}
public function isSalesInChatActive(): bool
{
if(LandingManager::getInstance()->isEnabled())
{
if(LandingManager::getInstance()->isSiteExists())
{
return true;
}
else
{
$filter = $this->getFilterForAnotherSitePages();
}
}
else
{
$filter = $this->getFilterForCustomUrlPages();
}
return (PageTable::getCount($filter) > 0);
}
public static function onGetDependentModule(): array
{
return [
'MODULE_ID' => static::MODULE_ID,
'USE' => ['PUBLIC_SECTION'],
];
}
public function isExtendedTaxesSettingsEnabled(): bool
{
if(Bitrix24Manager::getInstance()->isEnabled())
{
return Bitrix24Manager::getInstance()->isCurrentZone(['ru', 'ua', 'by', 'kz']);
}
return true;
}
public function isCashboxEnabled(): bool
{
if (Bitrix24Manager::getInstance()->isEnabled())
{
return Bitrix24Manager::getInstance()->isCurrentZone('ru');
}
elseif (IntranetManager::getInstance()->isEnabled())
{
return IntranetManager::getInstance()->isCurrentZone('ru');
}
return true;
}
/**
* @return false|string
*/
public function getConnectPath()
{
$connectPath = \CComponentEngine::makeComponentPath('bitrix:salescenter.connect');
return getLocalPath('components'.$connectPath.'/slider.php');
}
public function isEnabled(): bool
{
if(Bitrix24Manager::getInstance()->isEnabled())
{
return Bitrix24Manager::getInstance()->isSalescenterFeatureEnabled();
}
return true;
}
public function getFieldsManager(): Fields\Manager
{
return $this->fieldsManager;
}
public static function installImApplicationAgent(): string
{
if(!static::getInstance()->isEnabled())
{
return '';
}
if(!ImManager::getInstance()->isEnabled())
{
return '';
}
global $DB;
if(!$DB->TableExists(\Bitrix\Im\Model\AppTable::getTableName()))
{
return '';
}
if(!ImManager::getInstance()->isApplicationInstalled())
{
return '\\Bitrix\\SalesCenter\\Driver::installImApplicationAgent();';
}
return '';
}
}