Добавление пункта в меню списка заказов в 1С-Битрикс
Задача была: При смене сервиса фискализации продаж по 54ФЗ сделать временное решение, добавить возможность скачать список товаров с ценой и количеством у заказа в JSON формате для ручного пробития чека через сервис.
Добавления кнопки в меню списка заказов добавил код с файл /bitrix/php_interface/init.php:
<?php
// ...
AddEventHandler('main', 'OnAdminListDisplay', 'dwOnAdminListDisplay');
function dwOnAdminListDisplay(&$list)
{
if ($list->table_id == 'tbl_sale_order') {
foreach ($list->aRows as &$row)
{
$row->aActions[] = ['SEPARATOR' => true];
$row->aActions[] = [
'ICON' => 'edit',
'TEXT' => 'Скачать чек',
'LINK' => '/?dw-order-get-id=' . $row->id,
];
}
}
}
Весь пример с генерацией JSON файла:
<?php
AddEventHandler('main', 'OnBeforeProlog', "dwOnBeforeProlog", 1);
function dwOnBeforeProlog()
{
if (isset($_GET['dw-order-get-id']) && $GLOBALS['USER']->IsAdmin())
{
$order_id = intval($_GET['dw-order-get-id']);
if ($order_id > 0)
{
Bitrix\Main\Loader::includeModule("sale");
$order = Bitrix\Sale\Order::load($order_id);
header('Content-Type: application/json; charset=UTF-8');
header('Content-Disposition: attachment; filename="order-check-' . $order_id . '.json"');
$res = [];
$orderBasket = $order->getBasket();
$basketItems = $orderBasket->getBasketItems();
foreach ($basketItems as $k => $v)
{
$row = [
'name' => $v->getField('NAME'),
'price' => $v->getPrice(),
'quantity' => $v->getQuantity(),
'tax' => 'vat20',
'item_type' => 'goods',
'payment_type' => 'full',
];
$row['sum'] = $row['price'] * $row['quantity'];
$get_product = CCatalogProduct::GetByID($v->getProductId());
if (isset($get_product['VAT_ID']) && $get_product['VAT_ID'] == 2)
{
$row['tax'] = 'vat10';
$row['tax_sum'] = round($row['sum'] * 0.083333333333333333333333, 2);
}
else
{
$row['tax'] = 'vat20';
$row['tax_sum'] = round($row['sum'] * 0.166666666666666666666666, 2);
}
$res[] = $row;
}
print json_encode($res, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
die();
}
}
}
AddEventHandler('main', 'OnAdminListDisplay', 'dwOnAdminListDisplay');
function dwOnAdminListDisplay(&$list)
{
if ($list->table_id == 'tbl_sale_order') {
foreach ($list->aRows as &$row)
{
$row->aActions[] = ['SEPARATOR' => true];
$row->aActions[] = [
'ICON' => 'edit',
'TEXT' => 'Скачать чек',
'LINK' => '/?dw-order-get-id=' . $row->id,
];
}
}
}
Пример JSON файла:
[
{
"name": "Медовый деликатес с золотом \"Golden Delicacy\" Мир мёда, 340г",
"price": 1499,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 1499,
"tax_sum": 249.83
},
{
"name": "Леовит ONCO Коктейль белковый восстанавливающий для онкологических больных (со вкусом клубники). Банка 400 г",
"price": 2199,
"quantity": 1,
"tax": "vat10",
"item_type": "goods",
"payment_type": "full",
"sum": 2199,
"tax_sum": 183.25
},
{
"name": "Крем вокруг глаз Medical Collagene 3D Boto Line, 15 мл",
"price": 659,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 659,
"tax_sum": 109.83
},
{
"name": "Микропилинг для лица Medical Collagene 3D Micro Peeling, 50 мл",
"price": 599,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 599,
"tax_sum": 99.83
},
{
"name": "Алфит Подарочный набор \"Сила трав Алтая\"",
"price": 1349,
"quantity": 3,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 4047,
"tax_sum": 674.5
},
{
"name": "Масло Монарды с лецитином \"Алфит Плюс\" 100 мл",
"price": 389,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 389,
"tax_sum": 64.83
},
{
"name": "Фитосбор Фитол 15 Профилактика сахарного диабета (30 брикетов утро + 30 брикетов вечер)",
"price": 249,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 249,
"tax_sum": 41.5
},
{
"name": " Алфит Бальзам МАЛЫШ-КРЕПЫШ детский Цветы жизни 100 мл ",
"price": 279,
"quantity": 1,
"tax": "vat20",
"item_type": "goods",
"payment_type": "full",
"sum": 279,
"tax_sum": 46.5
}
]