package is.idega.idegaweb.golf.service; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.SQLException; import java.text.DecimalFormat; import javax.ejb.FinderException; import com.idega.data.IDOLookup; import com.idega.presentation.IWContext; import is.idega.idegaweb.golf.entity.Member; import is.idega.idegaweb.golf.entity.MemberHome; import is.idega.idegaweb.golf.entity.Payment; import is.idega.idegaweb.golf.entity.PaymentHome; import is.idega.idegaweb.golf.entity.PaymentRound; import is.idega.idegaweb.golf.entity.PaymentRoundHome; import is.idega.idegaweb.golf.entity.Union; import is.idega.idegaweb.golf.entity.UnionHome; import com.idega.util.IWTimestamp; /** *@author <a href="mailto:aron@idega.is">Aron Birkir</a> *@version 1.0 */ public class GiroFile { private int bankoffice,finalpayday; private String giroB1, giroB2, giroB3, giroB4; private int roundid; private String sFileLink = ""; public GiroFile(){} public GiroFile(int roundid,int bankoffice,int finalpayday,String giroB1,String giroB2, String giroB3, String giroB4){ this.bankoffice = bankoffice; this.finalpayday = finalpayday; this.giroB1 = giroB1; this.giroB2 = giroB2; this.giroB3 = giroB3; this.giroB4 = giroB4; this.roundid = roundid; } public void setBankOffice(int bankoffice){ this.bankoffice = bankoffice; } public void setFinalPayDay(int finalpayday){ this.finalpayday = finalpayday; } public void setGiroTextB1(String giroB1){ this.giroB1 = giroB1; } public void setGiroTextB2(String giroB2){ this.giroB2 = giroB2; } public void setGiroTextB3(String giroB3){ this.giroB3 = giroB3; } public void setGiroTextB4(String giroB4){ this.giroB4 = giroB4; } public void setRoundID(int roundid){ this.roundid = roundid; } public void makeFile(IWContext modinfo) throws SQLException,IOException, FinderException{ giroFiling(modinfo,roundid,bankoffice,finalpayday,giroB1, giroB2, giroB3, giroB4); } public String getFileLinkString(){ return this.sFileLink; } public void setFileLinkString(String sFileLink){ this.sFileLink = sFileLink; } public void writeFile(IWContext modinfo,Payment[] ePayments, int bankoffice,int finalpayday,String giroB1,String giroB2, String giroB3, String giroB4, int union_id) throws SQLException,IOException, FinderException{ Union U = ((UnionHome) IDOLookup.getHomeLegacy(Union.class)).findByPrimaryKey(union_id); IWTimestamp datenow = new IWTimestamp(); String sLowerCaseUnionAbbreviation = U.getAbbrevation().toLowerCase(); String fileSeperator = System.getProperty("file.separator"); String filepath = modinfo.getServletContext().getRealPath(fileSeperator+sLowerCaseUnionAbbreviation+fileSeperator); StringBuffer fileName = new StringBuffer(sLowerCaseUnionAbbreviation); fileName.append(datenow.getDay()); fileName.append(datenow.getMonth()); fileName.append(datenow.getMinute()); fileName.append(".krafa.banki"); String sWholeFileString = fileSeperator+fileName.toString(); this.setFileLinkString(fileSeperator+sLowerCaseUnionAbbreviation+sWholeFileString); File outputFile = new File(filepath+sWholeFileString); FileWriter out = new FileWriter(outputFile); char[] c ; String giroID = "1"; java.text.DecimalFormat myFormatter = new DecimalFormat("00000000000"); java.text.DecimalFormat referenceFormatter = new DecimalFormat("00000000"); java.text.DecimalFormat countFormatter = new DecimalFormat("0000000"); java.text.DecimalFormat dateFormatter = new DecimalFormat("00"); StringBuffer SB = new StringBuffer(); int TotalPrice = 0; int price = 0; int totalcount = 0; //Formf�rsla kr�fuhafa SB.append(bankoffice); //Bankan�mer �j�nustu�tib�s SB.append("KR");//inniheldur KR SB.append(" "); SB.append("//"); SB.append("Innheimtukerfi "); SB.append("\n"); if(!giroB1.equals("")){ SB.append("B1080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB1);// Autt SB.append("\n"); } if(!giroB2.equals("")){ SB.append("B2080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB2);// Autt SB.append("\n"); } if(!giroB3.equals("")){ SB.append("B3080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB3);// Autt SB.append("\n"); } if(!giroB4.equals("")){ SB.append("B4080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB4);// Autt SB.append("\n"); } // write the first part to file c = SB.toString().toCharArray(); out.write(c); Member M;IWTimestamp PayDate; String year,month,day,kt; int theMonth; String strFinalDay = dateFormatter.format(finalpayday); for(int i = 0; i < ePayments.length ;i++){ SB = new StringBuffer(); M = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(ePayments[i].getMemberId()); kt = M.getSocialSecurityNumber(); PayDate = new IWTimestamp(ePayments[i].getPaymentDate()); price = ePayments[i].getPrice(); year = String.valueOf(PayDate.getYear()); month = dateFormatter.format(PayDate.getMonth()); day = dateFormatter.format(PayDate.getDay()); SB.append("C2080"); // Inniheldur C2 og 080 SB.append(" "); // kennitala kr�fuhafa(10) SB.append(kt); //kennitala grei�anda(10) SB.append("EEEEE"); //Efnislykill (5) TotalPrice += price; SB.append(myFormatter.format(price)); //kr�fuupph�� sem gildir a� gjalddaga(11) SB.append("00"); // "aurar" (,2) SB.append(" "); // kr�fuupph�� sem gildir fr� og me� gjalddaga e�a n�ll(11,2) // tilv�sun (16)(8+8): SB.append(referenceFormatter.format(M.getID())); SB.append(referenceFormatter.format(ePayments[i].getID())); SB.append(" "); //autt sv��i (1) // Gjalddagi se�ils ey�a ef reglulegar kr�fur (6) SB.append(year); SB.append(month); SB.append(day); // Eindagi se�ils ey�a ef reglulegar kr�fur e�a aldrei vanskil(6) if(finalpayday != 0){ SB.append(year); SB.append(month); SB.append(strFinalDay); } else{ SB.append(" "); } SB.append(" "); // Se�iln�mer (7) SB.append(" "); // Vanskilakostna�ur (11) SB.append("S"); SB.append("\n"); totalcount ++; // write a line to file c = SB.toString().toCharArray(); out.write(c); } SB = new StringBuffer(); SB.append("LF"); // � a� innihalda "LF" (2) SB.append("080"); // // 080 (3) SB.append(" ");// Kt.kr�fuhafa (10) SB.append(" ");// autt (10) SB.append(myFormatter.format(TotalPrice)); SB.append("00"); // "aurar" (,2) SB.append(" ");//Upph�� 2 SB.append(countFormatter.format(totalcount)); SB.append("\n"); // write the last part to file c = SB.toString().toCharArray(); out.write(c); out.close(); //add(SB.toString()); } private void giroFiling(IWContext modinfo,int roundid, int bankoffice,int finalpayday,String giroB1,String giroB2, String giroB3, String giroB4) throws SQLException,IOException, FinderException{ //PaymentType[] giroPtype = (PaymentType[]) (new PaymentType()).findAll("select * from payment_type where name like 'G�r�%'"); String union_id = (String) modinfo.getSession().getAttribute("golf_union_id"); int un_id = Integer.parseInt(union_id) ; Union U = ((UnionHome) IDOLookup.getHomeLegacy(Union.class)).findByPrimaryKey(un_id); IWTimestamp datenow = new IWTimestamp(); String sLowerCaseUnionAbbreviation = U.getAbbrevation().toLowerCase(); String fileSeperator = System.getProperty("file.separator"); String filepath = modinfo.getServletContext().getRealPath(fileSeperator+sLowerCaseUnionAbbreviation+fileSeperator); StringBuffer fileName = new StringBuffer(sLowerCaseUnionAbbreviation); fileName.append(datenow.getDay()); fileName.append(datenow.getMonth()); fileName.append(datenow.getMinute()); fileName.append(".krafa.banki"); String sWholeFileString = fileSeperator+fileName.toString(); this.setFileLinkString(fileSeperator+sLowerCaseUnionAbbreviation+sWholeFileString); File outputFile = new File(filepath+sWholeFileString); FileWriter out = new FileWriter(outputFile); char[] c ; String giroID = "1"; java.text.DecimalFormat myFormatter = new DecimalFormat("00000000000"); java.text.DecimalFormat referenceFormatter = new DecimalFormat("00000000"); java.text.DecimalFormat countFormatter = new DecimalFormat("0000000"); java.text.DecimalFormat dateFormatter = new DecimalFormat("00"); StringBuffer SB = new StringBuffer(); PaymentRound PR = ((PaymentRoundHome) IDOLookup.getHomeLegacy(PaymentRound.class)).findByPrimaryKey(roundid); String paymRoundIDstring = String.valueOf(PR.getID()); Payment[] payments = (Payment[]) ((Payment) IDOLookup.instanciateEntity(Payment.class)).findAllByColumnEquals("status","N","payment_type_id",giroID ); int TotalPrice = 0; int price = 0; int totalcount = 0; //Formf�rsla kr�fuhafa SB.append(bankoffice); //Bankan�mer �j�nustu�tib�s SB.append("KR");//inniheldur KR SB.append(" "); SB.append("//"); SB.append("Innheimtukerfi "); SB.append("\n"); if(!giroB1.equals("")){ SB.append("B1080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB1);// Autt SB.append("\n"); } if(!giroB2.equals("")){ SB.append("B2080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB2);// Autt SB.append("\n"); } if(!giroB3.equals("")){ SB.append("B3080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB3);// Autt SB.append("\n"); } if(!giroB4.equals("")){ SB.append("B4080"); SB.append(" ");// Kennitala kr�fuhafa SB.append(" ");// Autt SB.append(giroB4);// Autt SB.append("\n"); } // write the first part to file c = SB.toString().toCharArray(); out.write(c); Member M;IWTimestamp PayDate; String year,month,day,kt; int theMonth; String strFinalDay = dateFormatter.format(finalpayday); for(int i = 0; i < payments.length ;i++){ SB = new StringBuffer(); M = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(payments[i].getMemberId()); kt = M.getSocialSecurityNumber(); PayDate = new IWTimestamp(payments[i].getPaymentDate()); price = payments[i].getPrice(); year = String.valueOf(PayDate.getYear()); month = dateFormatter.format(PayDate.getMonth()); day = dateFormatter.format(PayDate.getDay()); SB.append("C2080"); // Inniheldur C2 og 080 SB.append(" "); // kennitala kr�fuhafa(10) SB.append(kt); //kennitala grei�anda(10) SB.append("EEEEE"); //Efnislykill (5) TotalPrice += price; SB.append(myFormatter.format(price)); //kr�fuupph�� sem gildir a� gjalddaga(11) SB.append("00"); // "aurar" (,2) SB.append(" "); // kr�fuupph�� sem gildir fr� og me� gjalddaga e�a n�ll(11,2) // tilv�sun (16)(8+8): SB.append(referenceFormatter.format(M.getID())); SB.append(referenceFormatter.format(payments[i].getID())); SB.append(" "); //autt sv��i (1) // Gjalddagi se�ils ey�a ef reglulegar kr�fur (6) SB.append(year); SB.append(month); SB.append(day); // Eindagi se�ils ey�a ef reglulegar kr�fur e�a aldrei vanskil(6) if(finalpayday != 0){ SB.append(year); SB.append(month); SB.append(strFinalDay); } else{ SB.append(" "); } SB.append(" "); // Se�iln�mer (7) SB.append(" "); // Vanskilakostna�ur (11) SB.append("S"); SB.append("\n"); totalcount ++; // write a line to file c = SB.toString().toCharArray(); out.write(c); } SB = new StringBuffer(); SB.append("LF"); // � a� innihalda "LF" (2) SB.append("080"); // // 080 (3) SB.append(" ");// Kt.kr�fuhafa (10) SB.append(" ");// autt (10) SB.append(myFormatter.format(TotalPrice)); SB.append("00"); // "aurar" (,2) SB.append(" ");//Upph�� 2 SB.append(countFormatter.format(totalcount)); SB.append("\n"); // write the last part to file c = SB.toString().toCharArray(); out.write(c); out.close(); //add(SB.toString()); } /** @todo: B�ta vi�*/ public static Payment ProcessLine(String strBankline){ Payment P = (Payment) IDOLookup.createLegacy(Payment.class); if(strBankline.startsWith("G2")){ try{ int iPID = Integer.parseInt(strBankline.substring(45,53)); P = ((PaymentHome) IDOLookup.getHomeLegacy(Payment.class)).findByPrimaryKey(iPID); int iPrice = Integer.parseInt(strBankline.substring(53,65)); int iOverdueInterest = Integer.parseInt(strBankline.substring(66,78)); int iOverduePrice = Integer.parseInt(strBankline.substring(79,89)); int iBankCost = Integer.parseInt(strBankline.substring(91,101)); if(iPrice != P.getPrice()) P.setPrice(iPrice); /* if(iOverdueInterest != 0) P.setOverDueInterest(iOverdueInterest); if(iOverduePrice != 0) P.setOverDuePrice(iOverduePrice); if(iBankCost != 0) P.setBankCost(iBankCost); */ P.update(); } catch(SQLException e){e.printStackTrace();} catch(FinderException e){e.printStackTrace();} } if(strBankline.startsWith("Z2")){ try{ int iReceivedAmount1 = Integer.parseInt(strBankline.substring(25,37)); int iReceivedAmount2 = Integer.parseInt(strBankline.substring(38,50)); int iEntriesReceived = Integer.parseInt(strBankline.substring(51,58)); int iFaultEntries = Integer.parseInt(strBankline.substring(58,65)); int iCollectAmount = Integer.parseInt(strBankline.substring(65,77)); int iInterestAmount = Integer.parseInt(strBankline.substring(78,90)); int iOverdueAmount = Integer.parseInt(strBankline.substring(91,101)); int iEntryCount = Integer.parseInt(strBankline.substring(102,109)); } catch(Exception e){e.printStackTrace();} } return P; } private void writeFile(String filename,String content) throws IOException{ File outputFile = new File(filename); FileWriter out = new FileWriter(outputFile); char[] c = content.toCharArray(); out.write(c); out.close(); } }// class Tariffer