/* * $Id: KBDataInsert.java,v 1.5.4.2 2006/04/21 11:20:25 palli Exp $ * Created on Feb 8, 2005 * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package is.idega.block.finance.business.kb; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Calendar; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; import org.apache.commons.httpclient.methods.multipart.Part; import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.httpclient.params.HttpMethodParams; 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.util.IWTimestamp; /** * * Last modified: $Date: 2006/04/21 11:20:25 $ by $Author: palli $ * * @author <a href="mailto:birna@idega.com">birna</a> * @version $Revision: 1.5.4.2 $ */ public class KBDataInsert /* extends Window */implements InvoiceDataInsert { private static String POST_METHOD = "https://www.kbbanki.is/KBKrofur/Vefur/Pages/FileUpload.aspx"; private static String POST_ANSWER_METHOD = "https://www.bi.is/krofulinan/Pages/saekja_greidsluskra.aspx"; private static String FILE_NAME = "iw_cache/kbb.txt"; private String emptyString = new String(); private String zeroString = new String(); private String batchName = null; public void createClaimsInBank(int batchNumber, BankInfo info) { BankFileManager bfm = new BankInvoiceFileManager(info); createClaimsInBank(batchNumber, bfm); } public void createClaimsInBank(int batchNumber, int groupId) { BankFileManager bfm = new BankInvoiceFileManager(groupId); createClaimsInBank(batchNumber, bfm); } private void createClaimsInBank(int batchNumber, BankFileManager bfm) { for (int i = 0; i < 200; i++) { emptyString += " "; zeroString += "0"; } StringBuffer buffer = new StringBuffer(); String claimantSSN = bfm.getClaimantSSN(); if (claimantSSN != null && !claimantSSN.equals("")) { if (claimantSSN.length() < 10) claimantSSN = zeroString .substring(0, 10 - claimantSSN.length()) + claimantSSN; } else { claimantSSN = zeroString.substring(0, 10); } String bankNr = bfm.getBankBranchNumber(); if (bankNr != null && !bankNr.equals("")) { if (bankNr.length() < 4) bankNr = zeroString.substring(0, 4 - bankNr.length()) + bankNr; } else { bankNr = zeroString.substring(0, 4); } String claimantName = bfm.getClaimantName(); if (claimantName != null && !claimantName.equals("")) { if (claimantName.length() < 8) claimantName = claimantName + emptyString.substring(0, 8 - claimantName.length()); } else { claimantName = emptyString.substring(0, 8); } String claimantAccountId = bfm.getClaimantsAccountId(); if (claimantAccountId != null && !claimantAccountId.equals("")) { if (claimantAccountId.length() < 3) claimantAccountId = zeroString.substring(0, 3 - claimantAccountId.length()); } else { claimantAccountId = zeroString.substring(0, 3); } // start the header string: "hausfaersla" /* Kt_krofuhafa - 10 */ buffer.append(claimantSSN);// "5904002890" /* Utgafa - 4 */ buffer.append("0140");// the version number of the data sending to RB /* Faerslugerd - 1 */ buffer.append("H");// the type of the first line is: "hausfaersla" (H) /* Keyrsludagur - 8 */ buffer.append(new IWTimestamp(Calendar.getInstance().getTime()) .getDateString("yyyyMMdd"));// the run date - today! /* Verkefni - 2 */ buffer.append("IK");// a code for "verkefni" /* autt - 8 */ buffer.append(emptyString.substring(0, 8));// 8 empty spaces /* Gjaldkeranumer - 4 */ buffer.append("BI01");// a code for "gjaldkeranumer" /* autt - 7 */ buffer.append(emptyString.substring(0, 7)); /* Iban - 4 */ buffer.append(bankNr);// this is the number of the bank that sends the // claims /* Skjar - 8 */ buffer.append(claimantName);// "IKtest " /* autt - 50 */ buffer.append(emptyString.substring(0, 50)); buffer.append("\n"); // "hausfaersla" ends Integer[] krofuNumer = bfm.getInvoiceNumbers(batchNumber);// new // Integer[2]; // krofuNumer[0] = new Integer(1); // krofuNumer[1] = new Integer(2); String numberOfClaims = String.valueOf(krofuNumer.length); if (numberOfClaims.length() < 6) numberOfClaims = zeroString.substring(0, 6 - numberOfClaims .length()) + numberOfClaims; int totalAmount = 0; for (int i = 0; i < krofuNumer.length; i++) { int number = krofuNumer[i].intValue(); totalAmount += Integer.valueOf(bfm.getAmount100(number)).intValue(); String payersSSN = bfm.getPayersSSN(number); if (payersSSN != null && !payersSSN.equals("")) { if (payersSSN.length() < 10) payersSSN = zeroString .substring(0, 10 - payersSSN.length()) + payersSSN; } else { payersSSN = zeroString.substring(0, 10); } String numberString = String.valueOf(number); if (numberString.length() < 6) numberString = zeroString.substring(0, 6 - numberString .length()) + numberString; String amount = bfm.getAmount100(number); if (amount != null && !amount.equals("")) { if (amount.length() < 11) amount = zeroString.substring(0, 11 - amount.length()) + amount; } String batchString = String.valueOf(batchNumber);// String.valueOf(12); if (batchString.length() < 16) batchString = batchString + zeroString.substring(0, 16 - batchString.length()); String noteNumber = bfm.getNoteNumber(number); if (noteNumber != null && !noteNumber.equals("")) { if (noteNumber.length() < 7) noteNumber = zeroString.substring(0, 7 - noteNumber .length()) + noteNumber; } else { noteNumber = zeroString.substring(0, 7); } /* Kt_krofuhafa - 10 */ buffer.append(claimantSSN);// "5904002890" /* Utgafa - 4 */ buffer.append("0140");// the version number of the data sending to // RB /* Faerslugerd - 1 */ buffer.append("K");// the type of the second line is: "stofnun a // krofum" (K) /* Gjalddagi - 8 */ buffer.append(new IWTimestamp(bfm.getDueDate(number).getTime()) .getDateString("yyyyMMdd"));// "20040801" Calendar nidurfellingardagur = bfm.getDueDate(number); nidurfellingardagur.add(Calendar.YEAR, 4); /* Nidurfellingardagur - 8 */ buffer.append(new IWTimestamp(nidurfellingardagur.getTime()) .getDateString("yyyyMMdd"));// "20050801" /* Audkenni (Visir) - 3 */ buffer.append(claimantAccountId);// "001" /* Kt_greidanda - 10 */ buffer.append(payersSSN);// "5904002970" /* Bankanumer - 4 */ buffer.append(bankNr);// "0303" /* Hofudbok - 2 */ buffer.append(String.valueOf(bfm.getAccountBook()));// "66" /* Numer - 6 */ buffer.append(numberString);// "10028" + i /* Upphaed - 11 */ buffer.append(amount);// "00000000100" /* Tilvisun - 16 */ buffer.append(batchString);// "5904002970000000" /* Sedilnumer - 7 */ buffer.append(noteNumber);// "0000000" /* Vidskiptanumer - 16 */ buffer.append(emptyString.substring(0, 6) + payersSSN);// "5904002970" /* Eindagi - 8 */ buffer .append(new IWTimestamp(bfm.getFinalDueDate(number) .getTime()).getDateString("yyyyMMdd"));// "20040815" /* information not needed for now */ /* Tilkynningar- og greidslugjald 1 - 11 */ buffer.append("00000000000");// bfm.getNotificationAndPaymentFee1(number)); /* Tilkynningar- og greidslugjald 2 - 11 */ buffer.append("00000000000");// bfm.getNotificationAndPaymentFee2(number)); /* Fyrra vanskilagjald - 11 */ buffer.append("00000000000"); /* Seinna vanskilagjald - 11 */ buffer.append("00000000000"); /* Dagafjoldi fyrra vanskilagjalds - 2 */ buffer.append("00"); /* Dagafjoldi seinna vanskilagjalds - 2 */ buffer.append("00"); /* Vanskilagjaldskodi - 1 */ buffer.append(" "); /* Annar kostnadur - 11 */ buffer.append("00000000000");// bfm.getOtherCost(number)); /* Annar vanskilakostnadur - 11 */ buffer.append("00000000000");// bfm.getOtherOverdueCost(number)); /* Drattarvaxtaprosenta - 7 */ buffer.append("0000000"); /* Drattarvaxtaregla - 1 */ buffer.append("0"); /* Drattarvaxtastofnskodi - 1 */ buffer.append("0"); /* Gengistegund - 1 */ buffer.append("0"); /* Mynt - 3 */ buffer.append("000"); /* Gengisbanki - 2 */ buffer.append("00"); /* Gengiskodi - 1 */ buffer.append("0"); /* Greidslukodi - 1 */ buffer.append(" "); /* Fyrri afslattur - 11 */ buffer.append("00000000000"); /* Seinni afslattur - 11 */ buffer.append("00000000000"); /* Dagafjoldi fyrri afslattar - 2 */ buffer.append("00"); /* Dagafjoldi seinni afslattar - 2 */ buffer.append("00"); /* Afslattarkodi - 1 */ buffer.append("0"); /* Innborgunarkodi - 1 */ buffer.append("1"); /* Birtingarkodi - 1 */ buffer.append("1"); /* URL - 200 */ buffer.append(emptyString); buffer.append("\n"); } String totalString = String.valueOf(totalAmount); if (totalString.length() < 15) totalString = zeroString.substring(0, 15 - totalString.length()) + totalString; // "lokafaersla" begins /* Kt_krofuhafa - 10 */ buffer.append(claimantSSN);// "5904002890" /* autt - 4 */ buffer.append(emptyString.substring(0, 4)); /* Faerslugerd - 1 */ buffer.append("L");// the type of the last line is: "lokafaersla" (L) /* autt - 31 */ buffer.append(emptyString.substring(0, 31)); /* Fjoldi - 6 */ buffer.append(numberOfClaims); /* Upphaed 15 */ buffer.append(totalString); /* autt - 39 */ buffer.append(emptyString.substring(0, 39)); // "lokafaersla" ends try { BufferedWriter writer = new BufferedWriter(new FileWriter( FILE_NAME, false)); writer.write(buffer.toString()); writer.close(); BufferedReader reader = new BufferedReader( new FileReader(FILE_NAME)); reader.close(); } catch (IOException e) { e.printStackTrace(); } if (batchName == null) { batchName = Integer.toString(batchNumber); } sendCreateClaimsRequest(bfm); } public void getClaimStatusFromBank(int batchNumber, BankInfo info, java.util.Date from, java.util.Date to) { BankFileManager bfm = new BankInvoiceFileManager(info); getClaimStatusFromBank(batchNumber, bfm, from, to); } public void getClaimStatusFromBank(int batchNumber, int groupId, java.util.Date from, java.util.Date to) { BankFileManager bfm = new BankInvoiceFileManager(groupId); getClaimStatusFromBank(batchNumber, bfm, from, to); } private void getClaimStatusFromBank(int batchNumber, BankFileManager bfm, java.util.Date from, java.util.Date to) { String response = sendGetClaimStatusRequest(bfm, new IWTimestamp(from) .getDateString("yyyyMMdd"), new IWTimestamp(to) .getDateString("yyyyMMdd")); String number = response.substring(6, 12); String faerslugerd = response.substring(20, 21); bfm.setInvoiceStatus(faerslugerd, Integer.parseInt(number)); } public void deleteClaim(BankInfo info, int claimNumber, java.util.Date dueDate, String payersSSN) { BankFileManager bfm = new BankInvoiceFileManager(info); deleteClaim(bfm, claimNumber, dueDate, payersSSN); } public void deleteClaim(int groupId, int claimNumber, java.util.Date dueDate, String payersSSN) { BankFileManager bfm = new BankInvoiceFileManager(groupId); deleteClaim(bfm, claimNumber, dueDate, payersSSN); } private void deleteClaim(BankFileManager bfm, int claimNumber, java.util.Date dueDate, String payersSSN) { } /** * Sends a http multipart post method to KBBanki to create the claims * * @param bfm * @param groupId * @return */ private void sendCreateClaimsRequest(BankFileManager bfm) { /* HttpClient client = new HttpClient(); MultipartPostMethod post = new MultipartPostMethod(POST_METHOD); File file = new File(FILE_NAME); System.out.println("!!!kb:"); System.out.println("username = " + bfm.getUsername()); System.out.println("password = " + bfm.getPassword()); try { post.addParameter("cguser", bfm.getUsername());// "IK66TEST" post.addParameter("cgpass", bfm.getPassword());// "KBIK66" post.addParameter("cgutli", "0"); post.addParameter("cgskra", file); post.setDoAuthentication(false); client.executeMethod(post); System.out.println("responseString: " + post.getResponseBodyAsString()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } finally { post.releaseConnection(); } return post;*/ PostMethod filePost = new PostMethod(POST_METHOD); File file = new File(FILE_NAME); filePost.getParams().setBooleanParameter( HttpMethodParams.USE_EXPECT_CONTINUE, true); try { StringPart userPart = new StringPart("cguser", bfm.getUsername()); StringPart pwdPart = new StringPart("password", bfm.getPassword()); StringPart clubssnPart = new StringPart("cgclaimBatchName", batchName); FilePart filePart = new FilePart("cgskra", file); Part[] parts = { userPart, pwdPart, clubssnPart, filePart }; filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout( 5000); int status = client.executeMethod(filePost); if (status == HttpStatus.SC_OK) { System.out.println("Upload complete, response=" + filePost.getResponseBodyAsString()); } else { System.out.println("Upload failed, response=" + HttpStatus.getStatusText(status)); } } catch (Exception ex) { ex.printStackTrace(); } finally { filePost.releaseConnection(); } } /** * Sends a http post method to KBBanki to get the status of claims * * @param bfm * @param groupId * @return */ private String sendGetClaimStatusRequest(BankFileManager bfm, String fromDate, String toDate) { HttpClient client = new HttpClient(); PostMethod post = new PostMethod(POST_ANSWER_METHOD); String response = new String(); try { post.addParameter("cguser", bfm.getUsername()); post.addParameter("cgpass", bfm.getPassword()); // post.addParameter("cgbnum", "64014"); post.addParameter("cgdfra", fromDate);// "20030701" post.addParameter("cgdtil", toDate);// "20040823" post.addParameter("cgvisi", bfm.getClaimantsAccountId()); post.addParameter("cgSvarskra", "on"); client.executeMethod(post); response = post.getResponseBodyAsString(); } catch (HttpException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { post.releaseConnection(); } // System.out.println("response: " + response); return response; } }