package com.finance.iso.iso8583.jpos.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMElement;
import org.apache.synapse.MessageContext;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.ISOUtil;
import com.finance.iso.iso8583.mediator.XLinkAccountInfoWrapper;
import com.finance.iso.iso8583.mediator.XLinkISO8583Constant;
import com.finance.iso.iso8583.mediator.XLinkSessionWrapper;
public class InquiryUtils {
public static void createBalanceInquiryMessage(ISOMsg request,OMElement requestOM,MessageContext synCtx, XLinkAccountInfoWrapper accountInfoWrapper,
XLinkSessionWrapper sessionWrapper)
throws ISOException {
final String field11 = ISOUtil.padleft(sessionWrapper.getNextRequestId(), XLinkISO8583Constant.FIELD_11_LENGTH, '0');
// MBSB Spec is here
request.setMTI("0200");
request.set(3, "301000");
request.set(4, ISOUtil.padleft("0", 18, '0'));
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
request.set(7, dateFormat.format(new Date()));
request.set(11, field11);
request.set(12, new SimpleDateFormat("HHmmss").format(new Date()));
request.set(13, new SimpleDateFormat("MMdd").format(new Date()));
request.set(18, XLinkISO8583Constant.REQUEST_FIELD_18);
request.set(24, "000");
request.set(32, XLinkISO8583Constant.REQUEST_FIELD_32);
request.set(37, new SimpleDateFormat("MMdd").format(new Date())+"00"+field11.substring(6));
String source=accountInfoWrapper.getAccountno();
request.set(41, ISOMsgUtils.generateField41(source));
request.set(42,ISOMsgUtils.generateField42(source));
request.set(43, ISOMsgUtils.generateField43(source));
request.set(49, XLinkISO8583Constant.REQUEST_FIELD_49);
request.set(98,ISOUtil.padright(XLinkISO8583Constant.REQUEST_FIELD_98_ON_US, 25, ' '));
request.set(102, source);
}
public static void createInquiryTransferMessage(ISOMsg request,OMElement requestOM,MessageContext synCtx, XLinkAccountInfoWrapper accountInfoWrapper,
XLinkSessionWrapper sessionWrapper)
throws ISOException {
final String field11 = ISOUtil.padleft(sessionWrapper.getNextRequestId(), XLinkISO8583Constant.FIELD_11_LENGTH, '0');
// MBSB Spec is here
request.setMTI("0200");
String sourceAcctType="10"; //Assign the Default Account
OMElement sourceAcctTypeNode = requestOM.getFirstChildWithName(new QName("SourceAcctType"));
if(sourceAcctTypeNode !=null && !"".equals(sourceAcctTypeNode.getText())){
sourceAcctType=sourceAcctTypeNode.getText();
}
String destAcctType="00"; //Assign the Default Account
OMElement destAcctTypeNode = requestOM.getFirstChildWithName(new QName("DestAcctType"));
if(destAcctTypeNode !=null && !"".equals(destAcctTypeNode.getText())){
destAcctType=destAcctTypeNode.getText();
}
request.set(3, "37"+sourceAcctType+destAcctType);
String amount="0";
OMElement amountNode = requestOM.getFirstChildWithName(new QName("Amount"));
if(amountNode !=null){
amount = amountNode.getText();
}
// if(amount.contains(".")){
// amount=amount.replace(".", "");
// }
request.set(4, ISOUtil.padleft(amount, 18, '0'));
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
request.set(7, dateFormat.format(new Date()));
request.set(11, field11);
request.set(12, new SimpleDateFormat("HHmmss").format(new Date()));
request.set(13, new SimpleDateFormat("MMdd").format(new Date()));
request.set(18, XLinkISO8583Constant.REQUEST_FIELD_18);
request.set(24, "000");
request.set(32, XLinkISO8583Constant.REQUEST_FIELD_32);
request.set(37, new SimpleDateFormat("MMdd").format(new Date())+"00"+field11.substring(6));
String source=accountInfoWrapper.getAccountno();
request.set(41, ISOMsgUtils.generateField41(source));
request.set(42,ISOMsgUtils.generateField42(source));
request.set(43, ISOMsgUtils.generateField43(source));
request.set(49, XLinkISO8583Constant.REQUEST_FIELD_49);
request.set(98,ISOUtil.padright(XLinkISO8583Constant.REQUEST_FIELD_98_ON_US, 25, ' '));
String destination=null;
OMElement toNode = requestOM.getFirstChildWithName(new QName("To"));
if(toNode !=null){
destination = toNode.getText();
}
request.set(102, source);
request.set(103, destination);
String dIIC=null;
OMElement dIICNode = requestOM.getFirstChildWithName(new QName("DIIC"));
if(dIICNode != null){
dIIC=dIICNode.getText();
}
if(dIIC == null){
dIIC = XLinkISO8583Constant.REQUEST_FIELD_32;
}
request.set(127, dIIC);
}
public static void createInquiryPaymentMessage(ISOMsg request,OMElement requestOM,MessageContext synCtx, XLinkAccountInfoWrapper accountInfoWrapper,
XLinkSessionWrapper sessionWrapper)
throws ISOException {
final String field11 = ISOUtil.padleft(sessionWrapper.getNextRequestId(), XLinkISO8583Constant.FIELD_11_LENGTH, '0');
// MBSB Spec is here
request.setMTI("0200");
request.set(3, "381000");
request.set(4, ISOUtil.padleft("0", 18, '0'));
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
request.set(7, dateFormat.format(new Date()));
request.set(11, field11);
request.set(12, new SimpleDateFormat("HHmmss").format(new Date()));
request.set(13, new SimpleDateFormat("MMdd").format(new Date()));
request.set(18, XLinkISO8583Constant.REQUEST_FIELD_18);
request.set(24, "000");
request.set(32, XLinkISO8583Constant.REQUEST_FIELD_32);
request.set(37, new SimpleDateFormat("MMdd").format(new Date())+"00"+field11.substring(6));
String source=accountInfoWrapper.getAccountno();
request.set(41, ISOMsgUtils.generateField41(source));
request.set(42,ISOMsgUtils.generateField42(source));
request.set(43, ISOMsgUtils.generateField43(source));
request.set(49, XLinkISO8583Constant.REQUEST_FIELD_49);
StringBuilder sb=new StringBuilder();
String destination=null;
OMElement toNode = requestOM.getFirstChildWithName(new QName("To"));
if(toNode !=null){
destination = toNode.getText();
}
sb.append(ISOUtil.padright(destination, 30, ' '));
sb.append(ISOUtil.padright(source, 30, ' '));
sb.append(ISOUtil.padright(field11, 16, ' '));
sb.append(360);
sb.append(360);
sb.append(ISOUtil.padleft("1.0", 12, ' '));
request.set(61,sb.toString());
request.set(98,ISOUtil.padright(XLinkISO8583Constant.REQUEST_FIELD_98_ON_US, 25, ' ')); //ON US Why 25 length what to do for the rest?
request.set(102, source);
}
public static void createTransactionHistoryMessage(ISOMsg request,OMElement requestOM, MessageContext synCtx, XLinkAccountInfoWrapper accountInfoWrapper,
XLinkSessionWrapper sessionWrapper)
throws ISOException {
final String field11 = ISOUtil.padleft(sessionWrapper.getNextRequestId(), XLinkISO8583Constant.FIELD_11_LENGTH, '0');
// MBSB Spec is here
request.setMTI("0200");
request.set(3, "361000");
request.set(4, ISOUtil.padleft("0", 18, '0'));
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
request.set(7, dateFormat.format(new Date()));
request.set(11, field11);
request.set(12, new SimpleDateFormat("HHmmss").format(new Date()));
request.set(13, new SimpleDateFormat("MMdd").format(new Date()));
request.set(18, XLinkISO8583Constant.REQUEST_FIELD_18);
request.set(24, "000");
request.set(32, XLinkISO8583Constant.REQUEST_FIELD_32);
request.set(37, new SimpleDateFormat("MMdd").format(new Date())+"00"+field11.substring(6));
String source=accountInfoWrapper.getAccountno();
request.set(41, ISOMsgUtils.generateField41(source));
request.set(42,ISOMsgUtils.generateField42(source));
request.set(43, ISOMsgUtils.generateField43(source));
request.set(49, XLinkISO8583Constant.REQUEST_FIELD_49);
request.set(98,ISOUtil.padright(XLinkISO8583Constant.REQUEST_FIELD_98_ON_US, 25, ' '));
request.set(102, source);
}
}