/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.pdp.batch.service.impl;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.sql.Date;
import java.text.MessageFormat;
import java.util.Iterator;
import org.kuali.kfs.gl.GeneralLedgerConstants;
import org.kuali.kfs.gl.report.LedgerSummaryReport;
import org.kuali.kfs.gl.service.OriginEntryGroupService;
import org.kuali.kfs.gl.service.OriginEntryService;
import org.kuali.kfs.pdp.PdpKeyConstants;
import org.kuali.kfs.pdp.batch.service.ExtractTransactionsService;
import org.kuali.kfs.pdp.businessobject.GlPendingTransaction;
import org.kuali.kfs.pdp.service.PendingTransactionService;
import org.kuali.kfs.sys.service.ReportWriterService;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class ExtractTransactionsServiceImpl implements ExtractTransactionsService {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ExtractTransactionsServiceImpl.class);
private PendingTransactionService glPendingTransactionService;
private OriginEntryGroupService originEntryGroupService;
private OriginEntryService originEntryService;
private DateTimeService dateTimeService;
private ConfigurationService kualiConfigurationService;
private String batchFileDirectoryName;
private ReportWriterService reportWriterService;
/**
* @see org.kuali.kfs.pdp.batch.service.ExtractTransactionsService#extractGlTransactions()
*/
public void extractGlTransactions() {
LOG.debug("extractGlTransactions() started");
Date processDate = dateTimeService.getCurrentSqlDate();
// add time info to filename - better to move in common place?
java.util.Date jobRunDate = dateTimeService.getCurrentDate();
String fileTimeInfo = "." + dateTimeService.toDateTimeStringForFilename(jobRunDate);
String extractTGlTransactionFileName = GeneralLedgerConstants.BatchFileSystem.EXTRACT_TRANSACTION_FILE + fileTimeInfo + GeneralLedgerConstants.BatchFileSystem.EXTENSION;
File extractTGlTransactionFile = new File(batchFileDirectoryName + File.separator + extractTGlTransactionFileName);
PrintStream extractTGlTransactionPS = null;
try {
extractTGlTransactionPS = new PrintStream(extractTGlTransactionFile);
}
catch (FileNotFoundException e) {
throw new RuntimeException("extract transaction file doesn't exist " + extractTGlTransactionFileName);
}
Iterator transactions = glPendingTransactionService.getUnextractedTransactions();
LedgerSummaryReport extractGlSummaryReport = new LedgerSummaryReport();
while (transactions.hasNext()) {
GlPendingTransaction tran = (GlPendingTransaction) transactions.next();
//write to file
extractTGlTransactionPS.printf("%s\n", tran.getOriginEntry().getLine());
extractGlSummaryReport.summarizeEntry(tran.getOriginEntry());
tran.setProcessInd(true);
glPendingTransactionService.save(tran);
}
if (extractTGlTransactionPS != null) {
extractTGlTransactionPS.close();
// create done file
String extractTGlTransactionDoneFileName = extractTGlTransactionFileName.replace(GeneralLedgerConstants.BatchFileSystem.EXTENSION, GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION);
File extractTGlTransactionDoneFile = new File(batchFileDirectoryName + File.separator + extractTGlTransactionDoneFileName);
if (!extractTGlTransactionDoneFile.exists()) {
try {
extractTGlTransactionDoneFile.createNewFile();
}
catch (IOException e) {
throw new RuntimeException();
}
}
String reportTitle = this.kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.EXTRACT_TRANSACTION_SERVICE_REPORT_TITLE);
reportTitle = MessageFormat.format(reportTitle, new Object[] { null });
String reportFilename = this.kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.EXTRACT_TRANSACTION_SERVICE_REPORT_FILENAME);
reportFilename = MessageFormat.format(reportFilename, new Object[] { null });
// Run a report
extractGlSummaryReport.writeReport(reportWriterService);
}
}
public void setDateTimeService(DateTimeService dateTimeService) {
this.dateTimeService = dateTimeService;
}
public void setGlPendingTransactionService(PendingTransactionService glPendingTransactionService) {
this.glPendingTransactionService = glPendingTransactionService;
}
public void setOriginEntryGroupService(OriginEntryGroupService originEntryGroupService) {
this.originEntryGroupService = originEntryGroupService;
}
public void setOriginEntryService(OriginEntryService originEntryService) {
this.originEntryService = originEntryService;
}
public void setConfigurationService(ConfigurationService kualiConfigurationService) {
this.kualiConfigurationService = kualiConfigurationService;
}
public void setBatchFileDirectoryName(String batchFileDirectoryName) {
this.batchFileDirectoryName = batchFileDirectoryName;
}
public void setReportWriterService(ReportWriterService reportWriterService) {
this.reportWriterService = reportWriterService;
}
}