Документ (счет) в PDF Bitrix

За основу взяли готовый вариант счета из платежного модуля оплаты счета один к одному, скажем так, но не взлетело! Ведь там есть настройки платежной системы перед формированием счета, а у нас и оплаты с такой системой в заказе может и не быть.

Тогда для оживления счета были внесены некоторые изменения в код:

Конечно же были подключены нужные модули системы

CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule('highloadblock');
CModule::IncludeModule('sale');

Далее ORDER_ID нужно получить из запроса, а не из сессии

$ORDER_ID = IntVal($_REQUEST["ORDERID"]);

Далее мы не хотим показывать чужие счета ХЗ кому, кроме админа, конечно

global $USER;
if ($arOrder["USER_ID"]!=$USER->GetID()&&$USER->GetID()>1)die();

Теперь нужно проинитить платежную систему с помощью

CSalePaySystemAction::InitParamArrays

Но! У нас нет нужной оплаты с системой формирования счета в заказе! Пришлось позаимствовать настройки оплаты у старого заказа, где оплата такая была

$filter = array('ID' => 20293);//оплата с нужной системой
$resPayment = \Bitrix\Sale\Internals\PaymentTable::getList(array(
'select' => array('PAY_SYSTEM_ID', 'SUM', 'DATE_BILL', 'ID'),
'filter' => $filter,
'limit' => array(1)
));
$payment = $resPayment->fetch();

$dbPaySysAction = CSalePaySystemAction::GetList(
array(),
array(
"PAY_SYSTEM_ID" => 3,//код нашей системы оплаты
"PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"]
),
false,
false,
array("ACTION_FILE", "PARAMS", "ENCODING")
);
if ($arPaySysAction = $dbPaySysAction->Fetch()){
CSalePaySystemAction::InitParamArrays($arOrder, $ORDER_ID, $arPaySysAction["PARAMS"],array(),$payment);
}

Инит прошел успешно. Далее просто выгоняем счет. Я взял его в буфер, т.к. мне нужно потом его передать в mPDF. Кста, в Битре есть свой PDF-креатор, но, простите, адище. Пользоваться им у меня никакого желания нет. А вот вогнать html код в pdf — есть )

ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Счет</title>
...

</body>
</html>
<?php
$html=ob_get_clean();

Полученный html загоняем в mPDF

require_once "mpdf/mpdf.php";
$mpdf=new mPDF();
$mpdf->WriteHTML($html);
$mpdf->SetTitle("Счет по заказу $ORDER_ID");
$mpdf->Output("invoice-$ORDER_ID.pdf","D");

И, думаете все?! Да хрен бы я писать тогда стал!

На выходе «??????????»! Вот же засада! А помните тот самый ужасный mbstring.func_overload? Так вот mPDF просит mbstring.func_overload 0, а Битр 2, кажись. Итого UTF не UTF. Декоды и танцы с iconv или mb_ не дают результата или вешают апач вовсе.

Недолгие поиски привели к решению, но только для VDSников, т.к. нужно править конфиг апча, а именно для папки с mPDF установить значение 0

<Directory /home/bitrix/www/invoice>
AllowOverride All
php_admin_value mbstring.func_overload 0
</Directory>

т.е. вся начинка по генерации счета лежит в папке /home/bitrix/www/invoice

Теперь-то все по красоте!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *