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.gl.batch.service.impl;
017    
018    import java.sql.Date;
019    import java.util.HashMap;
020    import java.util.Map;
021    
022    import org.apache.commons.lang.StringUtils;
023    import org.kuali.kfs.coa.businessobject.A21SubAccount;
024    import org.kuali.kfs.coa.businessobject.Account;
025    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
026    import org.kuali.kfs.coa.businessobject.BalanceType;
027    import org.kuali.kfs.coa.businessobject.Chart;
028    import org.kuali.kfs.coa.businessobject.IndirectCostRecoveryType;
029    import org.kuali.kfs.coa.businessobject.ObjectCode;
030    import org.kuali.kfs.coa.businessobject.ObjectLevel;
031    import org.kuali.kfs.coa.businessobject.ObjectType;
032    import org.kuali.kfs.coa.businessobject.OffsetDefinition;
033    import org.kuali.kfs.coa.businessobject.Organization;
034    import org.kuali.kfs.coa.businessobject.ProjectCode;
035    import org.kuali.kfs.coa.businessobject.SubAccount;
036    import org.kuali.kfs.coa.businessobject.SubFundGroup;
037    import org.kuali.kfs.coa.businessobject.SubObjectCode;
038    import org.kuali.kfs.gl.GeneralLedgerConstants;
039    import org.kuali.kfs.gl.batch.dataaccess.LedgerPreparedStatementCachingDao;
040    import org.kuali.kfs.gl.batch.service.AccountingCycleCachingService;
041    import org.kuali.kfs.gl.businessobject.AccountBalance;
042    import org.kuali.kfs.gl.businessobject.Balance;
043    import org.kuali.kfs.gl.businessobject.Encumbrance;
044    import org.kuali.kfs.gl.businessobject.Entry;
045    import org.kuali.kfs.gl.businessobject.ExpenditureTransaction;
046    import org.kuali.kfs.gl.businessobject.Reversal;
047    import org.kuali.kfs.gl.businessobject.SufficientFundBalances;
048    import org.kuali.kfs.gl.businessobject.Transaction;
049    import org.kuali.kfs.sys.batch.service.AbstractBatchTransactionalCachingService;
050    import org.kuali.kfs.sys.businessobject.OriginationCode;
051    import org.kuali.kfs.sys.businessobject.SystemOptions;
052    import org.kuali.kfs.sys.businessobject.UniversityDate;
053    import org.kuali.kfs.sys.document.service.FinancialSystemDocumentService;
054    import org.kuali.kfs.sys.document.service.FinancialSystemDocumentTypeService;
055    import org.kuali.kfs.sys.service.UniversityDateService;
056    
057    public class AccountingCycleCachingServiceImpl extends AbstractBatchTransactionalCachingService implements AccountingCycleCachingService {
058        protected org.kuali.kfs.sys.batch.dataaccess.LedgerReferenceValuePreparedStatementCachingDao systemReferenceValueDao;
059        protected org.kuali.kfs.coa.batch.dataaccess.LedgerReferenceValuePreparedStatementCachingDao chartReferenceValueDao;
060        protected LedgerPreparedStatementCachingDao ledgerDao;
061    
062        protected Map<String,Boolean> documentTypeValidCache;
063        
064        protected UniversityDateService universityDateService;
065        protected FinancialSystemDocumentTypeService financialSystemDocumentTypeService;
066    
067        public void initialize() {
068            super.initialize();
069            systemReferenceValueDao.initialize();
070            chartReferenceValueDao.initialize();
071            ledgerDao.initialize();
072            documentTypeValidCache = new HashMap<String,Boolean>();
073            previousValueCache.put(Balance.class, new PreviousValueReference<Balance>());
074            previousValueCache.put(Encumbrance.class, new PreviousValueReference<Encumbrance>());
075            previousValueCache.put(ExpenditureTransaction.class, new PreviousValueReference<ExpenditureTransaction>());
076            previousValueCache.put(SufficientFundBalances.class, new PreviousValueReference<SufficientFundBalances>());
077            previousValueCache.put(AccountBalance.class, new PreviousValueReference<AccountBalance>());
078        }
079    
080        public void destroy() {
081            super.destroy();
082            systemReferenceValueDao.destroy();
083            chartReferenceValueDao.destroy();
084            ledgerDao.destroy();
085            documentTypeValidCache = null;
086        }
087    
088        public boolean isCurrentActiveAccountingDocumentType(String documentTypeCode) {
089            Boolean documentTypeValid = documentTypeValidCache.get(documentTypeCode);
090            if (documentTypeValid == null) {
091                documentTypeValid = new Boolean(financialSystemDocumentTypeService.isCurrentActiveAccountingDocumentType(documentTypeCode));
092                documentTypeValidCache.put(documentTypeCode, documentTypeValid);
093            }
094            return documentTypeValid.booleanValue();
095        }
096    
097        public OriginationCode getOriginationCode(final String financialSystemOriginationCode) {
098            return new ReferenceValueRetriever<OriginationCode>() {
099                @Override
100                protected OriginationCode useDao() {
101                    return systemReferenceValueDao.getOriginationCode(financialSystemOriginationCode);
102                }
103                @Override
104                protected void retrieveReferences(OriginationCode originationCode) {}
105            }.get(OriginationCode.class, financialSystemOriginationCode);
106        }
107    
108        public SystemOptions getSystemOptions(final Integer fiscalYear) {
109            return new ReferenceValueRetriever<SystemOptions>() {
110                @Override
111                protected SystemOptions useDao() {
112                    return systemReferenceValueDao.getSystemOptions(fiscalYear);
113                }
114                @Override
115                protected void retrieveReferences(SystemOptions systemOptions) {}
116            }.get(SystemOptions.class, fiscalYear);
117        }
118    
119        public UniversityDate getUniversityDate(final Date date) {
120            return new ReferenceValueRetriever<UniversityDate>() {
121                @Override
122                protected UniversityDate useDao() {
123                    return systemReferenceValueDao.getUniversityDate(date);
124                }
125                @Override
126                protected void retrieveReferences(UniversityDate universityDate) {
127                    universityDate.setAccountingPeriod(getAccountingPeriod(universityDate.getUniversityFiscalYear(), universityDate.getUniversityFiscalAccountingPeriod()));
128                }
129            }.get(UniversityDate.class, date);
130        }
131        
132        public A21SubAccount getA21SubAccount(final String chartOfAccountsCode, final String accountNumber, final String subAccountNumber) {
133            return new ReferenceValueRetriever<A21SubAccount>() {
134                @Override
135                protected A21SubAccount useDao() {
136                    return chartReferenceValueDao.getA21SubAccount(chartOfAccountsCode, accountNumber, subAccountNumber);
137                }
138                @Override
139                protected void retrieveReferences(A21SubAccount a21SubAccount) {}
140            }.get(A21SubAccount.class, chartOfAccountsCode, accountNumber, subAccountNumber);
141        }
142    
143        public Account getAccount(final String chartCode, final String accountNumber) {
144            return new ReferenceValueRetriever<Account>() {
145                @Override
146                protected Account useDao() {
147                    return chartReferenceValueDao.getAccount(chartCode, accountNumber);
148                }
149                @Override
150                protected void retrieveReferences(Account account) {}
151            }.get(Account.class, chartCode, accountNumber);
152        }
153    
154        public AccountingPeriod getAccountingPeriod(final Integer fiscalYear, final String fiscalPeriodCode) {
155            return new ReferenceValueRetriever<AccountingPeriod>() {
156                @Override
157                protected AccountingPeriod useDao() {
158                    return chartReferenceValueDao.getAccountingPeriod(fiscalYear, fiscalPeriodCode);
159                }
160                @Override
161                protected void retrieveReferences(AccountingPeriod accountingPeriod) {}
162            }.get(AccountingPeriod.class, fiscalYear, fiscalPeriodCode);
163        }
164    
165        public BalanceType getBalanceType(final String financialBalanceTypeCode) {
166            return new ReferenceValueRetriever<BalanceType>() {
167                @Override
168                protected BalanceType useDao() {
169                    return chartReferenceValueDao.getBalanceType(financialBalanceTypeCode);
170                }
171                @Override
172                protected void retrieveReferences(BalanceType balanceType) {}
173            }.get(BalanceType.class, financialBalanceTypeCode);
174        }
175    
176        public Chart getChart(final String chartOfAccountsCode) {
177            return new ReferenceValueRetriever<Chart>() {
178                @Override
179                protected Chart useDao() {
180                    return chartReferenceValueDao.getChart(chartOfAccountsCode);
181                }
182                @Override
183                protected void retrieveReferences(Chart chart) {
184                    chart.setFundBalanceObject(getObjectCode(universityDateService.getCurrentFiscalYear(), chart.getChartOfAccountsCode(), chart.getFundBalanceObjectCode()));
185                }
186            }.get(Chart.class, chartOfAccountsCode);
187        }
188    
189        public IndirectCostRecoveryType getIndirectCostRecoveryType(final String accountIcrTypeCode) {
190            return new ReferenceValueRetriever<IndirectCostRecoveryType>() {
191                @Override
192                protected IndirectCostRecoveryType useDao() {
193                    return chartReferenceValueDao.getIndirectCostRecoveryType(accountIcrTypeCode);
194                }
195                @Override
196                protected void retrieveReferences(IndirectCostRecoveryType indirectCostRecoveryType) {}
197            }.get(IndirectCostRecoveryType.class, accountIcrTypeCode);
198        }
199    
200        public ObjectCode getObjectCode(final Integer universityFiscalYear, final String chartOfAccountsCode, final String financialObjectCode) {
201            return new ReferenceValueRetriever<ObjectCode>() {
202                @Override
203                protected ObjectCode useDao() {
204                    return chartReferenceValueDao.getObjectCode(universityFiscalYear, chartOfAccountsCode, financialObjectCode);
205                }
206                @Override
207                protected void retrieveReferences(ObjectCode objectCode) {}
208            }.get(ObjectCode.class, universityFiscalYear, chartOfAccountsCode, financialObjectCode);
209        }
210    
211        public ObjectLevel getObjectLevel(final String chartOfAccountsCode, final String financialObjectLevelCode) {
212            return new ReferenceValueRetriever<ObjectLevel>() {
213                @Override
214                protected ObjectLevel useDao() {
215                    return chartReferenceValueDao.getObjectLevel(chartOfAccountsCode, financialObjectLevelCode);
216                }
217                @Override
218                protected void retrieveReferences(ObjectLevel objectLevel) {}
219            }.get(ObjectLevel.class, chartOfAccountsCode, financialObjectLevelCode);
220        }
221    
222        public ObjectType getObjectType(final String financialObjectTypeCode) {
223            return new ReferenceValueRetriever<ObjectType>() {
224                @Override
225                protected ObjectType useDao() {
226                    return chartReferenceValueDao.getObjectType(financialObjectTypeCode);
227                }
228                @Override
229                protected void retrieveReferences(ObjectType objectType) {}
230            }.get(ObjectType.class, financialObjectTypeCode);
231        }
232    
233        public OffsetDefinition getOffsetDefinition(final Integer universityFiscalYear, final String chartOfAccountsCode, final String financialDocumentTypeCode, final String financialBalanceTypeCode) {
234            return new ReferenceValueRetriever<OffsetDefinition>() {
235                @Override
236                protected OffsetDefinition useDao() {
237                    return chartReferenceValueDao.getOffsetDefinition(universityFiscalYear, chartOfAccountsCode, financialDocumentTypeCode, financialBalanceTypeCode);
238                }
239                @Override
240                protected void retrieveReferences(OffsetDefinition offsetDefinition) {
241                    offsetDefinition.setFinancialObject(getObjectCode(universityFiscalYear, chartOfAccountsCode, offsetDefinition.getFinancialObjectCode()));
242                }
243            }.get(OffsetDefinition.class, universityFiscalYear, chartOfAccountsCode, financialDocumentTypeCode, financialBalanceTypeCode);
244        }
245    
246        public Organization getOrganization(final String chartOfAccountsCode, final String organizationCode) {
247            return new ReferenceValueRetriever<Organization>() {
248                @Override
249                protected Organization useDao() {
250                    return chartReferenceValueDao.getOrganization(chartOfAccountsCode, organizationCode);
251                }
252                @Override
253                protected void retrieveReferences(Organization organization) {}
254            }.get(Organization.class, chartOfAccountsCode, organizationCode);
255        }
256    
257        public ProjectCode getProjectCode(final String financialSystemProjectCode) {
258            return new ReferenceValueRetriever<ProjectCode>() {
259                @Override
260                protected ProjectCode useDao() {
261                    return chartReferenceValueDao.getProjectCode(financialSystemProjectCode);
262                }
263                @Override
264                protected void retrieveReferences(ProjectCode projectCode) {}
265            }.get(ProjectCode.class, financialSystemProjectCode);
266        }
267    
268        public SubAccount getSubAccount(final String chartOfAccountsCode, final String accountNumber, final String subAccountNumber) {
269            return new ReferenceValueRetriever<SubAccount>() {
270                @Override
271                protected SubAccount useDao() {
272                    return chartReferenceValueDao.getSubAccount(chartOfAccountsCode, accountNumber, subAccountNumber);
273                }
274                @Override
275                protected void retrieveReferences(SubAccount subAccount) {
276                    subAccount.setA21SubAccount(getA21SubAccount(chartOfAccountsCode, accountNumber, subAccountNumber));
277                }
278            }.get(SubAccount.class, chartOfAccountsCode, accountNumber, subAccountNumber);
279        }
280    
281        public SubFundGroup getSubFundGroup(final String subFundGroupCode) {
282            return new ReferenceValueRetriever<SubFundGroup>() {
283                @Override
284                protected SubFundGroup useDao() {
285                    return chartReferenceValueDao.getSubFundGroup(subFundGroupCode);
286                }
287                @Override
288                protected void retrieveReferences(SubFundGroup subFundGroup) {}
289            }.get(SubFundGroup.class, subFundGroupCode);
290        }
291    
292        public SubObjectCode getSubObjectCode(final Integer universityFiscalYear, final String chartOfAccountsCode, final String accountNumber, final String financialObjectCode, final String financialSubObjectCode) {
293            return new ReferenceValueRetriever<SubObjectCode>() {
294                @Override
295                protected SubObjectCode useDao() {
296                    return chartReferenceValueDao.getSubObjectCode(universityFiscalYear, chartOfAccountsCode, accountNumber, financialObjectCode, financialSubObjectCode);
297                }
298                @Override
299                protected void retrieveReferences(SubObjectCode subObjectCode) {}
300            }.get(SubObjectCode.class, universityFiscalYear, chartOfAccountsCode, accountNumber, financialObjectCode, financialSubObjectCode);
301        }
302    
303    
304        public int getMaxSequenceNumber(Transaction t) {
305            return ledgerDao.getMaxSequenceNumber(t);
306        }
307        
308        public AccountBalance getAccountBalance(final Transaction t) {
309            return new PreviousValueRetriever<AccountBalance>() {
310                @Override
311                protected AccountBalance useDao() {
312                    return ledgerDao.getAccountBalance(t);
313                }
314            }.get(AccountBalance.class, t.getUniversityFiscalYear(), t.getChartOfAccountsCode(), t.getAccountNumber(), t.getSubAccountNumber(), t.getFinancialObjectCode(), t.getFinancialSubObjectCode());
315        }
316    
317        public Balance getBalance(final Transaction t) {
318            return new PreviousValueRetriever<Balance>() {
319                @Override
320                protected Balance useDao() {
321                    return ledgerDao.getBalance(t);
322                }            
323            }.get(Balance.class, t.getUniversityFiscalYear(), t.getChartOfAccountsCode(), t.getAccountNumber(), t.getSubAccountNumber(), t.getFinancialObjectCode(), t.getFinancialSubObjectCode(), t.getFinancialBalanceTypeCode(), t.getFinancialObjectTypeCode());
324        }
325    
326        public Encumbrance getEncumbrance(final Entry entry) {
327            return new PreviousValueRetriever<Encumbrance>() {
328                @Override
329                protected Encumbrance useDao() {
330                    return ledgerDao.getEncumbrance(entry);
331                }            
332            }.get(Encumbrance.class, entry.getUniversityFiscalYear(), entry.getChartOfAccountsCode(), entry.getAccountNumber(), entry.getSubAccountNumber(), entry.getFinancialObjectCode(), entry.getFinancialSubObjectCode(), entry.getFinancialBalanceTypeCode(), entry.getFinancialDocumentTypeCode(), entry.getFinancialSystemOriginationCode(), entry.getDocumentNumber());
333        }
334    
335        public ExpenditureTransaction getExpenditureTransaction(final Transaction t) {
336            return new PreviousValueRetriever<ExpenditureTransaction>() {
337                @Override
338                protected ExpenditureTransaction useDao() {
339                    return ledgerDao.getExpenditureTransaction(t);
340                }
341            }.get(ExpenditureTransaction.class, t.getUniversityFiscalYear(), t.getChartOfAccountsCode(), t.getAccountNumber(), t.getSubAccountNumber(), t.getFinancialObjectCode(), t.getFinancialSubObjectCode(), t.getFinancialBalanceTypeCode(), t.getFinancialObjectTypeCode(), t.getUniversityFiscalPeriodCode(), t.getProjectCode(), StringUtils.isBlank(t.getOrganizationReferenceId()) ? GeneralLedgerConstants.getDashOrganizationReferenceId() : t.getOrganizationReferenceId());
342        }
343    
344        public SufficientFundBalances getSufficientFundBalances(final Integer universityFiscalYear, final String chartOfAccountsCode, final String accountNumber, final String financialObjectCode) {
345            return new PreviousValueRetriever<SufficientFundBalances>() {
346                @Override
347                protected SufficientFundBalances useDao() {
348                    return ledgerDao.getSufficientFundBalances(universityFiscalYear, chartOfAccountsCode, accountNumber, financialObjectCode);
349                }            
350            }.get(SufficientFundBalances.class, universityFiscalYear, chartOfAccountsCode, accountNumber, financialObjectCode);
351        }
352    
353    
354        public void insertAccountBalance(AccountBalance accountBalance) {
355            ledgerDao.insertAccountBalance(accountBalance);
356            previousValueCache.get(AccountBalance.class).update(accountBalance, accountBalance.getUniversityFiscalYear(), accountBalance.getChartOfAccountsCode(), accountBalance.getAccountNumber(), accountBalance.getSubAccountNumber(), accountBalance.getObjectCode(), accountBalance.getSubObjectCode());
357        }
358    
359        public void updateAccountBalance(AccountBalance accountBalance) {
360            ledgerDao.updateAccountBalance(accountBalance);        
361            previousValueCache.get(AccountBalance.class).update(accountBalance, accountBalance.getUniversityFiscalYear(), accountBalance.getChartOfAccountsCode(), accountBalance.getAccountNumber(), accountBalance.getSubAccountNumber(), accountBalance.getObjectCode(), accountBalance.getSubObjectCode());
362        }
363    
364        public void insertBalance(Balance balance) {
365            ledgerDao.insertBalance(balance);
366            previousValueCache.get(Balance.class).update(balance, balance.getUniversityFiscalYear(), balance.getChartOfAccountsCode(), balance.getAccountNumber(), balance.getSubAccountNumber(), balance.getObjectCode(), balance.getSubObjectCode(), balance.getBalanceTypeCode(), balance.getObjectTypeCode());
367        }
368    
369        public void updateBalance(Balance balance) {
370            ledgerDao.updateBalance(balance);
371            previousValueCache.get(Balance.class).update(balance, balance.getUniversityFiscalYear(), balance.getChartOfAccountsCode(), balance.getAccountNumber(), balance.getSubAccountNumber(), balance.getObjectCode(), balance.getSubObjectCode(), balance.getBalanceTypeCode(), balance.getObjectTypeCode());
372        }
373    
374        public void insertEncumbrance(Encumbrance encumbrance) {
375            ledgerDao.insertEncumbrance(encumbrance);
376            previousValueCache.get(Encumbrance.class).update(encumbrance, encumbrance.getUniversityFiscalYear(), encumbrance.getChartOfAccountsCode(), encumbrance.getAccountNumber(), encumbrance.getSubAccountNumber(), encumbrance.getObjectCode(), encumbrance.getSubObjectCode(), encumbrance.getBalanceTypeCode(), encumbrance.getDocumentTypeCode(), encumbrance.getOriginCode(), encumbrance.getDocumentNumber());
377        }
378    
379        public void updateEncumbrance(Encumbrance encumbrance) {
380            ledgerDao.updateEncumbrance(encumbrance);        
381            previousValueCache.get(Encumbrance.class).update(encumbrance, encumbrance.getUniversityFiscalYear(), encumbrance.getChartOfAccountsCode(), encumbrance.getAccountNumber(), encumbrance.getSubAccountNumber(), encumbrance.getObjectCode(), encumbrance.getSubObjectCode(), encumbrance.getBalanceTypeCode(), encumbrance.getDocumentTypeCode(), encumbrance.getOriginCode(), encumbrance.getDocumentNumber());
382        }
383    
384        public void insertExpenditureTransaction(ExpenditureTransaction expenditureTransaction) {
385            ledgerDao.insertExpenditureTransaction(expenditureTransaction);
386            previousValueCache.get(ExpenditureTransaction.class).update(expenditureTransaction, expenditureTransaction.getUniversityFiscalYear(), expenditureTransaction.getChartOfAccountsCode(), expenditureTransaction.getAccountNumber(), expenditureTransaction.getSubAccountNumber(), expenditureTransaction.getObjectCode(), expenditureTransaction.getSubObjectCode(), expenditureTransaction.getBalanceTypeCode(), expenditureTransaction.getObjectTypeCode(), expenditureTransaction.getUniversityFiscalAccountingPeriod(), expenditureTransaction.getProjectCode(), expenditureTransaction.getOrganizationReferenceId());
387        }
388    
389        public void updateExpenditureTransaction(ExpenditureTransaction expenditureTransaction) {
390            ledgerDao.updateExpenditureTransaction(expenditureTransaction);        
391            previousValueCache.get(ExpenditureTransaction.class).update(expenditureTransaction, expenditureTransaction.getUniversityFiscalYear(), expenditureTransaction.getChartOfAccountsCode(), expenditureTransaction.getAccountNumber(), expenditureTransaction.getSubAccountNumber(), expenditureTransaction.getObjectCode(), expenditureTransaction.getSubObjectCode(), expenditureTransaction.getBalanceTypeCode(), expenditureTransaction.getObjectTypeCode(), expenditureTransaction.getUniversityFiscalAccountingPeriod(), expenditureTransaction.getProjectCode(), expenditureTransaction.getOrganizationReferenceId());
392        }
393    
394        public void insertSufficientFundBalances(SufficientFundBalances sufficientFundBalances) {
395            ledgerDao.insertSufficientFundBalances(sufficientFundBalances);
396            previousValueCache.get(SufficientFundBalances.class).update(sufficientFundBalances, sufficientFundBalances.getUniversityFiscalYear(), sufficientFundBalances.getChartOfAccountsCode(), sufficientFundBalances.getAccountNumber(), sufficientFundBalances.getFinancialObjectCode());
397        }
398    
399        public void updateSufficientFundBalances(SufficientFundBalances sufficientFundBalances) {
400            ledgerDao.updateSufficientFundBalances(sufficientFundBalances);        
401            previousValueCache.get(SufficientFundBalances.class).update(sufficientFundBalances, sufficientFundBalances.getUniversityFiscalYear(), sufficientFundBalances.getChartOfAccountsCode(), sufficientFundBalances.getAccountNumber(), sufficientFundBalances.getFinancialObjectCode());
402        }
403    
404        public void insertEntry(Entry entry) {
405            ledgerDao.insertEntry(entry);
406        }
407    
408        public void insertReversal(Reversal reversal) {
409            ledgerDao.insertReversal(reversal);        
410        }
411        
412        public void setSystemReferenceValueDao(org.kuali.kfs.sys.batch.dataaccess.LedgerReferenceValuePreparedStatementCachingDao systemReferenceValueDao) {
413            this.systemReferenceValueDao = systemReferenceValueDao;
414        }
415    
416        public void setChartReferenceValueDao(org.kuali.kfs.coa.batch.dataaccess.LedgerReferenceValuePreparedStatementCachingDao chartReferenceValueDao) {
417            this.chartReferenceValueDao = chartReferenceValueDao;
418        }
419    
420        public void setLedgerDao(LedgerPreparedStatementCachingDao ledgerDao) {
421            this.ledgerDao = ledgerDao;
422        }
423    
424        public void setUniversityDateService(UniversityDateService universityDateService) {
425            this.universityDateService = universityDateService;
426        }
427    
428        /**
429         * Sets the financialSystemDocumentTypeService attribute value.
430         * @param financialSystemDocumentTypeService The financialSystemDocumentTypeService to set.
431         */
432        public void setFinancialSystemDocumentTypeService(FinancialSystemDocumentTypeService financialSystemDocumentTypeService) {
433            this.financialSystemDocumentTypeService = financialSystemDocumentTypeService;
434        }
435    }