001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.pdp.batch.service.impl; 017 018 import java.io.File; 019 import java.io.FileNotFoundException; 020 import java.io.IOException; 021 import java.io.PrintStream; 022 import java.sql.Date; 023 import java.text.MessageFormat; 024 import java.util.Iterator; 025 026 import org.kuali.kfs.gl.GeneralLedgerConstants; 027 import org.kuali.kfs.gl.report.LedgerSummaryReport; 028 import org.kuali.kfs.gl.service.OriginEntryGroupService; 029 import org.kuali.kfs.gl.service.OriginEntryService; 030 import org.kuali.kfs.pdp.PdpKeyConstants; 031 import org.kuali.kfs.pdp.batch.service.ExtractTransactionsService; 032 import org.kuali.kfs.pdp.businessobject.GlPendingTransaction; 033 import org.kuali.kfs.pdp.service.PendingTransactionService; 034 import org.kuali.kfs.sys.service.ReportWriterService; 035 import org.kuali.rice.kns.service.DateTimeService; 036 import org.kuali.rice.kns.service.KualiConfigurationService; 037 import org.springframework.transaction.annotation.Transactional; 038 039 @Transactional 040 public class ExtractTransactionsServiceImpl implements ExtractTransactionsService { 041 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ExtractTransactionsServiceImpl.class); 042 043 private PendingTransactionService glPendingTransactionService; 044 private OriginEntryGroupService originEntryGroupService; 045 private OriginEntryService originEntryService; 046 private DateTimeService dateTimeService; 047 private KualiConfigurationService kualiConfigurationService; 048 private String batchFileDirectoryName; 049 private ReportWriterService reportWriterService; 050 051 /** 052 * @see org.kuali.kfs.pdp.batch.service.ExtractTransactionsService#extractGlTransactions() 053 */ 054 public void extractGlTransactions() { 055 LOG.debug("extractGlTransactions() started"); 056 057 Date processDate = dateTimeService.getCurrentSqlDate(); 058 059 // add time info to filename - better to move in common place? 060 java.util.Date jobRunDate = dateTimeService.getCurrentDate(); 061 String fileTimeInfo = "." + dateTimeService.toDateTimeStringForFilename(jobRunDate); 062 063 String extractTGlTransactionFileName = GeneralLedgerConstants.BatchFileSystem.EXTRACT_TRANSACTION_FILE + fileTimeInfo + GeneralLedgerConstants.BatchFileSystem.EXTENSION; 064 File extractTGlTransactionFile = new File(batchFileDirectoryName + File.separator + extractTGlTransactionFileName); 065 PrintStream extractTGlTransactionPS = null; 066 067 try { 068 extractTGlTransactionPS = new PrintStream(extractTGlTransactionFile); 069 } 070 catch (FileNotFoundException e) { 071 throw new RuntimeException("extract transaction file doesn't exist " + extractTGlTransactionFileName); 072 } 073 074 075 Iterator transactions = glPendingTransactionService.getUnextractedTransactions(); 076 LedgerSummaryReport extractGlSummaryReport = new LedgerSummaryReport(); 077 while (transactions.hasNext()) { 078 GlPendingTransaction tran = (GlPendingTransaction) transactions.next(); 079 //write to file 080 extractTGlTransactionPS.printf("%s\n", tran.getOriginEntry().getLine()); 081 082 extractGlSummaryReport.summarizeEntry(tran.getOriginEntry()); 083 084 tran.setProcessInd(true); 085 glPendingTransactionService.save(tran); 086 } 087 088 if (extractTGlTransactionPS != null) { 089 extractTGlTransactionPS.close(); 090 091 // create done file 092 String extractTGlTransactionDoneFileName = extractTGlTransactionFileName.replace(GeneralLedgerConstants.BatchFileSystem.EXTENSION, GeneralLedgerConstants.BatchFileSystem.DONE_FILE_EXTENSION); 093 File extractTGlTransactionDoneFile = new File(batchFileDirectoryName + File.separator + extractTGlTransactionDoneFileName); 094 if (!extractTGlTransactionDoneFile.exists()) { 095 try { 096 extractTGlTransactionDoneFile.createNewFile(); 097 } 098 catch (IOException e) { 099 throw new RuntimeException(); 100 } 101 } 102 103 String reportTitle = this.kualiConfigurationService.getPropertyString(PdpKeyConstants.EXTRACT_TRANSACTION_SERVICE_REPORT_TITLE); 104 reportTitle = MessageFormat.format(reportTitle, new Object[] { null }); 105 106 String reportFilename = this.kualiConfigurationService.getPropertyString(PdpKeyConstants.EXTRACT_TRANSACTION_SERVICE_REPORT_FILENAME); 107 reportFilename = MessageFormat.format(reportFilename, new Object[] { null }); 108 109 // Run a report 110 extractGlSummaryReport.writeReport(reportWriterService); 111 } 112 } 113 114 public void setDateTimeService(DateTimeService dateTimeService) { 115 this.dateTimeService = dateTimeService; 116 } 117 118 public void setGlPendingTransactionService(PendingTransactionService glPendingTransactionService) { 119 this.glPendingTransactionService = glPendingTransactionService; 120 } 121 122 public void setOriginEntryGroupService(OriginEntryGroupService originEntryGroupService) { 123 this.originEntryGroupService = originEntryGroupService; 124 } 125 126 public void setOriginEntryService(OriginEntryService originEntryService) { 127 this.originEntryService = originEntryService; 128 } 129 130 public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) { 131 this.kualiConfigurationService = kualiConfigurationService; 132 } 133 134 public void setBatchFileDirectoryName(String batchFileDirectoryName) { 135 this.batchFileDirectoryName = batchFileDirectoryName; 136 } 137 138 public void setReportWriterService(ReportWriterService reportWriterService) { 139 this.reportWriterService = reportWriterService; 140 } 141 142 143 }