package se.idega.idegaweb.commune.accounting.export.raindance.business;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.rmi.RemoteException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import se.idega.idegaweb.commune.accounting.export.business.MissingAddressException;
import se.idega.idegaweb.commune.accounting.export.business.MissingCustodianException;
import se.idega.idegaweb.commune.accounting.export.business.MissingPostalCodeException;
import se.idega.idegaweb.commune.accounting.export.data.ExportDataMapping;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceCheckHeader;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceCheckHeaderHome;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceCheckRecord;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceCheckRecordHome;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceJournalLog;
import se.idega.idegaweb.commune.accounting.export.raindance.data.RaindanceJournalLogHome;
import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceHeader;
import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceHeaderHome;
import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceRecord;
import se.idega.idegaweb.commune.accounting.invoice.data.InvoiceRecordHome;
import se.idega.idegaweb.commune.accounting.invoice.data.PaymentHeader;
import se.idega.idegaweb.commune.accounting.invoice.data.PaymentHeaderHome;
import se.idega.idegaweb.commune.accounting.invoice.data.PaymentRecord;
import se.idega.idegaweb.commune.accounting.invoice.data.PaymentRecordHome;
import se.idega.idegaweb.commune.accounting.posting.business.PostingBusiness;
import se.idega.idegaweb.commune.accounting.school.data.Provider;
import com.idega.block.school.data.SchoolCategory;
import com.idega.business.IBOLookup;
import com.idega.business.IBORuntimeException;
import com.idega.core.contact.data.Phone;
import com.idega.core.location.business.CommuneBusiness;
import com.idega.core.location.data.Address;
import com.idega.core.location.data.PostalCode;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.User;
import com.idega.util.IWTimestamp;
public class RaindanceFileCreationThread extends Thread {
protected String schoolCategory = null;
protected IWTimestamp paymentDate = null;
protected String periodText = null;
protected User user = null;
protected Locale currentLocale = null;
protected IWApplicationContext iwac = null;
/**
* Default constructor for the thread.
*
* @param schoolCategory
* @param paymentDate
* @param periodText
* @param user
* @param currentLocale
* @param iwac
*/
public RaindanceFileCreationThread(String schoolCategory,
IWTimestamp paymentDate, String periodText, User user,
Locale currentLocale, IWApplicationContext iwac) {
this.schoolCategory = schoolCategory;
this.paymentDate = paymentDate;
this.periodText = periodText;
this.user = user;
this.currentLocale = currentLocale;
this.iwac = iwac;
}
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
public void run() {
// excelFileUtil = new RaindanceCreateExcelFileUtil(iwac, paymentDate);
IWTimestamp now = IWTimestamp.RightNow();
RaindanceJournalLog log;
try {
log = ((RaindanceJournalLogHome) IDOLookup
.getHome(RaindanceJournalLog.class)).create();
log.setSchoolCategoryString(schoolCategory);
log.setEventFileCreated();
log.setEventDate(now.getTimestamp());
log.setUser(user);
log.store();
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (CreateException e) {
e.printStackTrace();
}
RaindanceCheckHeader header = null;
try {
header = getRaindanceBusiness()
.getRaindanceCheckHeaderBySchoolCategory(schoolCategory);
} catch (Exception e) {
}
if (header == null) {
try {
header = ((RaindanceCheckHeaderHome) IDOLookup
.getHome(RaindanceCheckHeader.class)).create();
} catch (IDOLookupException e1) {
e1.printStackTrace();
} catch (CreateException e1) {
e1.printStackTrace();
}
} else {
Collection col = null;
try {
col = getRaindanceBusiness().getRaindanceCheckRecordByHeaderId(
((Integer) header.getPrimaryKey()).intValue());
} catch (RemoteException e5) {
e5.printStackTrace();
} catch (EJBException e5) {
e5.printStackTrace();
}
if (col != null && !col.isEmpty()) {
Iterator it = col.iterator();
while (it.hasNext()) {
RaindanceCheckRecord rec = (RaindanceCheckRecord) it.next();
try {
rec.remove();
} catch (EJBException e1) {
e1.printStackTrace();
} catch (RemoveException e1) {
e1.printStackTrace();
}
}
}
}
header.setSchoolCategoryString(schoolCategory);
header.setStatusFileCreated();
header.setEventDate(now.getTimestamp());
header.setEventStartTime(now.getTimestamp());
header.setEventEndTime(null);
header.store();
// Get folder info from ExportMappingBean
ExportDataMapping mapping = null;
String fileFolder = null;
String listFolder = null;
try {
mapping = getRaindanceBusiness().getExportBusiness()
.getExportDataMapping(schoolCategory);
fileFolder = mapping.getFileCreationFolder();
listFolder = mapping.getListCreationFolder();
} catch (RemoteException e1) {
e1.printStackTrace();
} catch (FinderException e1) {
e1.printStackTrace();
}
if (listFolder == null) {
listFolder = fileFolder;
}
SchoolCategory childCare = null;
try {
childCare = getRaindanceBusiness().getSchoolBusiness()
.getCategoryChildcare();
} catch (RemoteException e2) {
e2.printStackTrace();
}
SchoolCategory school = null;
try {
school = getRaindanceBusiness().getSchoolBusiness()
.getCategoryElementarySchool();
} catch (RemoteException e3) {
e3.printStackTrace();
}
StringBuffer fileName1 = null;
StringBuffer fileName2 = null;
StringBuffer fileName3 = null;
if (childCare != null && (fileFolder != null || listFolder != null)
&& school != null) {
if (schoolCategory.equals(childCare.getPrimaryKey())) {
if (fileFolder != null) {
fileName1 = new StringBuffer(fileFolder);
fileName1.append("BOIN");
fileName2 = new StringBuffer(fileFolder);
fileName2.append("BOEX");
fileName3 = new StringBuffer(fileFolder);
fileName3.append("DEB");
fileName1.append(now.getDateString("yyMM"));
fileName2.append(now.getDateString("yyMM"));
fileName3.append(now.getDateString("yyMM"));
fileName1.append(".txt");
fileName2.append(".txt");
fileName3.append(".txt");
}
try {
createPaymentFiles(fileName1.toString(), fileName2
.toString(), schoolCategory, now, paymentDate);
} catch (IOException e5) {
e5.printStackTrace();
}
try {
createInvoiceFiles(fileName3.toString(), schoolCategory,
currentLocale, header, mapping);
} catch (IOException e6) {
e6.printStackTrace();
}
}
}
now = IWTimestamp.RightNow();
header.setEventEndTime(now.getTimestamp());
header.store();
}
private void createPaymentFiles(String fileName1, String fileName2,
String schoolCategory, IWTimestamp executionDate,
IWTimestamp paymentDate)
throws IOException {
Collection headers = null;
try {
headers = ((PaymentHeaderHome) IDOLookup
.getHome(PaymentHeader.class))
.findBySchoolCategoryStatusInCommuneWithCommunalManagement(
schoolCategory, 'P', getCommuneBusiness().getDefaultCommune());
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
StringBuffer empty = new StringBuffer("");
for (int i = 0; i < 60; i++) {
empty.append(" ");
}
// Internal payment file
if (headers != null && !headers.isEmpty()) {
Iterator it = headers.iterator();
OutputStreamWriter sWriter = new OutputStreamWriter(new FileOutputStream(fileName1), "ISO-8859-1");
//FileWriter writer = new FileWriter(fileName1);
BufferedWriter bWriter = new BufferedWriter(sWriter);
Map ownPostingMap = new HashMap();
Map doublePostingMap = new HashMap();
while (it.hasNext()) {
PaymentHeader header = (PaymentHeader) it.next();
boolean includeHeader = false;
if (header.getSchool() != null) {
Provider provider = getRaindanceBusiness()
.getProviderBusiness().getProvider(
header.getSchoolID());
if (provider.getAccountingProperties().getBankgiro() == null
&& provider.getAccountingProperties().getPostgiro() == null) {
includeHeader = true;
}
}
if (includeHeader) {
Collection records = null;
try {
records = ((PaymentRecordHome) IDOLookup
.getHome(PaymentRecord.class))
.findByPaymentHeader(header);
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
if (records != null && !records.isEmpty()) {
Iterator rIt = records.iterator();
float sumForHeader = 0.0f;
while (rIt.hasNext()) {
PaymentRecord rec = (PaymentRecord) rIt.next();
if (rec.getTotalAmount() != 0.0f) {
sumForHeader += rec.getTotalAmount();
}
rec.setStatus('L');
rec.store();
}
if (sumForHeader != 0.0f) {
rIt = records.iterator();
while (rIt.hasNext()) {
PaymentRecord rec = (PaymentRecord) rIt.next();
String ownPosting = rec.getOwnPosting();
String doublePosting = rec.getDoublePosting();
if (ownPosting != null) {
if (ownPostingMap.containsKey(ownPosting)) {
Float amount = (Float) ownPostingMap
.get(ownPosting);
ownPostingMap.put(ownPosting, new Float(amount.floatValue() + rec.getTotalAmount()));
} else {
ownPostingMap.put(ownPosting, new Float(rec.getTotalAmount()));
}
}
if (doublePosting != null) {
if (doublePostingMap
.containsKey(doublePosting)) {
Float amount = (Float) doublePostingMap
.get(doublePosting);
doublePostingMap.put(doublePosting, new Float(amount.floatValue() + rec.getTotalAmount()));
} else {
doublePostingMap.put(doublePosting, new Float(rec.getTotalAmount()));
}
}
}
}
}
}
header.setStatus('L');
header.store();
}
int numberOfLines = 0;
Iterator keys = ownPostingMap.keySet().iterator();
PostingBusiness pb = getRaindanceBusiness().getPostingBusiness();
StringBuffer paymentText = new StringBuffer("UTBETALN BOCHECK ");
paymentText.append(IWTimestamp.RightNow().getDateString("MMM yyyy"));
NumberFormat format = NumberFormat.getInstance(currentLocale);
format.setMaximumFractionDigits(0);
format.setMinimumFractionDigits(0);
format.setMaximumIntegerDigits(14);
format.setMinimumIntegerDigits(14);
format.setGroupingUsed(false);
while (keys.hasNext()) {
String ownPostingString = (String) keys.next();
Float amount = (Float) ownPostingMap
.get(ownPostingString);
bWriter.write("20");
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Verksamhet"), 5));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Motpart"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Objekt"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Projekt"), 6));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(ownPostingString,
"Aktivitet"), 4));
/* if (r.getTotalAmount() < 0.0f) {
bWriter.write("-");
} else {*/
bWriter.write("+");
//}
bWriter.write(format.format(Math.abs(Math.round(amount.floatValue()) * 100)));
bWriter.write(paymentText.toString());
bWriter.write(empty.substring(0, 5));
bWriter.newLine();
numberOfLines++;
}
keys = doublePostingMap.keySet().iterator();
while (keys.hasNext()) {
String doublePostingString = (String) keys.next();
Float amount = (Float) doublePostingMap
.get(doublePostingString);
bWriter.write("20");
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Verksamhet"), 5));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Motpart"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Objekt"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Projekt"), 6));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(doublePostingString,
"Aktivitet"), 4));
//if (r.getTotalAmount() < 0.0f) {
bWriter.write("-");
/*} else {
bWriter.write("+");
}*/
bWriter.write(format.format(Math.abs(Math.round(amount.floatValue()) * 100)));
bWriter.write(paymentText.toString());
bWriter.write(empty.substring(0, 5));
bWriter.newLine();
numberOfLines++;
}
bWriter.write("900");
bWriter.write(empty.substring(0, 17));
bWriter.write(getStringByLengthRightJustified(Integer.toString(numberOfLines), 5));
bWriter.write(empty.substring(0, 2));
bWriter.newLine();
bWriter.close();
}
try {
headers = ((PaymentHeaderHome) IDOLookup
.getHome(PaymentHeader.class))
.findBySchoolCategoryAndStatus(schoolCategory, 'P');
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
// Bookkeeping file
if (headers != null && !headers.isEmpty()) {
Iterator it = headers.iterator();
OutputStreamWriter sWriter = new OutputStreamWriter(new FileOutputStream(fileName2), "ISO-8859-1");
//FileWriter writer = new FileWriter(fileName2);
BufferedWriter bWriter = new BufferedWriter(sWriter);
PostingBusiness pb = getRaindanceBusiness().getPostingBusiness();
int numberOfHLines = 0;
int numberOfRLines = 0;
float totalInFile = 0.0f;
StringBuffer paymentText = new StringBuffer("UTBETALN BOCHECK ");
paymentText.append(IWTimestamp.RightNow().getDateString("MMM yyyy"));
NumberFormat format = NumberFormat.getInstance(currentLocale);
format.setMaximumFractionDigits(0);
format.setMinimumFractionDigits(0);
format.setGroupingUsed(false);
NumberFormat format14 = NumberFormat.getInstance(currentLocale);
format14.setMaximumFractionDigits(0);
format14.setMinimumFractionDigits(0);
format14.setMinimumIntegerDigits(14);
format14.setMaximumIntegerDigits(14);
format14.setGroupingUsed(false);
while (it.hasNext()) {
PaymentHeader header = (PaymentHeader) it.next();
Collection records = null;
try {
records = ((PaymentRecordHome) IDOLookup
.getHome(PaymentRecord.class))
.findByPaymentHeader(header);
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
float totalAmountPrHeader = 0.0f;
if (records != null && !records.isEmpty()) {
Iterator rIt = records.iterator();
while (rIt.hasNext()) {
PaymentRecord rec = (PaymentRecord) rIt.next();
if (rec.getTotalAmount() != 0.0f) {
totalAmountPrHeader += rec.getTotalAmount();
}
rec.setStatus('L');
rec.store();
}
}
if (totalAmountPrHeader != 0.0f) {
totalInFile += totalAmountPrHeader;
boolean isPostgiro = false;
boolean isBankgiro = false;
boolean isBKBankgiro = false;
String giroString = null;
String ownPostingString = null;
if (header.getSchool() != null) {
Provider provider = getRaindanceBusiness()
.getProviderBusiness().getProvider(
header.getSchoolID());
if (provider.getAccountingProperties().getBankgiro() != null) {
giroString = provider.getAccountingProperties().getBankgiro();
if (giroString.startsWith("bk")) {
isBKBankgiro = true;
giroString = giroString.substring(2);
} else {
isBankgiro = true;
}
}
if (provider.getAccountingProperties().getPostgiro() != null) {
giroString = provider.getAccountingProperties().getPostgiro();
isPostgiro = true;
}
ownPostingString = provider.getOwnPosting();
}
if (giroString == null) {
giroString = "";
}
if (ownPostingString == null) {
ownPostingString = "";
}
bWriter.write("H");
if (isBKBankgiro) {
bWriter.write(empty.substring(0, 11));
bWriter.write(empty.substring(0, 9));
} else {
giroString = getStringByLengthLeftJustified(giroString.toUpperCase(), 11);
bWriter.write(giroString);
bWriter.write(giroString.substring(0, 9));
}
if (header.getSchool().getOrganizationNumber() != null) {
bWriter.write(getStringByLengthLeftJustified(header.getSchool().getOrganizationNumber().toUpperCase(), 10));
} else {
bWriter.write(getStringByLengthLeftJustified("", 10));
}
if (header.getSchool().getName() != null) {
bWriter.write(getStringByLengthLeftJustified(header.getSchool().getName().toUpperCase(), 35));
} else {
bWriter.write(getStringByLengthLeftJustified("", 35));
}
if (header.getSchool().getSchoolAddress() != null) {
bWriter.write(getStringByLengthLeftJustified(header.getSchool().getSchoolAddress().toUpperCase(), 35));
} else {
bWriter.write(getStringByLengthLeftJustified("", 35));
}
StringBuffer zip = new StringBuffer(header.getSchool().getSchoolZipCode());
zip.append(" ");
zip.append(header.getSchool().getSchoolZipArea());
bWriter.write(getStringByLengthLeftJustified(zip.toString().toUpperCase(), 35));
String postingString = pb.findFieldInStringByName(ownPostingString, "Motpart");
if (postingString == null) {
postingString = "";
}
bWriter.write(getStringByLengthLeftJustified(postingString.toUpperCase(), 3));
bWriter.write(executionDate.getDateString("yyyyMM01"));
bWriter.write(paymentDate.getDateString("yyyyMMdd"));
bWriter.write(getStringByLengthLeftJustified(paymentText.toString().toUpperCase(), 30));
if (totalAmountPrHeader < 0.0f) {
bWriter.write("-");
} else {
bWriter.write("+");
}
bWriter.write(format14.format(Math.abs(totalAmountPrHeader * 100)));
bWriter.write(empty.substring(0, 1));
if (isPostgiro) {
bWriter.write("PG1");
} else if (isBankgiro) {
bWriter.write("BG1");
} else if (isBKBankgiro) {
bWriter.write("BG2");
}
bWriter.write(empty.substring(0, 1));
if (isBKBankgiro) {
bWriter.write("J");
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(giroString.toUpperCase(), 16));
} else {
bWriter.write(empty.substring(0, 1));
bWriter.write(empty.substring(0, 1));
bWriter.write(empty.substring(0, 16));
}
bWriter.newLine();
numberOfHLines++;
Iterator rIt = records.iterator();
while (rIt.hasNext()) {
PaymentRecord rec = (PaymentRecord) rIt.next();
bWriter.write("R");
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Verksamhet"), 5));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Motpart"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Objekt"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Projekt"), 6));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(rec.getOwnPosting(), "Aktivitet"), 4));
if (rec.getTotalAmount() < 0.0f) {
bWriter.write("-");
} else {
bWriter.write("+");
}
bWriter.write(format14.format(Math.abs(rec.getTotalAmount()) * 100));
bWriter.newLine();
numberOfRLines++;
}
}
header.setStatus('L');
header.store();
}
bWriter.write("S");
bWriter.write(getStringByLengthRightJustified(Integer.toString(numberOfHLines), 5));
bWriter.write(getStringByLengthRightJustified(format.format(totalInFile * 100), 20));
bWriter.write(getStringByLengthRightJustified(Integer.toString(numberOfRLines), 5));
bWriter.newLine();
bWriter.close();
}
}
private String getStringByLengthLeftJustified(String original, int length) {
if (original == null) {
original = "";
}
if (original.length() < length) {
StringBuffer p = new StringBuffer(original);
while (p.length() < length) {
p.append(' ');
}
return p.toString();
} else if (original.length() > length) {
return original.substring(0, length);
}
original = original.toUpperCase();
return original;
}
private String getStringByLengthRightJustified(String original, int length) {
if (original == null) {
original = "";
}
if (original.length() < length) {
StringBuffer p = new StringBuffer(original);
while (p.length() < length) {
p.insert(0, ' ');
}
return p.toString();
} else if (original.length() > length) {
return original.substring(0, length);
}
original = original.toUpperCase();
return original;
}
private void createInvoiceFiles(String fileName1, String schoolCategory, Locale currentLocale,
RaindanceCheckHeader checkHeader, ExportDataMapping mapping) throws IOException {
Collection iHeaders = null;
try {
iHeaders = ((InvoiceHeaderHome) IDOLookup
.getHome(InvoiceHeader.class)).findByStatusAndCategory("P",
schoolCategory);
} catch (IDOLookupException e2) {
e2.printStackTrace();
} catch (FinderException e2) {
e2.printStackTrace();
}
StringBuffer empty = new StringBuffer("");
for (int i = 0; i < 25; i++) {
empty.append(" ");
}
if (iHeaders != null && !iHeaders.isEmpty()) {
NumberFormat format11 = NumberFormat.getInstance(currentLocale);
format11.setMaximumFractionDigits(0);
format11.setMinimumFractionDigits(0);
format11.setMinimumIntegerDigits(11);
format11.setMaximumIntegerDigits(11);
format11.setGroupingUsed(false);
NumberFormat format15 = NumberFormat.getInstance(currentLocale);
format15.setMaximumFractionDigits(0);
format15.setMinimumFractionDigits(0);
format15.setMinimumIntegerDigits(15);
format15.setMaximumIntegerDigits(15);
format15.setGroupingUsed(false);
NumberFormat format6 = NumberFormat.getInstance(currentLocale);
format6.setMaximumFractionDigits(0);
format6.setMinimumFractionDigits(0);
format6.setMinimumIntegerDigits(6);
format6.setMaximumIntegerDigits(6);
format6.setGroupingUsed(false);
NumberFormat format10 = NumberFormat.getInstance(currentLocale);
format10.setMaximumFractionDigits(0);
format10.setMinimumFractionDigits(0);
format10.setMinimumIntegerDigits(10);
format10.setMaximumIntegerDigits(10);
format10.setGroupingUsed(false);
NumberFormat format14 = NumberFormat.getInstance(currentLocale);
format14.setMaximumFractionDigits(0);
format14.setMinimumFractionDigits(0);
format14.setMinimumIntegerDigits(14);
format14.setMaximumIntegerDigits(14);
format14.setGroupingUsed(false);
OutputStreamWriter sWriter = new OutputStreamWriter(new FileOutputStream(fileName1), "ISO-8859-1");
//FileWriter writer = new FileWriter(fileName1);
BufferedWriter bWriter = new BufferedWriter(sWriter);
PostingBusiness pb = getRaindanceBusiness().getPostingBusiness();
int numberOfSLines = 0;
int numberOfRLines = 0;
float total = 0.0f;
Iterator ihIt = iHeaders.iterator();
while (ihIt.hasNext()) {
InvoiceHeader iHead = (InvoiceHeader) ihIt.next();
Collection records = null;
try {
records = ((InvoiceRecordHome) IDOLookup
.getHome(InvoiceRecord.class))
.findByInvoiceHeader(iHead);
} catch (IDOLookupException e3) {
e3.printStackTrace();
} catch (FinderException e3) {
e3.printStackTrace();
}
boolean createInvoice = false;
Iterator itRec = records.iterator();
float sum = 0.0f;
while (itRec.hasNext()) {
InvoiceRecord rec = (InvoiceRecord) itRec.next();
sum += rec.getAmount();
}
if (sum >= mapping.getInvoiceLimit()) {
createInvoice = true;
}
try {
User custodian = iHead.getCustodian();
if (custodian == null) {
throw new MissingCustodianException(
"Raindance_missing_custodian",
"Missing custodian");
}
Address mainAddress = getRaindanceBusiness()
.getUserBusiness().getUsersMainAddress(
iHead.getCustodian());
if (mainAddress == null) {
throw new MissingAddressException(
"Raindance_missing_address", "Missing address");
}
PostalCode poCode = mainAddress.getPostalCode();
if (poCode == null) {
throw new MissingPostalCodeException(
"Raindance_missing_postalcode",
"Missing postalcode");
}
if (records != null && !records.isEmpty() && createInvoice) {
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("S ");
String pnr = custodian.getPersonalID();
if (pnr.length() == 12) {
pnr = pnr.substring(2);
}
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
StringBuffer name = new StringBuffer(custodian.getLastName());
name.append(" ");
name.append(custodian.getFirstName());
bWriter.write(getStringByLengthLeftJustified(name.toString().toUpperCase(), 72));
if (mainAddress.getStreetAddress() != null) {
bWriter.write(getStringByLengthLeftJustified(mainAddress.getStreetAddress().toUpperCase(), 36));
} else {
bWriter.write(getStringByLengthLeftJustified("", 36));
}
StringBuffer po = new StringBuffer(poCode.getPostalCode());
po.append(" ");
po.append(poCode.getName());
bWriter.write(getStringByLengthLeftJustified(po.toString(), 35));
bWriter.newLine();
numberOfSLines++;
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("H ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 70));
bWriter.write("09");
bWriter.write(empty.substring(0, 6));
bWriter.newLine();
Iterator irIt = records.iterator();
HashMap map = new HashMap();
HashMap regular = new HashMap();
while (irIt.hasNext()) {
InvoiceRecord iRec = (InvoiceRecord) irIt.next();
if (iRec.getAmount() != 0.0f) {
if (iRec.getChildCareContract() != null) {
boolean addRecord = false;
if (iRec.getProvider() == null) {
addRecord = true;
} else {
Provider provider = getRaindanceBusiness()
.getProviderBusiness()
.getProvider(
iRec.getProviderId());
if (provider.getAccountingProperties()
.getCreateInvoiceRecord()) {
addRecord = true;
}
}
if (addRecord) {
if (map.containsKey(iRec
.getChildCareContract()
.getPrimaryKey())) {
InvoiceRecord r = (InvoiceRecord) map
.get(iRec
.getChildCareContract()
.getPrimaryKey());
r.setAmount(r.getAmount()
+ iRec.getAmount());
map.put(iRec.getChildCareContract()
.getPrimaryKey(), r);
} else {
map.put(iRec.getChildCareContract()
.getPrimaryKey(), iRec);
}
}
} else {
if (regular.containsKey(iRec
.getSchoolClassMember()
.getPrimaryKey())) {
ArrayList regList = (ArrayList) regular
.get(iRec
.getSchoolClassMember()
.getPrimaryKey());
regList.add(iRec);
regular.put(iRec.getSchoolClassMember()
.getPrimaryKey(), regList);
} else {
ArrayList regList = new ArrayList();
regList.add(iRec);
regular.put(iRec.getSchoolClassMember()
.getPrimaryKey(), regList);
}
}
}
}
Iterator recordIterator = map.keySet().iterator();
while (recordIterator.hasNext()) {
InvoiceRecord r = (InvoiceRecord) map
.get(recordIterator.next());
if (r.getAmount() != 0.0f) {
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("R ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
StringBuffer responsibleString = new StringBuffer();
User resp = r.getProvider().getResponsibleUser();
if (resp != null) {
responsibleString.append(resp.getFirstName());
responsibleString.append(" ");
responsibleString.append(resp.getLastName());
Phone phone = getUserBusiness().getUserPhone(((Integer)resp.getPrimaryKey()).intValue(), 2);
if (phone != null) {
responsibleString.append(" ");
responsibleString.append(phone.getNumber());
}
}
bWriter.write(getStringByLengthLeftJustified(responsibleString.toString(), 36));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format15.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Verksamhet"), 5));
bWriter.write(empty.substring(0, 26));
bWriter.newLine();
numberOfRLines++;
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("R ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
StringBuffer childString = new StringBuffer();
User child = r.getSchoolClassMember().getStudent();
if (child != null) {
childString.append(child.getFirstName());
if (this.periodText != null) {
childString.append(", ");
childString.append(this.periodText);
}
}
bWriter.write(getStringByLengthLeftJustified(childString.toString(), 36));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format15.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Verksamhet"), 5));
bWriter.write(empty.substring(0, 26));
bWriter.newLine();
numberOfRLines++;
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("R ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(r.getRuleText(), 36));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
if (r.getAmount() < 0.0f) {
bWriter.write("-");
} else {
bWriter.write("0");
}
bWriter.write(format14.format(Math.abs(r.getAmount() * 100)));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(r.getOwnPosting(),
"Verksamhet"), 5));
bWriter.write(empty.substring(0, 26));
bWriter.newLine();
numberOfRLines++;
total += r.getAmount();
if (regular
.containsKey(r.getSchoolClassMember()
.getPrimaryKey())) {
ArrayList regList = (ArrayList) regular
.get(r.getSchoolClassMember()
.getPrimaryKey());
Iterator regit = regList.iterator();
while (regit.hasNext()) {
InvoiceRecord regRecord = (InvoiceRecord) regit
.next();
if (regRecord.getAmount() != 0.0f) {
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("R ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(regRecord.getNotes(), 36));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
if (regRecord.getAmount() < 0.0f) {
bWriter.write("-");
} else {
bWriter.write("0");
}
bWriter.write(format14.format(Math.abs(regRecord.getAmount() * 100)));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Verksamhet"), 5));
bWriter.write(empty.substring(0, 26));
bWriter.newLine();
numberOfRLines++;
total += regRecord.getAmount();
}
}
regular.remove(r.getSchoolClassMember()
.getPrimaryKey());
}
}
}
Iterator regularIt = regular.keySet().iterator();
while (regularIt.hasNext()) {
ArrayList regList = (ArrayList) regular
.get(regularIt.next());
Iterator regit = regList.iterator();
while (regit.hasNext()) {
InvoiceRecord regRecord = (InvoiceRecord) regit
.next();
if (regRecord.getAmount() != 0.0f) {
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("R ");
bWriter.write(getStringByLengthLeftJustified(pnr, 10));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(regRecord.getNotes(), 36));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
bWriter.write(format11.format(0));
bWriter.write(empty.substring(0, 1));
if (regRecord.getAmount() < 0.0f) {
bWriter.write("-");
} else {
bWriter.write("0");
}
bWriter.write(format14.format(Math.abs(regRecord.getAmount() * 100)));
bWriter.write(empty.substring(0, 1));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Ansvar"), 3));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Konto"), 7));
bWriter.write(getStringByLengthLeftJustified(pb.findFieldInStringByName(regRecord.getOwnPosting(),
"Verksamhet"), 5));
bWriter.write(empty.substring(0, 26));
bWriter.newLine();
numberOfRLines++;
total += regRecord.getAmount();
}
}
}
}
iHead.setStatus('L');
iHead.store();
} catch (MissingCustodianException e) {
RaindanceCheckRecordHome home = getRaindanceCheckRecordHome();
if (home != null) {
try {
RaindanceCheckRecord Raindance_rec = home.create();
Raindance_rec.setHeader(checkHeader);
if (e.getTextKey() != null && e.getTextKey().length() > 255) {
Raindance_rec.setError(e.getTextKey().substring(0, 255));
} else {
Raindance_rec.setError(e.getTextKey());
}
Raindance_rec.setErrorConcerns("Faktura "
+ ((Integer) iHead.getPrimaryKey())
.toString());
Raindance_rec.store();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} catch (MissingAddressException e) {
RaindanceCheckRecordHome home = getRaindanceCheckRecordHome();
if (home != null) {
try {
RaindanceCheckRecord Raindance_rec = home.create();
Raindance_rec.setHeader(checkHeader);
if (e.getTextKey() != null && e.getTextKey().length() > 255) {
Raindance_rec.setError(e.getTextKey().substring(0, 255));
} else {
Raindance_rec.setError(e.getTextKey());
}
Raindance_rec.setErrorConcerns("Fakturamottagare "
+ iHead.getCustodian().getPersonalID());
Raindance_rec.store();
} catch (Exception e1) {
e1.printStackTrace();
}
}
} catch (MissingPostalCodeException e) {
RaindanceCheckRecordHome home = getRaindanceCheckRecordHome();
if (home != null) {
try {
RaindanceCheckRecord Raindance_rec = home.create();
Raindance_rec.setHeader(checkHeader);
if (e.getTextKey() != null && e.getTextKey().length() > 255) {
Raindance_rec.setError(e.getTextKey().substring(0, 255));
} else {
Raindance_rec.setError(e.getTextKey());
}
Raindance_rec.setErrorConcerns("Fakturamottagare "
+ iHead.getCustodian().getPersonalID());
Raindance_rec.store();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
// Posttyp
bWriter.write("IST");
bWriter.write(empty.substring(0, 4));
bWriter.write("T ");
bWriter.write(format6.format(numberOfSLines));
bWriter.write(empty.substring(0, 1));
bWriter.write(format6.format(numberOfRLines));
bWriter.write(empty.substring(0, 1));
bWriter.write(format10.format(total * 100));
bWriter.newLine();
bWriter.close();
}
}
private RaindanceBusiness getRaindanceBusiness() {
try {
return (RaindanceBusiness) IBOLookup.getServiceInstance(iwac,
RaindanceBusiness.class);
} catch (RemoteException e) {
throw new IBORuntimeException(e.getMessage());
}
}
private UserBusiness getUserBusiness() {
try {
return (UserBusiness) IBOLookup.getServiceInstance(iwac,
UserBusiness.class);
} catch (RemoteException e) {
throw new IBORuntimeException(e.getMessage());
}
}
private CommuneBusiness getCommuneBusiness() {
try {
return (CommuneBusiness) IBOLookup.getServiceInstance(iwac,
CommuneBusiness.class);
} catch (RemoteException e) {
throw new IBORuntimeException(e.getMessage());
}
}
private RaindanceCheckRecordHome getRaindanceCheckRecordHome() {
try {
return (RaindanceCheckRecordHome) IDOLookup
.getHome(RaindanceCheckRecord.class);
} catch (IDOLookupException e) {
e.printStackTrace();
}
return null;
}
}