is.idega.block.finance.business.kb.KBDataInsert.java Source code

Java tutorial

Introduction

Here is the source code for is.idega.block.finance.business.kb.KBDataInsert.java

Source

/*
 * $Id: KBDataInsert.java,v 1.7 2007/04/23 17:47:36 eiki 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: 2007/04/23 17:47:36 $ by $Author: eiki $
 * 
 * @author <a href="mailto:birna@idega.com">birna</a>
 * @version $Revision: 1.7 $
 */
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;
    }
}