/*
* 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());
}
}