use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Application;
use Bitrix\Main\Page;
use Bitrix\Main\Config;
use Bitrix\Sale\Cashbox;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
$selfFolderUrl = $adminPage->getSelfFolderUrl();
$listUrl = $selfFolderUrl."sale_cashbox_list.php?lang=" . $lang;
$listUrl = $adminSidePanelHelper->editUrlToPublicPage($listUrl);
$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
if ($saleModulePermissions < "W")
$APPLICATION->AuthForm(GetMessage("SALE_ACCESS_DENIED"));
Loc::loadMessages(__FILE__);
\Bitrix\Main\Loader::includeModule('sale');
\Bitrix\Main\Loader::includeModule('ui');
\Bitrix\Main\UI\Extension::load('ui.buttons.icons');
\Bitrix\Main\UI\Extension::load('ui.forms');
$instance = Application::getInstance();
$context = $instance->getContext();
$request = $context->getRequest();
$server = $context->getServer();
$lang = $context->getLanguage();
$documentRoot = Application::getDocumentRoot();
$isCloud = Loader::includeModule("bitrix24");
$zone = '';
if (!$isCloud && Loader::includeModule('intranet'))
{
$zone = \CIntranetUtils::getPortalZone();
}
\Bitrix\Sale\Cashbox\Cashbox::init();
$id = (int)$request->get('ID');
$cashboxObject = null;
$cashbox = [
'ID' => null,
'NAME' => null,
'HANDLER' => '',
'OFD' => null,
'EMAIL' => null,
'NUMBER_KKM' => null,
'KKM_ID' => null,
'ACTIVE' => null,
'USE_OFFLINE' => null,
'SORT' => null,
'OFD_SETTINGS' => null,
];
$errorMessage = '';
if ($server->getRequestMethod() == "POST"
&& ($request->get('save') !== null || $request->get('apply') !== null)
&& $saleModulePermissions == "W"
&& check_bitrix_sessid()
)
{
$adminSidePanelHelper->decodeUriComponent($request);
$cashbox = array(
'NAME' => $request->get('NAME'),
'HANDLER' => $request->getPost('HANDLER'),
'OFD' => $request->getPost('OFD'),
'EMAIL' => $request->getPost('EMAIL'),
'NUMBER_KKM' => $request->getPost('NUMBER_KKM') ?: '',
'KKM_ID' => $request->get('KKM_ID') ?: '',
'ACTIVE' => ($request->get('ACTIVE') == 'Y') ? 'Y' : 'N',
'USE_OFFLINE' => ($request->get('USE_OFFLINE') == 'Y') ? 'Y' : 'N',
'SORT' => $request->getPost('SORT') ?: 100,
'OFD_SETTINGS' => $request->getPost('OFD_SETTINGS') ?: array(),
);
/** @var Cashbox\Cashbox $handler */
$handler = $cashbox['HANDLER'];
if (empty($handler))
{
$errorMessage .= GetMessage('ERROR_NO_HANDLER')."
\n";
}
else
{
$handlerList = Cashbox\Cashbox::getHandlerList();
if (!isset($handlerList[$cashbox['HANDLER']]))
{
$errorMessage .= GetMessage('ERROR_NO_HANDLER_EXIST')."
\n";
}
}
if ($errorMessage)
{
$adminSidePanelHelper->sendJsonErrorResponse($errorMessage);
}
if (class_exists($handler))
{
$cashbox['SETTINGS'] = $handler::extractSettingsFromRequest($request);
}
$cashboxObject = Cashbox\Cashbox::create($cashbox);
$result = $cashboxObject->validate();
if (!$result->isSuccess())
{
foreach ($result->getErrors() as $error)
{
$errorMessage .= $error->getMessage()."
\n";
}
}
if ($errorMessage === '')
{
if ($id > 0)
{
$result = Cashbox\Manager::update($id, $cashbox);
if ($result->isSuccess())
{
$service = Cashbox\Manager::getObjectById($id);
AddEventToStatFile('sale', 'updateCashbox', $id, $service::getCode());
}
}
else
{
$cashbox['ENABLED'] = 'Y';
$result = Cashbox\Manager::add($cashbox);
$id = $result->getId();
if ($result->isSuccess())
{
$service = Cashbox\Manager::getObjectById($id);
AddEventToStatFile('sale', 'addCashbox', $id, $service::getCode());
}
}
if ($result->isSuccess())
{
if ($adminSidePanelHelper->isAjaxRequest())
{
$adminSidePanelHelper->sendSuccessResponse("base", array("ID" => $id));
}
else
{
if ($request->getPost("apply") == '')
{
$adminSidePanelHelper->localRedirect($listUrl);
LocalRedirect($listUrl);
}
else
{
$applyUrl = $selfFolderUrl."sale_cashbox_edit.php?lang=".$lang."&ID=".$id;
$applyUrl = $adminSidePanelHelper->setDefaultQueryParams($applyUrl);
LocalRedirect($applyUrl);
}
}
}
else
{
$errorMessage .= implode("\n", $result->getErrorMessages());
}
}
else
{
$adminSidePanelHelper->sendJsonErrorResponse($errorMessage);
}
}
elseif ($id > 0)
{
$cashboxObject = Cashbox\Manager::getObjectById($id);
}
require($documentRoot."/bitrix/modules/main/include/prolog_admin_after.php");
Page\Asset::getInstance()->addJs("/bitrix/js/sale/cashbox.js");
$APPLICATION->SetTitle(($id > 0) ? Loc::getMessage("SALE_CASHBOX_EDIT_RECORD", array("#ID#" => $id)) : Loc::getMessage("SALE_CASHBOX_NEW_RECORD"));
$aTabs = array(
array(
"DIV" => "edit1",
"TAB" => GetMessage("SALE_TAB_CASHBOX"),
"ICON" => "sale",
"TITLE" => GetMessage("SALE_TAB_CASHBOX_DESCR"),
)
);
if ($id > 0 && !$request->isPost())
{
$res = \Bitrix\Sale\Cashbox\Internals\CashboxTable::getList(array('filter' => array('ID' => $id)));
$cashbox = $res->fetch();
}
$requireFields = array();
if (class_exists($cashbox['HANDLER']))
{
$requireFields = $cashbox['HANDLER']::getGeneralRequiredFields();
}
$isCashboxPaySystem = ($cashboxObject && Cashbox\Manager::isPaySystemCashbox($cashboxObject->getField('HANDLER')));
if ($id > 0 && $cashboxObject && !$isCashboxPaySystem)
{
$aTabs[] = array(
"DIV" => "edit2",
"TAB" => GetMessage("SALE_CASHBOX_RESTRICTION"),
"ICON" => "sale",
"TITLE" => GetMessage("SALE_CASHBOX_RESTRICTION_DESC"),
);
}
$aTabs[] = array(
"DIV" => "edit3",
"TAB" => GetMessage("SALE_CASHBOX_TAB_TITLE_SETTINGS"),
"ICON" => "sale",
"TITLE" => GetMessage("SALE_CASHBOX_TAB_TITLE_SETTINGS_DESC"),
);
$aTabs[] = array(
"DIV" => "edit4",
"TAB" => GetMessage("SALE_CASHBOX_TAB_TITLE_OFD_SETTINGS"),
"ICON" => "sale",
"TITLE" => GetMessage("SALE_CASHBOX_TAB_TITLE_OFD_SETTINGS_DESC"),
);
$tabControl = new CAdminForm("tabControl", $aTabs);
$restrictionsHtml = '';
if ($id > 0 && !$isCashboxPaySystem)
{
ob_start();
require_once($documentRoot."/bitrix/modules/sale/admin/cashbox_restrictions_list.php");
$restrictionsHtml = ob_get_contents();
ob_end_clean();
}
$aMenu = array(
array(
"TEXT" => Loc::getMessage("SALE_CASHBOX_2FLIST"),
"LINK" => $listUrl,
"ICON" => "btn_list"
)
);
if ($id > 0 && $saleModulePermissions >= "W" && !$isCashboxPaySystem)
{
$aMenu[] = array("SEPARATOR" => "Y");
$deleteUrl = $selfFolderUrl."sale_cashbox_list.php?action=delete&ID[]=".$id."&lang=".$context->getLanguage()."&".bitrix_sessid_get()."#tb";
$buttonAction = "LINK";
if ($adminSidePanelHelper->isPublicFrame())
{
$deleteUrl = $adminSidePanelHelper->editUrlToPublicPage($deleteUrl);
$buttonAction = "ONCLICK";
}
$aMenu[] = array(
"TEXT" => Loc::getMessage("SALE_DELETE_CASHBOX"),
$buttonAction => "javascript:if(confirm('".Loc::getMessage("SPSN_DELETE_CASHBOX_CONFIRM")."')) top.window.location.href='".$deleteUrl."';",
"WARNING" => "Y",
"ICON" => "btn_delete"
);
}
$contextMenu = new CAdminContextMenu($aMenu);
$contextMenu->Show();
if ($errorMessage !== '')
CAdminMessage::ShowMessage(array("DETAILS"=>$errorMessage, "TYPE"=>"ERROR", "MESSAGE"=>Loc::getMessage("SALE_CASHBOX_ERROR"), "HTML"=>true));
$valuePrecision = (int)Config\Option::get('sale', 'value_precision');
if ($valuePrecision > 2)
{
$note = BeginNote();
$note .= Loc::getMessage('SALE_CASHBOX_NOTE_VALUE_PRECISION');
$note .= EndNote();
echo $note;
}
$tabControl->BeginEpilogContent();
echo GetFilterHiddens("filter_");
echo bitrix_sessid_post();
?>