001/*
002 * Copyright 2006 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
017package org.kuali.ole.fp.document;
018
019import static org.kuali.ole.fp.document.validation.impl.TransferOfFundsDocumentRuleConstants.YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE;
020
021import org.kuali.ole.fp.document.service.YearEndPendingEntryService;
022import org.kuali.ole.sys.businessobject.AccountingLine;
023import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry;
024import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
025import org.kuali.ole.sys.context.SpringContext;
026import org.kuali.ole.sys.document.AccountingDocument;
027import org.kuali.ole.sys.service.UniversityDateService;
028
029
030/**
031 * Year End version of the <code>BudgetAdjustmentDocument</code>
032 */
033public class YearEndBudgetAdjustmentDocument extends BudgetAdjustmentDocument implements YearEndDocument {
034
035    /**
036     * Constructs a YearEndBudgetAdjustmentDocument.
037     */
038    public YearEndBudgetAdjustmentDocument() {
039        super();
040    }
041
042    /**
043     * set posting year to previous fiscal year
044     */
045    public void initiateDocument() {
046        Integer previousYearParam = new Integer(SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear().intValue() - 1);
047        setPostingYear(previousYearParam);
048    }
049    
050    /**
051     * This method calls the super class's overridden method to perform the general customization actions, then calls the 
052     * YearEndDocumentUtil matching method to perform year end specific customization activities.
053     * 
054     * @param accountingDocument The accounting document containing the general ledger pending entries being customized.
055     * @param accountingLine The accounting line the explicit general ledger pending entry was generated from.
056     * @param explicitEntry The explicit general ledger pending entry to be customized.
057     * 
058     * @see org.kuali.ole.fp.document.validation.impl.BudgetAdjustmentDocumentRule#customizeExplicitGeneralLedgerPendingEntry(org.kuali.rice.krad.document.AccountingDocument,
059     *      org.kuali.rice.krad.bo.AccountingLine, org.kuali.module.gl.bo.GeneralLedgerPendingEntry)
060     * @see YearEndDocumentUtil#customizeExplicitGeneralLedgerPendingEntry(TransactionalDocument, AccountingLine,
061     *      GeneralLedgerPendingEntry)
062     */
063    @Override
064    public void customizeExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntry explicitEntry) {
065        super.customizeExplicitGeneralLedgerPendingEntry(postable, explicitEntry);
066        AccountingLine accountingLine = (AccountingLine)postable;
067        SpringContext.getBean(YearEndPendingEntryService.class).customizeExplicitGeneralLedgerPendingEntry(this, accountingLine, explicitEntry);
068    }
069
070    /**
071     * Overridden to populate object code from last year's offset definition
072     * @see org.kuali.ole.sys.document.AccountingDocumentBase#customizeOffsetGeneralLedgerPendingEntry(org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySourceDetail, org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry, org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry)
073     */
074    @Override
075    public boolean customizeOffsetGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySourceDetail accountingLine, GeneralLedgerPendingEntry explicitEntry, GeneralLedgerPendingEntry offsetEntry) {
076        boolean success = super.customizeOffsetGeneralLedgerPendingEntry(accountingLine, explicitEntry, offsetEntry);
077        success &= SpringContext.getBean(YearEndPendingEntryService.class).customizeOffsetGeneralLedgerPendingEntry(this, accountingLine, explicitEntry, offsetEntry);
078        return success;
079    }
080    
081    /**
082     * This method retrieves the year end transfer of funds document type code, which is defined as a constant in 
083     * TransferOfFundsDocumentRuleConstants.
084     * 
085     * @return The value defined in the constants class for year end transfer of funds document type code.
086     * 
087     * @see org.kuali.ole.fp.document.validation.impl.BudgetAdjustmentDocumentRule#getTransferDocumentType()
088     * @see org.kuali.ole.fp.document.validation.impl.TransferOfFundsDocumentRuleConstants#YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE
089     */
090    @Override
091    protected String getTransferDocumentType() {
092        return YEAR_END_TRANSFER_OF_FUNDS_DOC_TYPE_CODE;
093    }
094    
095    @Override
096    public Class<? extends AccountingDocument> getDocumentClassForAccountingLineValueAllowedValidation() {
097        return BudgetAdjustmentDocument.class;
098    }
099}