/*
* Copyright (C) 2003 Idega software. All Rights Reserved.
*
* This software is the proprietary information of Idega software. Use is
* subject to license terms.
*
*/
package se.idega.idegaweb.commune.accounting.export.ifs.business;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.rmi.RemoteException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import se.idega.idegaweb.commune.accounting.business.AccountingUtil;
import se.idega.idegaweb.commune.accounting.export.business.MissingPostalCodeException;
import se.idega.idegaweb.commune.accounting.export.business.MissingAddressException;
import se.idega.idegaweb.commune.accounting.export.business.MissingCheckTaxaException;
import se.idega.idegaweb.commune.accounting.export.business.MissingCustodianException;
import se.idega.idegaweb.commune.accounting.export.data.ExportDataMapping;
import se.idega.idegaweb.commune.accounting.export.ifs.data.IFSCheckHeader;
import se.idega.idegaweb.commune.accounting.export.ifs.data.IFSCheckHeaderHome;
import se.idega.idegaweb.commune.accounting.export.ifs.data.IFSCheckRecord;
import se.idega.idegaweb.commune.accounting.export.ifs.data.IFSCheckRecordHome;
import se.idega.idegaweb.commune.accounting.export.ifs.data.JournalLog;
import se.idega.idegaweb.commune.accounting.export.ifs.data.JournalLogHome;
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.business.ProviderBusiness;
import se.idega.idegaweb.commune.accounting.school.data.Provider;
import com.idega.block.school.data.School;
import com.idega.block.school.data.SchoolCategory;
import com.idega.business.IBOLookup;
import com.idega.business.IBORuntimeException;
import com.idega.core.location.data.Address;
import com.idega.core.location.data.PostalCode;
import com.idega.data.IDOException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.user.data.User;
import com.idega.util.IWTimestamp;
/**
* @author palli
*/
public class IFSFileCreationThread 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;
private final static String IW_BUNDLE_IDENTIFIER = "se.idega.idegaweb.commune.accounting";
private IFSCreateExcelFileUtil excelFileUtil = null;
/**
* Default constructor for the thread.
*
* @param schoolCategory
* @param paymentDate
* @param periodText
* @param user
* @param currentLocale
* @param iwac
*/
public IFSFileCreationThread(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 IFSCreateExcelFileUtil(iwac, paymentDate);
IWTimestamp now = IWTimestamp.RightNow();
JournalLog log;
try {
log = ((JournalLogHome) IDOLookup.getHome(JournalLog.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();
}
IFSCheckHeader header = null;
try {
header = getIFSBusiness().getIFSCheckHeaderBySchoolCategory(schoolCategory);
}
catch (RemoteException e) {
}
if (header == null) {
try {
header = ((IFSCheckHeaderHome) IDOLookup.getHome(IFSCheckHeader.class)).create();
}
catch (IDOLookupException e1) {
e1.printStackTrace();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
else {
Collection col = null;
try {
col = getIFSBusiness().getIFSCheckRecordByHeaderId(((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()) {
IFSCheckRecord rec = (IFSCheckRecord) 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 = getIFSBusiness().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 = getIFSBusiness().getSchoolBusiness().getCategoryChildcare();
}
catch (RemoteException e2) {
e2.printStackTrace();
}
SchoolCategory school = null;
try {
school = getIFSBusiness().getSchoolBusiness().getCategoryElementarySchool();
}
catch (RemoteException e3) {
e3.printStackTrace();
}
SchoolCategory highSchool = null;
try {
highSchool = getIFSBusiness().getSchoolBusiness().getCategoryHighSchool();
}
catch (RemoteException e4) {
e4.printStackTrace();
}
StringBuffer fileName1 = null;
StringBuffer fileName2 = null;
StringBuffer fileName3 = null;
StringBuffer fileName4 = null;
StringBuffer fileName5 = null;
StringBuffer fileName6 = null;
StringBuffer fileName7 = null;
StringBuffer fileName8 = null;
StringBuffer fileName9 = null;
if (childCare != null && (fileFolder != null || listFolder != null) && school != null && highSchool != null) {
if (schoolCategory.equals(childCare.getPrimaryKey())) {
if (fileFolder != null) {
fileName1 = new StringBuffer(fileFolder);
fileName1.append("n24_ifs_hvd_bom_");
fileName2 = new StringBuffer(fileFolder);
fileName2.append("n24_ifs_lev_bom_");
fileName3 = new StringBuffer(fileFolder);
fileName3.append("n24_ifs_knd_bom_");
fileName1.append(now.getDateString("yyMMdd_HHmm"));
fileName2.append(now.getDateString("yyMMdd_HHmm"));
fileName3.append(now.getDateString("yyMMdd_HHmm"));
}
if (listFolder != null) {
fileName4 = new StringBuffer(listFolder);
fileName4.append("n24_kontrollista_hvd_bom_");
fileName5 = new StringBuffer(listFolder);
fileName5.append("n24_kontrollista_lev_bom_");
fileName6 = new StringBuffer(listFolder);
fileName6.append("n24_attestlista_lev_bom_");
fileName7 = new StringBuffer(listFolder);
fileName7.append("n24_attestlista_knd_bom_");
fileName8 = new StringBuffer(listFolder);
fileName8.append("n24_avvikelselista_knd_bom_");
fileName9 = new StringBuffer(listFolder);
fileName9.append("n24_kommun_bom_");
fileName4.append(now.getDateString("yyMMdd_HHmm"));
fileName5.append(now.getDateString("yyMMdd_HHmm"));
fileName6.append(now.getDateString("yyMMdd_HHmm"));
fileName7.append(now.getDateString("yyMMdd_HHmm"));
fileName8.append(now.getDateString("yyMMdd_HHmm"));
fileName9.append(now.getDateString("yyMMdd_HHmm"));
}
try {
createPaymentFiles(fileName1.toString(), fileName2.toString(), fileName4.toString(),
fileName5.toString(), fileName6.toString(), fileName9.toString(), schoolCategory, now,
paymentDate);
}
catch (IOException e5) {
e5.printStackTrace();
}
try {
createInvoiceFiles(fileName3.toString(), fileName7.toString(), fileName8.toString(),
schoolCategory, now, currentLocale, header);
}
catch (IOException e6) {
e6.printStackTrace();
}
}
else if (schoolCategory.equals(school.getPrimaryKey())) {
if (fileFolder != null) {
fileName1 = new StringBuffer(fileFolder);
fileName1.append("n24_ifs_hvd_gsk_");
fileName2 = new StringBuffer(fileFolder);
fileName2.append("n24_ifs_lev_gsk_");
fileName1.append(now.getDateString("yyMMdd_HHmm"));
fileName2.append(now.getDateString("yyMMdd_HHmm"));
}
if (listFolder != null) {
fileName4 = new StringBuffer(listFolder);
fileName4.append("n24_kontrollista_hvd_gsk_");
fileName5 = new StringBuffer(listFolder);
fileName5.append("n24_kontrollista_lev_gsk_");
fileName6 = new StringBuffer(listFolder);
fileName6.append("n24_attestlista_lev_gsk_");
fileName9 = new StringBuffer(listFolder);
fileName9.append("n24_kommun_gsk_");
fileName4.append(now.getDateString("yyMMdd_HHmm"));
fileName5.append(now.getDateString("yyMMdd_HHmm"));
fileName6.append(now.getDateString("yyMMdd_HHmm"));
fileName9.append(now.getDateString("yyMMdd_HHmm"));
}
try {
createPaymentFiles(fileName1.toString(), fileName2.toString(), fileName4.toString(),
fileName5.toString(), fileName6.toString(), fileName9.toString(), schoolCategory, now,
paymentDate);
}
catch (IOException e5) {
e5.printStackTrace();
}
}
else if (schoolCategory.equals(highSchool.getPrimaryKey())) {
if (fileFolder != null) {
fileName1 = new StringBuffer(fileFolder);
fileName1.append("n24_ifs_hvd_gym_");
fileName2 = new StringBuffer(fileFolder);
fileName2.append("n24_ifs_lev_gym_");
fileName1.append(now.getDateString("yyMMdd_HHmm"));
fileName2.append(now.getDateString("yyMMdd_HHmm"));
}
if (listFolder != null) {
fileName4 = new StringBuffer(listFolder);
fileName4.append("n24_kontrollista_hvd_gym_");
fileName5 = new StringBuffer(listFolder);
fileName5.append("n24_kontrollista_lev_gym_");
fileName6 = new StringBuffer(listFolder);
fileName6.append("n24_attestlista_lev_gym_");
fileName9 = new StringBuffer(listFolder);
fileName9.append("n24_kommun_gym_");
fileName4.append(now.getDateString("yyMMdd_HHmm"));
fileName5.append(now.getDateString("yyMMdd_HHmm"));
fileName6.append(now.getDateString("yyMMdd_HHmm"));
fileName9.append(now.getDateString("yyMMdd_HHmm"));
}
try {
createPaymentFiles(fileName1.toString(), fileName2.toString(), fileName4.toString(),
fileName5.toString(), fileName6.toString(), fileName9.toString(), schoolCategory, now,
paymentDate);
}
catch (IOException e5) {
e5.printStackTrace();
}
}
}
now = IWTimestamp.RightNow();
header.setEventEndTime(now.getTimestamp());
header.store();
}
private void createPaymentFiles(String fileName1, String fileName2, String fileName3, String fileName4,
String fileName5, String fileName6, String schoolCategory, IWTimestamp executionDate,
IWTimestamp paymentDate) throws IOException {
String localizedSchoolCategoryName = iwac.getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER).getResourceBundle(
currentLocale).getLocalizedString("school_category." + schoolCategory);
Collection phInCommune = null;
try {
phInCommune = ((PaymentHeaderHome) IDOLookup.getHome(PaymentHeader.class)).findBySchoolCategoryStatusInCommuneWithCommunalManagement(
schoolCategory, 'P');
}
catch (IDOLookupException e) {
e.printStackTrace();
}
catch (FinderException e) {
e.printStackTrace();
}
Collection phOutsideCommune = null;
try {
phOutsideCommune = ((PaymentHeaderHome) IDOLookup.getHome(PaymentHeader.class)).findBySchoolCategoryStatusOutsideCommuneOrWithoutCommunalManagement(
schoolCategory, 'P');
}
catch (IDOLookupException e1) {
e1.printStackTrace();
}
catch (FinderException e1) {
e1.printStackTrace();
}
if (phInCommune != null && !phInCommune.isEmpty()) {
Collection rec = null;
try {
rec = ((PaymentRecordHome) IDOLookup.getHome(PaymentRecord.class)).findByPaymentHeaders(phInCommune);
}
catch (IDOLookupException e2) {
e2.printStackTrace();
}
catch (FinderException e2) {
e2.printStackTrace();
}
try {
excelFileUtil.createPaymentFilesExcel(rec, fileName3 + ".xls", "Checkutbetalning " + localizedSchoolCategoryName
+ ", egna kommunala anordnare, " + executionDate.getDateString("yyyy-MM-dd"),
IFSCreateExcelFileUtil.FILE_TYPE_DOUBLE_POSTING);
excelFileUtil.createPaymentFilesExcel(rec, fileName6 + ".xls", "Utbetalningsattestlista "
+ localizedSchoolCategoryName + ", egna kommunala anordnare, "
+ executionDate.getDateString("yyyy-MM-dd"), IFSCreateExcelFileUtil.FILE_TYPE_KOMMUN);
}
catch (IOException e3) {
e3.printStackTrace();
}
Collection phAll = new ArrayList();
phAll.addAll(phOutsideCommune);
phAll.addAll(phInCommune);
try {
excelFileUtil.createPaymentSigningFilesExcel(phAll, fileName5 + ".xls", "Utbetalningsattestlista "
+ localizedSchoolCategoryName + ", " + executionDate.getDateString("yyyy-MM-dd"));
}
catch (IOException e3) {
e3.printStackTrace();
}
catch (FinderException e3) {
e3.printStackTrace();
}
Iterator it = rec.iterator();
FileWriter writer = null;
try {
writer = new FileWriter(fileName1);
}
catch (IOException e4) {
e4.printStackTrace();
}
BufferedWriter bWriter = new BufferedWriter(writer);
PostingBusiness pb = getIFSBusiness().getPostingBusiness();
while (it.hasNext()) {
PaymentRecord pRec = (PaymentRecord) it.next();
if (pRec.getTotalAmount() != 0.0f) {
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyyy"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Konto"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Ansvar"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Resurs"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Verksamhet"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Aktivitet"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Projekt"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Objekt"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getOwnPosting(), "Motpart"));
bWriter.write(";");
// anlaggningsnummer
bWriter.write(";");
// internranta
bWriter.write(";");
bWriter.write("SEK");
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(Integer.toString(Math.round(pRec.getTotalAmount())));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(Integer.toString(Math.round(pRec.getTotalAmount())));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyMM") + " " + pRec.getPaymentText());
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(paymentDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.newLine();
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyyy"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Konto"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Ansvar"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Resurs"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Verksamhet"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Aktivitet"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Projekt"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Objekt"));
bWriter.write(";");
bWriter.write(pb.findFieldInStringByName(pRec.getDoublePosting(), "Motpart"));
bWriter.write(";");
// anlaggningsnummer
bWriter.write(";");
// internranta
bWriter.write(";");
bWriter.write("SEK");
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(Integer.toString(Math.round(-pRec.getTotalAmount())));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(Integer.toString(Math.round(-pRec.getTotalAmount())));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyMM") + " " + pRec.getPaymentText());
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.write(paymentDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
// empty
bWriter.write(";");
// empty
bWriter.write(";");
bWriter.newLine();
}
pRec.setStatus('L');
pRec.store();
}
bWriter.close();
Iterator itor = phInCommune.iterator();
while (itor.hasNext()) {
PaymentHeader head = (PaymentHeader) itor.next();
head.setStatus('L');
head.store();
}
}
if (phOutsideCommune != null && !phOutsideCommune.isEmpty()) {
NumberFormat format = NumberFormat.getInstance(currentLocale);
format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(2);
format.setMinimumIntegerDigits(1);
format.setGroupingUsed(false);
// format.
Collection recOutside = null;
try {
recOutside = ((PaymentRecordHome) IDOLookup.getHome(PaymentRecord.class)).findByPaymentHeaders(phOutsideCommune);
}
catch (IDOLookupException e2) {
e2.printStackTrace();
}
catch (FinderException e2) {
e2.printStackTrace();
}
try {
excelFileUtil.createPaymentFilesExcel(recOutside, fileName4 + ".xls", "Checkutbetalning "
+ localizedSchoolCategoryName + ", �vriga anordnare, "
+ executionDate.getDateString("yyyy-MM-dd"), IFSCreateExcelFileUtil.FILE_TYPE_OWN_POSTING);
}
catch (IOException e3) {
e3.printStackTrace();
}
catch (Exception e3) {
e3.printStackTrace();
}
FileWriter writer = new FileWriter(fileName2);
BufferedWriter bWriter = new BufferedWriter(writer);
PostingBusiness pb = getIFSBusiness().getPostingBusiness();
ProviderBusiness provBiz = getIFSBusiness().getProviderBusiness();
Iterator phIt = phOutsideCommune.iterator();
while (phIt.hasNext()) {
PaymentHeader pHead = (PaymentHeader) phIt.next();
School school = pHead.getSchool();
Provider prov = null;
try {
prov = provBiz.getProvider(pHead.getSchoolID());
}
catch (RemoteException e4) {
e4.printStackTrace();
}
Collection rec = null;
try {
rec = ((PaymentRecordHome) IDOLookup.getHome(PaymentRecord.class)).findByPaymentHeader(pHead);
}
catch (IDOLookupException e3) {
e3.printStackTrace();
}
catch (FinderException e3) {
e3.printStackTrace();
}
if (rec != null && !rec.isEmpty()) {
Iterator prIt = rec.iterator();
Iterator sumIt = rec.iterator();
long sum = 0;
while (sumIt.hasNext()) {
PaymentRecord r = (PaymentRecord) sumIt.next();
sum += AccountingUtil.roundAmount(r.getTotalAmount());
}
String giro = prov.getAccountingProperties().getBankgiro();
if (giro == null)
giro = prov.getAccountingProperties().getPostgiro();
if (giro == null)
giro = "";
bWriter.write("H");
bWriter.write(";");
bWriter.write(giro);
bWriter.write(";");
bWriter.write(((Integer) pHead.getPrimaryKey()).toString());
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
bWriter.write("SUPPEXT");
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
bWriter.write(executionDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
bWriter.write(paymentDate.getDateString("yyyy-MM-dd"));
bWriter.write(";");
bWriter.write(Integer.toString(AccountingUtil.getDayDiff(executionDate, paymentDate) + 1));
bWriter.write(";");
bWriter.write("SEK");
bWriter.write(";");
// empty
bWriter.write("-");
bWriter.write(";");
bWriter.write("*");
bWriter.write(";");
for (int i = 13; i < 55; i++)
bWriter.write("-;");
bWriter.write("-");
bWriter.newLine();
bWriter.write("I");
bWriter.write(";");
bWriter.write(giro);
bWriter.write(";");
bWriter.write(((Integer) pHead.getPrimaryKey()).toString());
bWriter.write(";");
bWriter.write("1");
bWriter.write(";");
// VAT code, changed L6 to 11...
bWriter.write("11");
bWriter.write(";");
bWriter.write(format.format(sum));
bWriter.write(";");
bWriter.write(format.format(sum));
bWriter.write(";");
bWriter.write("0,00");
bWriter.write(";");
bWriter.write("0,00");
bWriter.write(";");
for (int i = 10; i < 23; i++)
bWriter.write("-;");
bWriter.write("-");
bWriter.newLine();
int row = 1;
while (prIt.hasNext()) {
PaymentRecord pRec = (PaymentRecord) prIt.next();
if (pRec.getTotalAmount() != 0.0f) {
bWriter.write("P");
bWriter.write(";");
bWriter.write(giro);
bWriter.write(";");
bWriter.write(((Integer) pHead.getPrimaryKey()).toString());
bWriter.write(";");
bWriter.write("1");
bWriter.write(";");
bWriter.write(Integer.toString(row));
row++;
bWriter.write(";");
String tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Konto");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Ansvar");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Resurs");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Verksamhet");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Aktivitet");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Projekt");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Objekt");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
tmp = pb.findFieldInStringByName(pRec.getOwnPosting(), "Motpart");
if ("".equals(tmp))
bWriter.write("-");
else
bWriter.write(tmp);
bWriter.write(";");
// anlaggningsnummer
bWriter.write("-");
bWriter.write(";");
// internranta
bWriter.write("-");
bWriter.write(";");
// empty
bWriter.write("-");
bWriter.write(";");
bWriter.write(format.format(AccountingUtil.roundAmount(pRec.getTotalAmount())));
bWriter.write(";");
bWriter.write(format.format(AccountingUtil.roundAmount(pRec.getTotalAmount())));
bWriter.write(";");
// empty
bWriter.write("-");
bWriter.write(";");
// empty
bWriter.write("-");
bWriter.write(";");
bWriter.write(school.getName() + ", " + pRec.getPaymentText());
bWriter.write(";");
bWriter.write("-");
bWriter.newLine();
}
pRec.setStatus('L');
pRec.store();
}
}
pHead.setStatus('L');
pHead.store();
}
bWriter.close();
}
}
private void createInvoiceFiles(String fileName1, String fileName2, String fileName3, String schoolCategory,
IWTimestamp executionDate, Locale currentLocale, IFSCheckHeader checkHeader) 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();
}
try {
excelFileUtil.createInvoiceSigningFilesExcel(fileName2 + ".xls", "Faktureringsattestlista Barnomsorg, "
+ executionDate.getDateString("yyyy-MM-dd"), true);
}
catch (IOException e3) {
e3.printStackTrace();
}
catch (IDOException e3) {
e3.printStackTrace();
}
try {
excelFileUtil.createDeviationFileExcel(iHeaders, fileName3 + ".xls", "Faktureringsavvikelselista Barnomsorg, "
+ executionDate.getDateString("yyyy-MM-dd"));
}
catch (IOException e4) {
e4.printStackTrace();
}
catch (FinderException e4) {
e4.printStackTrace();
}
StringBuffer empty = new StringBuffer("");
for (int i = 0; i < 25; i++) {
empty.append(" ");
}
if (iHeaders != null && !iHeaders.isEmpty()) {
NumberFormat format = NumberFormat.getInstance(currentLocale);
format.setMaximumFractionDigits(0);
format.setMinimumFractionDigits(0);
format.setMinimumIntegerDigits(14);
format.setMaximumIntegerDigits(14);
format.setGroupingUsed(false);
NumberFormat format2 = NumberFormat.getInstance(currentLocale);
format2.setMaximumFractionDigits(0);
format2.setMinimumFractionDigits(0);
format2.setMinimumIntegerDigits(10);
format2.setMaximumIntegerDigits(10);
format2.setGroupingUsed(false);
NumberFormat format3 = NumberFormat.getInstance(currentLocale);
format3.setMaximumFractionDigits(0);
format3.setMinimumFractionDigits(0);
format3.setMinimumIntegerDigits(18);
format3.setMaximumIntegerDigits(18);
format3.setGroupingUsed(false);
FileWriter writer = new FileWriter(fileName1);
BufferedWriter bWriter = new BufferedWriter(writer);
PostingBusiness pb = getIFSBusiness().getPostingBusiness();
// Posttyp
bWriter.write("10");
// Rutinkod
bWriter.write("270");
// Kundkod
bWriter.write("01820");
// Rutinkod for avsandande rutin
bWriter.write("744");
// Framstallandedatum
bWriter.write(executionDate.getDateString("yyMMdd"));
// Klockslag
bWriter.write(executionDate.getDateString("hhmmss"));
// Kommentar
bWriter.write(empty.substring(0, 225));
bWriter.newLine();
int numberOfHeaders = 0;
int numberOf62Lines = 0;
int numberOf63Lines = 0;
long sum62Lines = 0;
long sum63Lines = 0;
Iterator ihIt = iHeaders.iterator();
while (ihIt.hasNext()) {
InvoiceHeader iHead = (InvoiceHeader) ihIt.next();
Collection rec = null;
try {
rec = ((InvoiceRecordHome) IDOLookup.getHome(InvoiceRecord.class)).findByInvoiceHeader(iHead);
}
catch (IDOLookupException e3) {
e3.printStackTrace();
}
catch (FinderException e3) {
e3.printStackTrace();
}
try {
User custodian = iHead.getCustodian();
if (custodian == null) {
throw new MissingCustodianException("ifs_missing_custodian", "Missing custodian");
}
Address mainAddress = getIFSBusiness().getUserBusiness().getUsersMainAddress(iHead.getCustodian());
if (mainAddress == null) {
throw new MissingAddressException("ifs_missing_address", "Missing address");
}
PostalCode poCode = mainAddress.getPostalCode();
if (poCode == null) {
throw new MissingPostalCodeException("ifs_missing_postalcode", "Missing postalcode");
}
if (rec != null && !rec.isEmpty()) {
Iterator irIt = rec.iterator();
// Posttyp
bWriter.write("60");
// Filler, perioden f.o.m., perioden t.o.m, perioden (klartext)
bWriter.write(empty.substring(0, 42));
// Kundnrtyp
bWriter.write('P');
// Kundnr
String pnr = custodian.getPersonalID();
if (pnr.length() < 10) {
StringBuffer p = new StringBuffer(pnr);
while (p.length() < 10)
p.insert(0, ' ');
pnr = p.toString();
}
else if (pnr.length() > 10) {
pnr = pnr.substring(2);
}
bWriter.write(pnr);
// Kundnamn
String name = custodian.getLastName() + " " + custodian.getFirstName();
if (name.length() < 25) {
StringBuffer p = new StringBuffer(name);
while (p.length() < 25)
p.append(' ');
name = p.toString();
}
else if (name.length() > 25) {
name = name.substring(0, 25);
}
bWriter.write(name);
// Kundadress
String address = mainAddress.getStreetAddress();
if (address.length() < 27) {
StringBuffer p = new StringBuffer(address);
while (p.length() < 27)
p.append(' ');
address = p.toString();
}
else if (address.length() > 27) {
address = address.substring(0, 27);
}
bWriter.write(address);
// Kundpostnr
String po = poCode.getPostalCode();
if (po.length() < 5) {
StringBuffer p = new StringBuffer(po);
while (p.length() < 5)
p.insert(0, ' ');
po = p.toString();
}
else if (po.length() > 5) {
po = po.substring(0, 5);
}
bWriter.write(po);
// Kundort
String poName = poCode.getName();
if (poName.length() < 13) {
StringBuffer p = new StringBuffer(poName);
while (p.length() < 13)
p.append(' ');
poName = p.toString();
}
else if (poName.length() > 13) {
poName = poName.substring(0, 13);
}
bWriter.write(poName);
// C/O address
Address ad = getIFSBusiness().getUserBusiness().getUsersCoAddress(custodian);
String co = "";
if (ad != null) {
co = ad.getStreetAddress();
}
if (co.length() < 25) {
StringBuffer p = new StringBuffer(co);
while (p.length() < 25)
p.append(' ');
co = p.toString();
}
else if (co.length() > 25) {
co = co.substring(0, 25);
}
bWriter.write(co);
// Filler
bWriter.write(empty.substring(0, 8));
// Er referens
StringBuffer bun = new StringBuffer("Kundvalsgruppen Tel: 718 80 00");
while (bun.length() < 40) {
bun.append(' ');
}
bWriter.write(bun.toString());
// Avsertyp
bWriter.write("BARNOMSORG");
// Filler
bWriter.write(empty.substring(0, 25));
// Verksamhetskod
bWriter.write("BO");
// Filler
bWriter.write(empty.substring(0, 15));
bWriter.newLine();
//Extra line for BETA system
//Posttype
bWriter.write("62");
//Filler
bWriter.write(empty.substring(0, 10));
//Belopp
bWriter.write("000000000000000");
//Antal
bWriter.write("000000000000000");
//Apris
bWriter.write("000000000000");
//moms, filler
bWriter.write(empty.substring(0, 1));
bWriter.write("0");
//Avser period f.o.m
bWriter.write("00000000");
//Avser period t.o.m
bWriter.write("00000000");
//Faktura text 1 + Filler
if (periodText.length() < 36) {
StringBuffer p = new StringBuffer(periodText);
while (p.length() < 36)
p.append(' ');
periodText = p.toString();
} else if (periodText.length() > 36) {
periodText = periodText.substring(0, 36);
}
bWriter.write(periodText);
//Faktura text 2
bWriter.write("--------------------");
//Faktura text 2, 3 and 4
bWriter.write(empty.substring(0, 88));
//Kod
bWriter.write('T');
//Filler
bWriter.write(empty.substring(0, 33));
numberOf62Lines++;
bWriter.newLine();
while (irIt.hasNext()) {
InvoiceRecord iRec = (InvoiceRecord) irIt.next();
String posting = iRec.getOwnPosting();
if (posting == null) {
throw new MissingCheckTaxaException("ifs_missing_checktaxa", "Missing checktaxa");
}
if (iRec.getAmount() != 0.0f) {
// Posttype
bWriter.write("62");
// Filler
bWriter.write(empty.substring(0, 10));
// Tecken
long am = AccountingUtil.roundAmount(iRec.getAmount());
boolean isNegative = false;
if (am < 0) {
isNegative = true;
bWriter.write("-");
} else {
bWriter.write(" ");
}
// Belopp
am = Math.abs(am * 100);
String amount = format.format(am);
bWriter.write(amount);
// Antal, pris,
bWriter.write("000000000000001");
bWriter.write(amount.substring(2, 14));
// moms, filler
bWriter.write(empty.substring(0, 2));
// Avser period f.o.m
bWriter.write(empty.substring(0, 8));
// Avser period t.o.m
bWriter.write(empty.substring(0, 8));
// Faktura text 1
boolean insertLRow = false;
String LText = null;
String text = iRec.getInvoiceText();
if (text == null)
text = "";
if (text.length() < 25) {
StringBuffer t = new StringBuffer(text);
while (t.length() < 25) {
t.append(' ');
}
text = t.toString();
}
else if (text.length() > 25) {
text = text.substring(0, 25);
}
LText = iRec.getInvoiceText2();
if (LText != null && !"".equals(LText))
insertLRow = true;
bWriter.write(text);
// Filler
bWriter.write(empty.substring(0, 11));
// Faktura text 2, 3 and 4
bWriter.write(empty.substring(0, 108));
// Kod
bWriter.write('T');
// Filler
bWriter.write(empty.substring(0, 33));
numberOf62Lines++;
if (!isNegative)
sum62Lines += am;
else
sum62Lines -= am;
bWriter.newLine();
if (insertLRow) {
// Posttype
bWriter.write("62");
// Filler
bWriter.write(empty.substring(0, 10));
// Tecken
bWriter.write(" ");
// Belopp
bWriter.write(format.format(0.0f));
// Antal, pris,
bWriter.write("000000000000000");
bWriter.write("000000000000");
// moms, filler
bWriter.write(empty.substring(0, 2));
// Avser period f.o.m
bWriter.write(empty.substring(0, 8));
// Avser period t.o.m
bWriter.write(empty.substring(0, 8));
// Faktura text 1
if (LText.length() < 36) {
StringBuffer t = new StringBuffer(LText);
while (t.length() < 36) {
t.append(' ');
}
LText = t.toString();
}
else if (LText.length() > 36) {
LText = LText.substring(0, 36);
}
bWriter.write(LText);
// Faktura text 2, 3 and 4
bWriter.write(empty.substring(0, 108));
// Kod
bWriter.write('L');
// Filler
bWriter.write(empty.substring(0, 33));
numberOf62Lines++;
bWriter.newLine();
}
bWriter.write("63");
// Filler
bWriter.write(empty.substring(0, 6));
// Tecken
bWriter.write(" ");
// Belopp
bWriter.write(amount);
// Kvantitet and Apris
bWriter.write("000000000000001");
bWriter.write(amount.substring(2, 14));
// Konto
String tmp = pb.findFieldInStringByName(posting, "Konto");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Ansvar
tmp = pb.findFieldInStringByName(posting, "Ansvar");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Resurs
bWriter.write(empty.substring(0, 10));
// Verksamhet
tmp = pb.findFieldInStringByName(posting, "Verksamhet");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Aktivitet
tmp = pb.findFieldInStringByName(posting, "Aktivitet");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Project
tmp = pb.findFieldInStringByName(posting, "Projekt");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Object
tmp = pb.findFieldInStringByName(posting, "Objekt");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Motpart
tmp = pb.findFieldInStringByName(posting, "Motpart");
if (tmp.length() < 10) {
StringBuffer post = new StringBuffer(tmp);
while (post.length() < 10)
post.append(' ');
tmp = post.toString();
}
else if (tmp.length() > 10) {
tmp = tmp.substring(0, 10);
}
bWriter.write(tmp);
// Anlaggnings nummber
bWriter.write(empty.substring(0, 10));
// Internranta
bWriter.write(empty.substring(0, 10));
// Filler
bWriter.write(empty.substring(0, 100));
numberOf63Lines++;
if (!isNegative)
sum63Lines += am;
else
sum63Lines -= am;
bWriter.newLine();
}
}
numberOfHeaders++;
}
iHead.setStatus('L');
iHead.store();
}
catch (MissingCustodianException e) {
IFSCheckRecordHome home = getIFSCheckRecordHome();
if (home != null) {
try {
IFSCheckRecord ifs_rec = home.create();
ifs_rec.setHeader(checkHeader);
ifs_rec.setError(e.getTextKey());
ifs_rec.setErrorConcerns("Faktura " + ((Integer) iHead.getPrimaryKey()).toString());
ifs_rec.store();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
}
catch (MissingAddressException e) {
IFSCheckRecordHome home = getIFSCheckRecordHome();
if (home != null) {
try {
IFSCheckRecord ifs_rec = home.create();
ifs_rec.setHeader(checkHeader);
ifs_rec.setError(e.getTextKey());
ifs_rec.setErrorConcerns("Fakturamottagare " + iHead.getCustodian().getPersonalID());
ifs_rec.store();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
}
catch (MissingPostalCodeException e) {
IFSCheckRecordHome home = getIFSCheckRecordHome();
if (home != null) {
try {
IFSCheckRecord ifs_rec = home.create();
ifs_rec.setHeader(checkHeader);
ifs_rec.setError(e.getTextKey());
ifs_rec.setErrorConcerns("Fakturamottagare " + iHead.getCustodian().getPersonalID());
ifs_rec.store();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
}
catch (MissingCheckTaxaException e) {
IFSCheckRecordHome home = getIFSCheckRecordHome();
if (home != null) {
try {
IFSCheckRecord ifs_rec = home.create();
ifs_rec.setHeader(checkHeader);
ifs_rec.setError(e.getTextKey());
ifs_rec.setErrorConcerns("Fakturamottagare " + iHead.getCustodian().getPersonalID());
ifs_rec.store();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
}
}
// Posttyp
bWriter.write("50");
// Filler
bWriter.write(empty.substring(0, 94));
// Antal poster posttyp 60
bWriter.write(format2.format(numberOfHeaders));
// Filler
bWriter.write(empty.substring(0, 10));
// Antalet poster posttyp 62
bWriter.write(format2.format(numberOf62Lines));
// Antalet poster posttyp 63
bWriter.write(format2.format(numberOf63Lines));
// Summen av alla fakturabelopp
bWriter.write(format3.format(sum62Lines));
// Summen av alla bokforings belopp
bWriter.write(format3.format(sum63Lines));
// Filler
bWriter.write(empty.substring(0, 78));
bWriter.newLine();
bWriter.close();
}
}
private IFSBusiness getIFSBusiness() {
try {
return (IFSBusiness) IBOLookup.getServiceInstance(iwac, IFSBusiness.class);
}
catch (RemoteException e) {
throw new IBORuntimeException(e.getMessage());
}
}
private IFSCheckRecordHome getIFSCheckRecordHome() {
try {
return (IFSCheckRecordHome) IDOLookup.getHome(IFSCheckRecord.class);
}
catch (IDOLookupException e) {
e.printStackTrace();
}
return null;
}
}