Примеры скриптов CashCheck

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Готовый скрипт с двумя действиями)
(Скрипт печати чека при добавлении платежа 2)
 
(10 промежуточных версий не показаны.)
Строка 14: Строка 14:
check.addString( "Телематические услуги связи" );
check.addString( "Телематические услуги связи" );
check.addString( "Договор №: " + payment.getContractTitle() );
check.addString( "Договор №: " + payment.getContractTitle() );
-
//check.addString( "Абонент: " + payment.getContractComment() );
+
check.addString( "Абонент: " + payment.getContractComment() );
-
//здесь вместо комментария договора добавляем параметр договора
+
 +
// добавляем параметр договора
int PARAM_ID = 3;
int PARAM_ID = 3;
ContractParameterManager bgParamMan = new ContractParameterManager( con );
ContractParameterManager bgParamMan = new ContractParameterManager( con );
String paramVal = bgParamMan.getStringParam( event.getContractID(), PARAM_ID );
String paramVal = bgParamMan.getStringParam( event.getContractID(), PARAM_ID );
-
check.addString( "Параметр договора: " + paramVal );
+
check.addString( "Какой-то параметр договора: " + paramVal );
check.addString( " " );
check.addString( " " );
Строка 32: Строка 33:
"Ваш текущий баланс: " +
"Ваш текущий баланс: " +
(new BalanceUtils( con )).getBalance( new Date(),  event.getContractID() ).toPlainString()
(new BalanceUtils( con )).getBalance( new Date(),  event.getContractID() ).toPlainString()
-
); //добавили скобочку
+
);
check.addString( " " );
check.addString( " " );
}
}
</source>--[[Участник:DimOn|dimOn]] 13:07, 10 ноября 2009 (UTC)
</source>--[[Участник:DimOn|dimOn]] 13:07, 10 ноября 2009 (UTC)
-
== Ещё примеры добавить ниже ==
+
== Вывод параметра Адрес в чек ==
 +
<source lang="java">
 +
int PARAM_ID = 13; //id параметра Адрес
 +
ContractParameterManager bgParamMan = new ContractParameterManager( con );
 +
paramVal = bgParamMan.getAddressParam( event.getContractID(), PARAM_ID );
 +
adress = paramVal.getAddress().replace( ',','.' ) ; //меняем запятые в адресе на точки
 +
check.addString( adress.trim() );//убираем лишние пробелы
 +
</source>
 +
 
 +
== Скрипт печати чека при добавлении платежа ==
 +
<source lang="java">
 +
import bitel.billing.server.util.*;
 +
import bitel.billing.server.script.bean.event.PaymentEvent;
 +
import bitel.billing.server.contract.bean.Payment;
 +
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*;
 +
import ru.bitel.bgbilling.kernel.plugin.server.*;
 +
import org.w3c.dom.*;
 +
import javax.servlet.http.HttpSession;
 +
import java.math.BigDecimal;
 +
import ru.bitel.frk.client.CmdProtocolClient;
 +
 
 +
/*
 +
Скрипт печати чека при добавлении платежа.
 +
Вешается на событие PaymentEvent ("приход платежа").
 +
 
 +
В данной версии отслеживается тип платежа и реакция происходит на какой-то из них.
 +
Используется настройка регистратора из конфига плагина CashCheck.
 +
 
 +
Внимание:
 +
1) очередь печати чеков игнорируется.
 +
2) настройки маппинга платежей на принтеры из конфига плагина игнорируются.
 +
Это означает, что ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы на тот тип платежей, которые здесь печатаются автоматом
 +
в конфиге плагина НЕ БЫЛО маппинга на принтер. Иначе все эти платежи помимо распечатки тут попадут
 +
также и в очередь, будут мешаться и смогут быть повторно распечатаны. Также при добавлении прихода
 +
в клиенте биллинга нельзя ставить галочку "печатать чек", иначе печать чека будет инициирована ДВАЖДЫ.
 +
Отсутствие маппинга спасёт и в этом случае - напечатать чек по галочке (как и из очереди) станет невозможно.
 +
 
 +
Скрипт написан для версии 5.1
 +
*/
 +
public void onEvent( event, setup, con, conSlave )
 +
{
 +
// тип платежа, на который реагировать (если несколько, то самим добавить сравнения ниже)
 +
final static int PAYMENT_TYPE_ID = 24;
 +
// параметры регистратора: номер (из конфига плагина) и пароль
 +
final static int FR_ID = 5;
 +
final static String FR_PASS = "12345";
 +
//
 +
PaymentEvent paymentEvent = (PaymentEvent)event;
 +
Payment payment = paymentEvent.getPayment();
 +
if( payment.getPaymentTypeID() == PAYMENT_TYPE_ID )
 +
{
 +
print( "CashCheck Autoprint: Payment-type-ID="+payment.getPaymentTypeID()+" should be automatically printed" );
 +
// Получаем плагин, принтер менеджер и сам принтер пытаемся получить
 +
BGPluginServer plugin = BGPluginManagerServer.getManager().getPlugin( "ru.bitel.bgbilling.plugins.cashcheck" );
 +
Element rootNode = null;
 +
HttpSession session = null;
 +
PrinterManager printerManager = new PrinterManager( plugin, session, rootNode );
 +
Map printers = printerManager.getPrinterMap();
 +
Printer printer = printers.get( FR_ID );
 +
if ( printer == null )
 +
{
 +
error( "CashCheck Autoprint: ККМ не настроен" );
 +
return;
 +
}
 +
// код похож на тот, что в экшене печати чека, но в отличие от него тут мы
 +
// ничего не чекаем в очереди. надо озаботиться, чтобы в очередь не попадало.
 +
//
 +
// далее формируем объект-чек.
 +
// Добавляются сколько-то строк и одна только addPayment, ведь платёж у нас тут всегда один
 +
// и позиция, стало быть, тоже всегда одна
 +
BigDecimal summa = payment.getSumma();
 +
Check check = new Check();
 +
check.addString( "произвольная строка" );
 +
check.addPayment( summa.floatValue(), "товар", 0 );
 +
//
 +
String clientsumma = check.getPaymentsum().toPlainString();
 +
// запрос к серверу печати
 +
CmdProtocolClient client = new CmdProtocolClient( printer.getAddress(), printer.getPort() );
 +
try
 +
{
 +
client.connect();
 +
boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} );
 +
if( result == false )
 +
{
 +
error( "CashCheck Autoprint: Ошибка! ККМ сказала: " + client.getReply() );
 +
return;
 +
}
 +
print( "CashCheck Autoprint: check was printed!" );
 +
}
 +
catch( ConnectException e )
 +
{
 +
error( "CashCheck Autoprint: Ошибка обмена с сервером печати ККМ: " + e.getMessage() );
 +
}
 +
finally
 +
{
 +
try{client.disconnect();}catch( ConnectException e ){}
 +
}
 +
}
 +
}
 +
</source>
 +
--[[Участник:DimOn|dimOn]] 16:50, 22 марта 2011 (UTC)
 +
 
 +
== Скрипт печати чека при добавлении платежа 2 ==
 +
<source lang="java">
 +
import bitel.billing.server.util.*;
 +
import bitel.billing.server.script.bean.event.PaymentEvent;
 +
import bitel.billing.server.contract.bean.Payment;
 +
import bitel.billing.server.contract.bean.*;
 +
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*;
 +
import ru.bitel.bgbilling.kernel.plugin.server.*;
 +
import ru.bitel.bgbilling.common.BGMessageException;
 +
import bitel.billing.common.BGException;
 +
import bitel.billing.plugin.BGPluginServer;
 +
import bitel.billing.plugin.BGPluginManagerServer;
 +
import org.w3c.dom.*;
 +
import javax.servlet.http.HttpSession;
 +
import java.math.BigDecimal;
 +
import ru.bitel.frk.client.CmdProtocolClient;
 +
import java.util.Arrays;
 +
import java.util.List;
 +
import java.sql.Connection;
 +
 
 +
/*
 +
Скрипт печати чека при добавлении платежа.
 +
Вешается на событие PaymentEvent ("приход платежа").
 +
 +
В данной версии отслеживается тип платежа и реакция происходит на какой-то из них.
 +
В зависимости от типа платежа печатается на определённый регистратор и определённого вида чек.
 +
Используется настройка регистратора из конфига плагина CashCheck.
 +
Также печатается только для определённых групп юзеров биллинга.
 +
 
 +
Внимание:
 +
1) очередь печати чеков игнорируется.
 +
2) настройки маппинга платежей на принтеры из конфига плагина игнорируются.
 +
Это означает, что ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы на тот тип платежей, которые здесь печатаются автоматом
 +
в конфиге плагина НЕ БЫЛО маппинга на принтер. Иначе все эти платежи помимо распечатки тут попадут
 +
также и в очередь, будут мешаться и смогут быть повторно распечатаны. Также при добавлении прихода
 +
в клиенте биллинга нельзя ставить галочку "печатать чек", иначе печать чека будет инициирована ДВАЖДЫ.
 +
Отсутствие маппинга спасёт и в этом случае - напечатать чек по галочке (как и из очереди) станет невозможно.
 +
 +
Скрипт написан для версии 5.0
 +
*/
 +
 
 +
/**
 +
* Здесь список всех юзеров, для которых сработает автопечать при приходе платежа.
 +
*/
 +
final static int[] USERS ={1, 32, 3};
 +
 
 +
/**
 +
* Здесь выборка принтера по типу платежа. Берутся настройки из конфига плагина.
 +
*/
 +
 
 +
// параметры регистратора: номер (из конфига плагина) и пароль, заполняются в методе
 +
int FR_ID;
 +
String FR_PASS;
 +
 
 +
private boolean changePrinter( int paymentTypeId )
 +
{
 +
switch( paymentTypeId )
 +
{
 +
case 24:
 +
FR_ID = 5;
 +
FR_PASS = "12345";
 +
return true;
 +
case 29:
 +
FR_ID = 5;
 +
FR_PASS = "12345";
 +
return true;
 +
default:
 +
return false;
 +
}
 +
}
 +
 
 +
/**
 +
* формируем объект-чек.
 +
* Добавляются сколько-то строк и одна только addPayment, ведь платёж у нас тут всегда один
 +
* и позиция, стало быть, тоже всегда одна
 +
*/
 +
private Check makeCheck( Payment payment, int paymentTypeId, Connection con )
 +
{
 +
switch( paymentTypeId )
 +
{
 +
case 24:
 +
BigDecimal summa = payment.getSumma();
 +
int cid = payment.getContractID();
 +
Check check = new Check();
 +
check.addString( " " );
 +
check.addString( "Телематические услуги связи(Интернет)" );
 +
//check.addString( "Договор №: " + payment.getContractTitle() );
 +
// догогор вытаскиваем
 +
Contract contract = new ContractManager( con ).getContractByID( cid );
 +
if( contract != null )
 +
{
 +
check.addString( "Договор №: " + contract.getTitle() );
 +
}
 +
else
 +
{
 +
check.addString( "Договор неизвестный (ошибка)" );
 +
}
 +
// параметр вытаскиваем
 +
int PARAM_ID = 3;
 +
ContractParameterManager bgParamMan = new ContractParameterManager( con );
 +
String paramVal = bgParamMan.getStringParam( cid, PARAM_ID );
 +
check.addString( "ФИО/Организация: ");
 +
check.addString( paramVal );
 +
check.addString( " " );
 +
check.addString(
 +
"Ваш текущий баланс: " +
 +
(new BalanceUtils( con )).getBalance( new Date(), cid ).toPlainString()
 +
);
 +
check.addPayment( summa.floatValue(), "Оплата услуг интернета", 0 );
 +
return check;
 +
 
 +
 
 +
case 29:
 +
BigDecimal summa = payment.getSumma();
 +
Check check = new Check();
 +
check.addString( "произвольная строка вид 2" );
 +
check.addPayment( summa.floatValue(), "товар", 0 );
 +
return check;
 +
default:
 +
return null;
 +
}
 +
}
 +
 
 +
public void onEvent( event, setup, con, conSlave )
 +
{
 +
PaymentEvent paymentEvent = (PaymentEvent)event;
 +
Payment payment = paymentEvent.getPayment();
 +
Arrays.sort( USERS );
 +
if( Arrays.binarySearch( USERS, payment.getUserID() ) >=0 )
 +
{
 +
print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment should be automatically printed!" );
 +
int paymentTypeId = payment.getPaymentTypeID();
 +
if( changePrinter( paymentTypeId ) )
 +
{
 +
print( "CashCheck Autoprint: paymentTypeId="+paymentTypeId+", payment should be automatically printed!" );
 +
// Получаем плагин, принтер менеджер и сам принтер пытаемся получить
 +
BGPluginServer plugin = BGPluginManagerServer.getManager().getPlugin( "ru.bitel.bgbilling.plugins.cashcheck" );
 +
Element rootNode = null;
 +
HttpSession session = null;
 +
PrinterManager printerManager = new PrinterManager( plugin, session, rootNode );
 +
Map printers = printerManager.getPrinterMap();
 +
Printer printer = printers.get( FR_ID );
 +
if ( printer == null )
 +
{
 +
error( "CashCheck Autoprint: ККМ не настроен" );
 +
return;
 +
}
 +
// код похож на тот, что в экшене печати чека, но в отличие от него тут мы
 +
// ничего не чекаем в очереди. надо озаботиться, чтобы в очередь не попадало.
 +
Check check = makeCheck( payment, paymentTypeId, con );
 +
if( check != null )
 +
{
 +
String clientsumma = check.getPaymentsum().toPlainString();
 +
// запрос к серверу печати
 +
CmdProtocolClient client = new CmdProtocolClient( printer.getAddress(), printer.getPort() );
 +
try
 +
{
 +
client.connect();
 +
boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} );
 +
if( result == false )
 +
{
 +
error( "CashCheck Autoprint: Ошибка! ККМ сказала: " + client.getReply() );
 +
return;
 +
}
 +
print( "CashCheck Autoprint: check was printed!" );
 +
}
 +
catch( ConnectException e )
 +
{
 +
error( "CashCheck Autoprint: Ошибка обмена с сервером печати ККМ: " + e.getMessage() );
 +
}
 +
finally
 +
{
 +
try{client.disconnect();}catch( ConnectException e ){}
 +
}
 +
}
 +
else
 +
{
 +
print( "CashCheck Autoprint: makeCheck: paymentTypeId="+paymentTypeId+", payment NOT printed!" );
 +
}
 +
}
 +
else
 +
{
 +
print( "CashCheck Autoprint: changePrinter: paymentTypeId="+paymentTypeId+", payment NOT printed!" );
 +
}
 +
}
 +
else
 +
{
 +
print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment NOT printed!" );
 +
}
 +
}
 +
</source>
 +
--[[Участник:DimOn|dimOn]] 13:41, 21 апреля 2011 (UTC)
 +
--[[Участник:DimOn|dimOn]] 15:24, 10 мая 2011 (UTC)
 +
 
 +
 
 +
 
 +
[[Категория:Плагин CashCheck]]
 +
[[Категория:Скрипты поведения]]
 +
[[Категория:BGBS API]]

Текущая версия на 07:35, 17 мая 2011

Содержание

Готовый скрипт с двумя действиями

Демонстрация того, как вытащить какой-либо параметр договора и как в подвал чека вытащить баланс.

import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*;
import bitel.billing.server.contract.bean.*;
 
check = event.getCheck();
 
if ( event instanceof AddPaymentCheckEvent)
{
	payment = event.getPayment();
 
	check.addString( " " );
	check.addString( "Телематические услуги связи" );
	check.addString( "Договор №: " + payment.getContractTitle() );
	check.addString( "Абонент: " + payment.getContractComment() );
 
	// добавляем параметр договора
	int PARAM_ID = 3;
	ContractParameterManager bgParamMan = new ContractParameterManager( con );
	String paramVal = bgParamMan.getStringParam( event.getContractID(), PARAM_ID );
	check.addString( "Какой-то параметр договора: " + paramVal );
	check.addString( " " );
 
	check.addPayment( payment.getSumma(), payment.getContractTitle(), event.getPaymentDep() );
 
	check.addString( " " );
}
 
if(event instanceof EndCreateCheckEvent)
{
	check.addString(
		"Ваш текущий баланс: " +
		(new BalanceUtils( con )).getBalance( new Date(),  event.getContractID() ).toPlainString()
	);
	check.addString( " " );
}
--dimOn 13:07, 10 ноября 2009 (UTC)

Вывод параметра Адрес в чек

int PARAM_ID = 13; //id параметра Адрес
ContractParameterManager bgParamMan = new ContractParameterManager( con );
paramVal = bgParamMan.getAddressParam( event.getContractID(), PARAM_ID );
adress = paramVal.getAddress().replace( ',','.' ) ; //меняем запятые в адресе на точки
check.addString( adress.trim() );//убираем лишние пробелы

Скрипт печати чека при добавлении платежа

import bitel.billing.server.util.*;
import bitel.billing.server.script.bean.event.PaymentEvent;
import bitel.billing.server.contract.bean.Payment;
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*;
import ru.bitel.bgbilling.kernel.plugin.server.*;
import org.w3c.dom.*;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import ru.bitel.frk.client.CmdProtocolClient;
 
/*
Скрипт печати чека при добавлении платежа.
Вешается на событие PaymentEvent ("приход платежа").
 
В данной версии отслеживается тип платежа и реакция происходит на какой-то из них.
Используется настройка регистратора из конфига плагина CashCheck.
 
Внимание:
1) очередь печати чеков игнорируется. 
2) настройки маппинга платежей на принтеры из конфига плагина игнорируются.
Это означает, что ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы на тот тип платежей, которые здесь печатаются автоматом
в конфиге плагина НЕ БЫЛО маппинга на принтер. Иначе все эти платежи помимо распечатки тут попадут
также и в очередь, будут мешаться и смогут быть повторно распечатаны. Также при добавлении прихода
в клиенте биллинга нельзя ставить галочку "печатать чек", иначе печать чека будет инициирована ДВАЖДЫ.
Отсутствие маппинга спасёт и в этом случае - напечатать чек по галочке (как и из очереди) станет невозможно.
 
Скрипт написан для версии 5.1
*/
public void onEvent( event, setup, con, conSlave )
{
	// тип платежа, на который реагировать (если несколько, то самим добавить сравнения ниже)
	final static int PAYMENT_TYPE_ID = 24;
	// параметры регистратора: номер (из конфига плагина) и пароль
	final static int FR_ID = 5;
	final static String FR_PASS = "12345";
	//
	PaymentEvent paymentEvent = (PaymentEvent)event;
	Payment payment = paymentEvent.getPayment();
	if( payment.getPaymentTypeID() == PAYMENT_TYPE_ID )
	{
		print( "CashCheck Autoprint: Payment-type-ID="+payment.getPaymentTypeID()+" should be automatically printed" );
		// Получаем плагин, принтер менеджер и сам принтер пытаемся получить
		BGPluginServer plugin = BGPluginManagerServer.getManager().getPlugin( "ru.bitel.bgbilling.plugins.cashcheck" );
		Element rootNode = null;
		HttpSession session = null;
		PrinterManager printerManager = new PrinterManager( plugin, session, rootNode );
		Map printers = printerManager.getPrinterMap();
		Printer printer = printers.get( FR_ID );
		if ( printer == null )
		{
			error( "CashCheck Autoprint: ККМ не настроен" ); 
			return;
		}
		// код похож на тот, что в экшене печати чека, но в отличие от него тут мы
		// ничего не чекаем в очереди. надо озаботиться, чтобы в очередь не попадало.
		//
		// далее формируем объект-чек.
		// Добавляются сколько-то строк и одна только addPayment, ведь платёж у нас тут всегда один
		// и позиция, стало быть, тоже всегда одна
		BigDecimal summa = payment.getSumma();
		Check check = new Check();
		check.addString( "произвольная строка" );
		check.addPayment( summa.floatValue(), "товар", 0 );
		//
		String clientsumma = check.getPaymentsum().toPlainString();
		// запрос к серверу печати
		CmdProtocolClient client = new CmdProtocolClient( printer.getAddress(), printer.getPort() );
		try
		{
			client.connect();
			boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} );
			if( result == false )
			{
				error( "CashCheck Autoprint: Ошибка! ККМ сказала: " + client.getReply() );
				return;
			}
			print( "CashCheck Autoprint: check was printed!" );
		}
		catch( ConnectException e )
		{
			error( "CashCheck Autoprint: Ошибка обмена с сервером печати ККМ: " + e.getMessage() );
		}
		finally
		{
			try{client.disconnect();}catch( ConnectException e ){}
		}
	}
}

--dimOn 16:50, 22 марта 2011 (UTC)

Скрипт печати чека при добавлении платежа 2

import bitel.billing.server.util.*;
import bitel.billing.server.script.bean.event.PaymentEvent;
import bitel.billing.server.contract.bean.Payment;
import bitel.billing.server.contract.bean.*;
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.*;
import ru.bitel.bgbilling.kernel.plugin.server.*;
import ru.bitel.bgbilling.common.BGMessageException;
import bitel.billing.common.BGException;
import bitel.billing.plugin.BGPluginServer;
import bitel.billing.plugin.BGPluginManagerServer;
import org.w3c.dom.*;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import ru.bitel.frk.client.CmdProtocolClient;
import java.util.Arrays;
import java.util.List;
import java.sql.Connection;
 
/*
Скрипт печати чека при добавлении платежа.
Вешается на событие PaymentEvent ("приход платежа").
 
В данной версии отслеживается тип платежа и реакция происходит на какой-то из них.
В зависимости от типа платежа печатается на определённый регистратор и определённого вида чек.
Используется настройка регистратора из конфига плагина CashCheck.
Также печатается только для определённых групп юзеров биллинга.
 
Внимание:
1) очередь печати чеков игнорируется. 
2) настройки маппинга платежей на принтеры из конфига плагина игнорируются.
Это означает, что ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы на тот тип платежей, которые здесь печатаются автоматом
в конфиге плагина НЕ БЫЛО маппинга на принтер. Иначе все эти платежи помимо распечатки тут попадут
также и в очередь, будут мешаться и смогут быть повторно распечатаны. Также при добавлении прихода
в клиенте биллинга нельзя ставить галочку "печатать чек", иначе печать чека будет инициирована ДВАЖДЫ.
Отсутствие маппинга спасёт и в этом случае - напечатать чек по галочке (как и из очереди) станет невозможно.
 
Скрипт написан для версии 5.0
*/
 
/**
 * Здесь список всех юзеров, для которых сработает автопечать при приходе платежа.
 */
final static int[] USERS ={1, 32, 3};
 
/**
 * Здесь выборка принтера по типу платежа. Берутся настройки из конфига плагина.
 */
 
// параметры регистратора: номер (из конфига плагина) и пароль, заполняются в методе
int FR_ID;
String FR_PASS;
 
private boolean changePrinter( int paymentTypeId )
{
	switch( paymentTypeId )
	{
		case 24:
			FR_ID = 5;
			FR_PASS = "12345";
			return true;
		case 29:
			FR_ID = 5;
			FR_PASS = "12345";
			return true;
		default:
			return false;
	}
}
 
/**
 * формируем объект-чек.
 * Добавляются сколько-то строк и одна только addPayment, ведь платёж у нас тут всегда один
 * и позиция, стало быть, тоже всегда одна
 */
private Check makeCheck( Payment payment, int paymentTypeId, Connection con )
{
	switch( paymentTypeId )
	{		
		case 24:
			BigDecimal summa = payment.getSumma();
			int cid = payment.getContractID();
			Check check = new Check();
			check.addString( " " );
			check.addString( "Телематические услуги связи(Интернет)" );
			//check.addString( "Договор №: " + payment.getContractTitle() );
			// догогор вытаскиваем
			Contract contract = new ContractManager( con ).getContractByID( cid );
			if( contract != null )
			{
				check.addString( "Договор №: " + contract.getTitle() );
			}
			else
			{
				check.addString( "Договор неизвестный (ошибка)" );
			}
			// параметр вытаскиваем
			int PARAM_ID = 3;
			ContractParameterManager bgParamMan = new ContractParameterManager( con );
			String paramVal = bgParamMan.getStringParam( cid, PARAM_ID );
			check.addString( "ФИО/Организация: ");
			check.addString( paramVal );
			check.addString( " " );
			check.addString(
			"Ваш текущий баланс: " +
			(new BalanceUtils( con )).getBalance( new Date(), cid ).toPlainString()
			);
			check.addPayment( summa.floatValue(), "Оплата услуг интернета", 0 );
			return check;
 
 
		case 29:
			BigDecimal summa = payment.getSumma();
			Check check = new Check();
			check.addString( "произвольная строка вид 2" );
			check.addPayment( summa.floatValue(), "товар", 0 );
			return check;
		default:
			return null;
	}
}
 
public void onEvent( event, setup, con, conSlave )
{
	PaymentEvent paymentEvent = (PaymentEvent)event;
	Payment payment = paymentEvent.getPayment();
	Arrays.sort( USERS );
	if(	Arrays.binarySearch( USERS, payment.getUserID() ) >=0 )
	{
		print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment should be automatically printed!" );
		int paymentTypeId = payment.getPaymentTypeID();
		if(	changePrinter( paymentTypeId ) )
		{
			print( "CashCheck Autoprint: paymentTypeId="+paymentTypeId+", payment should be automatically printed!" );
			// Получаем плагин, принтер менеджер и сам принтер пытаемся получить
			BGPluginServer plugin = BGPluginManagerServer.getManager().getPlugin( "ru.bitel.bgbilling.plugins.cashcheck" );
			Element rootNode = null;
			HttpSession session = null;
			PrinterManager printerManager = new PrinterManager( plugin, session, rootNode );
			Map printers = printerManager.getPrinterMap();
			Printer printer = printers.get( FR_ID );
			if ( printer == null )
			{
				error( "CashCheck Autoprint: ККМ не настроен" ); 
				return;
			}
			// код похож на тот, что в экшене печати чека, но в отличие от него тут мы
			// ничего не чекаем в очереди. надо озаботиться, чтобы в очередь не попадало.
 			Check check = makeCheck( payment, paymentTypeId, con );
			if( check != null )
			{
				String clientsumma = check.getPaymentsum().toPlainString();
				// запрос к серверу печати
				CmdProtocolClient client = new CmdProtocolClient( printer.getAddress(), printer.getPort() );
				try
				{
					client.connect();
					boolean result = client.send( "check", new Object[]{FR_PASS, clientsumma, check.getPlines()} );
					if( result == false )
					{
						error( "CashCheck Autoprint: Ошибка! ККМ сказала: " + client.getReply() );
						return;
					}
					print( "CashCheck Autoprint: check was printed!" );
				}
				catch( ConnectException e )
				{
					error( "CashCheck Autoprint: Ошибка обмена с сервером печати ККМ: " + e.getMessage() );
				}
				finally
				{
					try{client.disconnect();}catch( ConnectException e ){}
				}
			}
			else
			{
				print( "CashCheck Autoprint: makeCheck: paymentTypeId="+paymentTypeId+", payment NOT printed!" );
			}
		}
		else
		{
			print( "CashCheck Autoprint: changePrinter: paymentTypeId="+paymentTypeId+", payment NOT printed!" );
		}
	}
	else
	{
		print( "CashCheck Autoprint: user id="+payment.getUserID()+", payment NOT printed!" );
	}
}

--dimOn 13:41, 21 апреля 2011 (UTC) --dimOn 15:24, 10 мая 2011 (UTC)

Личные инструменты