/* * 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.fp.document; import static org.kuali.kfs.fp.document.validation.impl.TransferOfFundsDocumentRuleConstants.YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE; import org.kuali.kfs.coa.businessobject.AccountingPeriod; import org.kuali.kfs.fp.document.service.YearEndPendingEntryService; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry; import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntrySourceDetail; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.AccountingDocument; import org.kuali.kfs.sys.service.UniversityDateService; /** * Year End version of the <code>BudgetAdjustmentDocument</code> */ public class YearEndBudgetAdjustmentDocument extends BudgetAdjustmentDocument implements YearEndDocument { /** * Constructs a YearEndBudgetAdjustmentDocument. */ public YearEndBudgetAdjustmentDocument() { super(); } /** * set posting year to previous fiscal year */ @Override public void initiateDocument() { Integer previousYearParam = new Integer(SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear().intValue() - 1); setPostingYear(previousYearParam); } /** * This method calls the super class's overridden method to perform the general customization actions, then calls the * YearEndDocumentUtil matching method to perform year end specific customization activities. * * @param accountingDocument The accounting document containing the general ledger pending entries being customized. * @param accountingLine The accounting line the explicit general ledger pending entry was generated from. * @param explicitEntry The explicit general ledger pending entry to be customized. * * @see org.kuali.kfs.fp.document.validation.impl.BudgetAdjustmentDocumentRule#customizeExplicitGeneralLedgerPendingEntry(org.kuali.rice.krad.document.AccountingDocument, * org.kuali.rice.krad.bo.AccountingLine, org.kuali.module.gl.bo.GeneralLedgerPendingEntry) * @see YearEndDocumentUtil#customizeExplicitGeneralLedgerPendingEntry(TransactionalDocument, AccountingLine, * GeneralLedgerPendingEntry) */ @Override public void customizeExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntry explicitEntry) { super.customizeExplicitGeneralLedgerPendingEntry(postable, explicitEntry); AccountingLine accountingLine = (AccountingLine)postable; SpringContext.getBean(YearEndPendingEntryService.class).customizeExplicitGeneralLedgerPendingEntry(this, accountingLine, explicitEntry); } /** * Overridden to populate object code from last year's offset definition * @see org.kuali.kfs.sys.document.AccountingDocumentBase#customizeOffsetGeneralLedgerPendingEntry(org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntrySourceDetail, org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry, org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry) */ @Override public boolean customizeOffsetGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail accountingLine, GeneralLedgerPendingEntry explicitEntry, GeneralLedgerPendingEntry offsetEntry) { boolean success = super.customizeOffsetGeneralLedgerPendingEntry(accountingLine, explicitEntry, offsetEntry); success &= SpringContext.getBean(YearEndPendingEntryService.class).customizeOffsetGeneralLedgerPendingEntry(this, accountingLine, explicitEntry, offsetEntry); return success; } /** * This method retrieves the year end transfer of funds document type code, which is defined as a constant in * TransferOfFundsDocumentRuleConstants. * * @return The value defined in the constants class for year end transfer of funds document type code. * * @see org.kuali.kfs.fp.document.validation.impl.BudgetAdjustmentDocumentRule#getTransferDocumentType() * @see org.kuali.kfs.fp.document.validation.impl.TransferOfFundsDocumentRuleConstants#YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE */ @Override protected String getTransferDocumentType() { return YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE; } @Override public Class<? extends AccountingDocument> getDocumentClassForAccountingLineValueAllowedValidation() { return BudgetAdjustmentDocument.class; } @Override public void setAccountingPeriod(AccountingPeriod accountingPeriod) { //Need to override this method to set the posting year and //posting period code so that we can have period 13 in the document's //table in the database so that it's consistent with the GL Entry's //posting year and posting period. YearEndPendingEntryService yearEndPendingEntryService = SpringContext.getBean(YearEndPendingEntryService.class); setPostingYear(yearEndPendingEntryService.getPreviousFiscalYear()); this.setPostingPeriodCode(yearEndPendingEntryService.getFinalAccountingPeriod()); } }