3.3. Настройка внешнего вида чеков (динамический код)

Для формирование вида чеков используется динамический код. Чтобы использовать динамический код для формирования вида чека, в конфигурацию плагина прописывается следующий (или любой другой подходящий) класс:

# динамический класс для формирования вида чека
checkbuilder=ru.bitel.bgbilling.cashcheck.SimpleCheck

Пример класса идёт в комплекте с плагином. Подразумевается, что класс обязательно должен быть и должен сработать. О работе с динамическим кодом можно прочитать в соответствующем разделе справки. Внутри можно проверить любые условия и сформировать чек любой формы для каждой позиции/платежа, добавляемой в чек.

Методы динамического класса служат для настройки внешнего вида чеков.

Примеры кода:

Замечание

Обратите особое внимание, что в каждом скрипте формирования внешнего вида чека (а именно происходит формирование каждой отдельной позиции чека) обязательно должна присутствовать ровно одна команда addPayment для всех устройств, являющихся ККМ. Дополнительно может быть любое количество addString. Для устройств, представляющих обычный принтер, для FOP-устройств (см. ниже) и т.п. команда addPayment не нужна, так как там не происходит добавление продажи во внутреннюю память. Но сумма платежа будет считаться только для позиций, добавленных через addPayment.

Далее приведём пример кода "добавление позиции" для формирования FO-документа, для FOP-драйвера. Эти строки соответствуют шаблону cashcheck_pko.xsl, находящемуся в стандартной поставке сервера печати.

import bitel.billing.common.*;
import bitel.billing.server.admin.bean.*;

//…
//Сумма платежа: "120,00р." (делаем одну строку addPayment, чтобы общая сумма посчиталась)
check.addPayment( payment.getSumma(), String.valueOf(payment.getSumma()) + "р.", 0 );
//Номер договора
check.addString( payment.getContractTitle() );
//Фамилия клиента: "ИВАНОВ И.И."
check.addString( payment.getContractComment() );
//Дата платежа: 20-04-2009
check.addString( TimeUtils.format( payment.getDate(), "dd-MM-yyyy" ) );
//Организация: ООО "ПРОВАЙДЕР"
check.addString( "ООО \"ПРОВАЙДЕР\"" );
//ФИО кассира (пользователя биллинга)
UserManager um = new UserManager( con );   
User user = um.getUserByID( payment.getUserID() );
check.addString( user.getName() );
//Тип платежа: "СПД  №"
check.addString( "СПД  №" );
//Сумма прописью: "Сто двадцать рублей 00 коп"
check.addString( SummaToString.summaToString( String.valueOf(payment.getSumma()), true ) );
//…

В данном случае мы формируем 8 строк с произвольной информацией, которая передаётся в FOP-драйвер сервера печати, который из напрямую передаёт в FO-шаблон обычной линейной xml. Это позволяет формировать документ из любых строк, подготовленных в скрипте и из любого написанного шаблона.

Также в методы класса передаётся объект "printer" - объект "принтер", на который производится печать. Это может понадобиться, например, при наличии двух разных принтеров и желания печатать на них разного вида информацию и на разные принтеры использовать разные скрипты (например, для FOP и ККМ скрипты всегда разные будут). Например, можно получить ид принтера (такой, какой он в конфиге плагина):

int printerId = printer.getId();