Вот как это сделано у нас:
Код:
package .plugins.cashcheck;
import ru.bitel.common.TimeUtils;
import ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract;
import ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.plugins.cashcheck.common.Payment;
import ru.bitel.bgbilling.plugins.cashcheck.common.Printer;
import ru.bitel.bgbilling.plugins.cashcheck.server.CheckMaker;
import ru.bitel.bgbilling.plugins.cashcheck.server.bean.Check;
import ru.bitel.bgbilling.server.util.Setup;
import java.sql.Connection;
import java.util.Set;
public class CheckHeaders extends CheckMaker {
private ContractDao contractManager;
@Override
public void init(Setup setup, Connection con, Connection conSlave) throws BGException {
this.contractManager = new ContractDao(con, 0);
}
/**
* Формируем шапку чека.
* В общем случае, шапка чека должна быть такой:
* <p>
* Основание: услуги связи по дог.
* 100500900 от 01.02.1917
*
* @param payment
* @param check
* @param printer
* @throws BGException
*/
@Override
public void addPayment(Payment payment, Check check, Printer printer) throws BGException {
check.addString(" ");
check.addString("Основание: Услуги связи по дог.");
Contract contract = contractManager.get(payment.getContractId());
check.addString(payment.getContractTitle() + " от " + TimeUtils.format(contract.getDateFrom(), "dd.MM.yyyy"));
check.addString(" ");
check.setTax(3); // Налог с номером 3 (НДС 18%) по умолчанию.
// Разобрать платежи по типам.
switch (payment.getPaymentTypeId()) {
case 61:
case 59: {
// Платёж наличными в кассу
// Установить соответсвующий тип для ККМ
check.setPaymentType(1);
break;
}
case 18:
case 66: {
// Платёж безналичный в кассу
check.setPaymentType(2);
break;
}
}
check.addPayment(payment.getSumma(), String.valueOf(payment.getSumma()) + "р.", 0);
}
public void endCreate(int cid, Check check, Printer printer)
throws BGException {
// ничего нету, ничего не делаем
}
@Override
public void endCreate(Set<Integer> cids, Check check, Printer printer)
throws BGException {
// ничего не делаем
}
/**
* Обработка возвратов
*
* @param payment - платёж
* @param check - объект чека
* @param printer - объект ККМ принтера
* @throws BGException
*/
@Override
public void addPaymentRefund(Payment payment, Check check, Printer printer) throws BGException {
check.addString(" ");
check.addString("Основание: возврат оплаты.");
Contract contract = contractManager.get(payment.getContractId());
check.addString(payment.getContractTitle() + " от " + TimeUtils.format(contract.getDateFrom(), "dd.MM.yyyy"));
check.addString(" ");
check.setTax(1); // Налог с номером 1 (НДС 0%).
check.addPayment(payment.getSumma(), String.valueOf(payment.getSumma()) + "р.", 0);
}
}
Идентификаторы типов платежей и типов налогов надо брать из таблиц справочников ККМ.
Для АТОЛЛ, обычно,
платежи:
1 - платёж наличными
2 - платёж по безналу
налоги:
1 - НДС 0%
3 - НДС 18%
Ах да, чуть не забыл.
В биллинге, конечно, должны быть заведены соответствующие типы для обработки наличных и безналичных платежей.