package is.idega.block.finance.business.isb;
import is.idega.block.finance.business.isb.ws2.Krafa;
import is.idega.block.finance.business.isb.ws2.KrofurWSLocator;
import is.idega.block.finance.business.isb.ws2.KrofurWSSoap_PortType;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Date;
import javax.ejb.FinderException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.client.Stub;
import org.apache.axis.configuration.FileProvider;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.handler.WSHandlerConstants;
import com.idega.block.finance.business.BankFileManager;
import com.idega.block.finance.business.BankInvoiceFileManager;
import com.idega.block.finance.business.InvoiceDataInsert;
import com.idega.block.finance.data.BankInfo;
import com.idega.block.finance.data.BankInfoHome;
import com.idega.block.finance.data.Batch;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWMainApplication;
import com.idega.util.FileUtil;
public class ISBDataInsert2 implements InvoiceDataInsert, CallbackHandler {
private static String ACTION_URL = "https://ws.isb.is/adgerdirv1/krofur.asmx";
// create claim
public void createClaimsInBank(int batchNumber, int groupId) {
BankFileManager bfm = new BankInvoiceFileManager(groupId);
createClaimsInBank(batchNumber, bfm);
}
public void createClaimsInBank(int batchNumber, BankInfo info) {
BankFileManager bfm = new BankInvoiceFileManager(info);
createClaimsInBank(batchNumber, bfm);
}
private void createClaimsInBank(int batchNumber, BankFileManager bfm) {
Integer[] krofuNumer = bfm.getInvoiceNumbers(batchNumber);
Krafa[] krofur = new Krafa[krofuNumer.length];
for (int i = 0; i < krofuNumer.length; i++) {
Krafa krafa = new Krafa();
int number = krofuNumer[i].intValue();
krafa.setKrofunumer(number);
krafa.setKennitalaKrofuhafa(bfm.getClaimantSSN());// "0904649069"
krafa.setGjalddagi(bfm.getDueDate(number));// Calendar.getInstance()
krafa.setFaerslugerd(bfm.getBookkeepingType(number));// "K"
// add 4 years to the due date (gjalddagi) for nidurfellingardag - 4
// years is the max
Calendar nidurfellingardagur = bfm.getDueDate(number);// Calendar.getInstance();
nidurfellingardagur.add(Calendar.YEAR, 4);
krafa.setNidurfellingardagur(nidurfellingardagur);
krafa.setAudkenni(bfm.getClaimantsAccountId());// "IAS"
krafa.setKennitalaGreidanda(bfm.getPayersSSN(number));// "0904649069"
krafa.setBankanumer(Integer.valueOf(bfm.getBankBranchNumber())
.intValue());// 515
krafa.setHofudbok(bfm.getAccountBook());// 66
krafa.setUpphaed(new BigDecimal(bfm.getAmount(number)));
krafa.setTilvisun(String.valueOf(batchNumber));
krafa.setSedilnumer("");
krafa.setVidskiptanumer(bfm.getPayersSSN(number));// "0904649069"
// the eindagi is the same as the due date (gjalddagi) if there are
// no overdue fee (vanskilagjald)!
krafa.setEindagi(bfm.getFinalDueDate(number));// Calendar.getInstance()
krafa.setDrattavaxtaprosenta(new BigDecimal(bfm
.getPenalIntrestProsent(number)));
// the values in drattavaxtaregla may be:
// '' - drattavextir(penal intrest) taken after eindaga (final due
// date), but are calculated from gjalddaga (due date).
// if eindagi and gjalddagi are the same day and on a bank holiday
// then the invoice may be payed without
// drattavextir the next bank day.
// '1' - no drattavextir - this is the default
// '2' - if past the final due date then the drattavextir are
// calculated from eindagi (eindagi included) with
// the rule 360/360
krafa.setDrattavaxtaregla("1");// bfm.getPenalIntrestRule(numer));
// controls if drattavextir (penal intrest) is calculated from the
// amount of the invoice or
// the amount + vanskilagjald (overdue fee)
// '' - drattavextir calculated from the amount - the default
// '1' - drattavextir calculated from the amount + vanskilagjald
krafa.setDrattavaxtastofnkodi("");// bfm.getPenalIntrestCode(numer));
// code that tells if the invoice may be payed with existing older
// invoices
// ' ' - the invoice may not be payed if there exists an older
// invoice
// '1' - the invoice may be payed in any case - the default!
krafa.setGreidslukodi("1");// bfm.getPaymentCode(numer));
krafa.setTilkynningarOgGreidslugjald1(new BigDecimal(0));// new
// BigDecimal(bfm.getNotificationAndPaymentFee1(numer)));
krafa.setTilkynningarOgGreidslugjald2(new BigDecimal(0));// new
// BigDecimal(bfm.getNotificationAndPaymentFee2(numer)));
krafa.setVanskilagjald1(new BigDecimal(0));
krafa.setVanskilagjald2(new BigDecimal(0));
krafa.setDagafjoldiVanskilagjalds1(0);
krafa.setDagafjoldiVanskilagjalds2(0);
krafa.setVanskilagjaldsKodi("");
krafa.setAnnarKostnadur(new BigDecimal(0));// new
// BigDecimal(bfm.getOtherCost(numer)));
krafa.setAnnarVanskilakostnadur(new BigDecimal(0));
krafa.setGengistegund("");
krafa.setMynt("");
krafa.setGengiskodi("");
krafa.setAfslattur1(new BigDecimal(0));
krafa.setAfslattur2(new BigDecimal(0));
krafa.setDagafjoldiAfslattar1(0);
krafa.setDagafjoldiAfslattar2(0);
krafa.setAfslattarkodi("");
krafa.setInnborgunarkodi("");
krafa.setBirtingakodi("");
krafa.setVefslod("");
krafa.setNafnGreidanda1("");
krafa.setNafnGreidanda2("");
krafa.setHeimiliGreidanda("");
krafa.setSveitarfelagGreidanda("");
krafa.setAthugasemdalina1("");
krafa.setAthugasemdalina2("");
krafa.setHreyfingar(null);
krofur[i] = krafa;
}
try {
StringBuffer file = new StringBuffer(IWMainApplication.getDefaultIWMainApplication().getBundle("is.idega.block.finance").getResourcesRealPath());
file.append(FileUtil.getFileSeparator());
file.append("client_deploy.wsdd");
EngineConfiguration config = new FileProvider(file.toString());
KrofurWSLocator locator = new KrofurWSLocator(config);
KrofurWSSoap_PortType port = locator.getKrofurWSSoap(new URL(
ACTION_URL));
Stub stub = (Stub) port;
stub._setProperty(WSHandlerConstants.ACTION,
WSHandlerConstants.USERNAME_TOKEN);
stub._setProperty(WSHandlerConstants.PASSWORD_TYPE,
WSConstants.PW_TEXT);
stub._setProperty(WSHandlerConstants.USER, bfm.getUsername());
stub._setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, this
.getClass().getName());
BigDecimal batchNr = port.stofnaKrofubunka(krofur);
Batch b = bfm.getBatch(batchNumber);
if (b != null) {
b.setExternalBatchNumber(batchNr.toString());
b.store();
}
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
public void handle(Callback[] callbacks)
throws UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
String password = getPassword(pc.getIdentifer());
pc.setPassword(password);
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");
}
}
}
private String getPassword(String userName) {
String password = "";
try {
BankInfoHome home = (BankInfoHome) IDOLookup.getHome(BankInfo.class);
BankInfo info = home.findByUserNameAndBankShortName(userName, "ISB");
password = info.getPassword();
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
System.out.println("userName = " + userName);
System.out.println("password = " + password);
return password;
}
// get claim status
public void getClaimStatusFromBank(int batchNumber, int groupId, Date from,
Date to) {
}
public void getClaimStatusFromBank(int batchNumber, BankInfo info,
Date from, Date to) {
}
// delete claim
public void deleteClaim(int groupId, int claimNumber, Date dueDate,
String payersSSN) {
}
public void deleteClaim(BankInfo info, int claimNumber, Date dueDate,
String payersSSN) {
}
}