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
017 package org.kuali.kfs.fp.document;
018
019 import java.util.List;
020
021 import org.kuali.kfs.fp.businessobject.CapitalAssetInformation;
022 import org.kuali.kfs.integration.cam.CapitalAssetManagementModuleService;
023 import org.kuali.kfs.sys.KFSConstants;
024 import org.kuali.kfs.sys.businessobject.AccountingLine;
025 import org.kuali.kfs.sys.businessobject.ElectronicPaymentClaim;
026 import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
027 import org.kuali.kfs.sys.context.SpringContext;
028 import org.kuali.kfs.sys.document.AccountingDocumentBase;
029 import org.kuali.kfs.sys.document.AmountTotaling;
030 import org.kuali.kfs.sys.document.Correctable;
031 import org.kuali.kfs.sys.document.ElectronicPaymentClaiming;
032 import org.kuali.kfs.sys.document.service.DebitDeterminerService;
033 import org.kuali.kfs.sys.service.ElectronicPaymentClaimingService;
034 import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO;
035 import org.kuali.rice.kns.document.Copyable;
036 import org.kuali.rice.kns.rule.event.KualiDocumentEvent;
037 import org.kuali.rice.kns.rule.event.SaveDocumentEvent;
038 import org.kuali.rice.kns.service.DataDictionaryService;
039 import org.kuali.rice.kns.util.ObjectUtils;
040
041 /**
042 * The Distribution of Income and Expense (DI) document is used to distribute income or expense, or assets and liabilities. Amounts
043 * being distributed are usually the result of an accumulation of transactions that need to be divided up between various accounts.
044 */
045 public class DistributionOfIncomeAndExpenseDocument extends AccountingDocumentBase implements Copyable, Correctable, AmountTotaling, ElectronicPaymentClaiming, CapitalAssetEditable {
046 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(DistributionOfIncomeAndExpenseDocument.class);
047 protected List<ElectronicPaymentClaim> electronicPaymentClaims;
048
049 protected transient CapitalAssetInformation capitalAssetInformation;
050 protected transient CapitalAssetManagementModuleService capitalAssetManagementModuleService;
051
052
053 /**
054 * Constructs a DistributionOfIncomeAndExpenseDocument.java.
055 */
056 public DistributionOfIncomeAndExpenseDocument() {
057 super();
058 }
059
060
061 /**
062 * @see org.kuali.kfs.sys.document.AccountingDocumentBase#buildListOfDeletionAwareLists()
063 */
064 @Override
065 public List buildListOfDeletionAwareLists() {
066 List<List> managedLists = super.buildListOfDeletionAwareLists();
067 if (ObjectUtils.isNotNull(getCapitalAssetInformation()) && ObjectUtils.isNotNull(getCapitalAssetInformation().getCapitalAssetInformationDetails())) {
068 managedLists.add(getCapitalAssetInformation().getCapitalAssetInformationDetails());
069 }
070 return managedLists;
071 }
072
073 /**
074 * @see org.kuali.kfs.sys.document.AccountingDocument#getSourceAccountingLinesSectionTitle()
075 */
076 @Override
077 public String getSourceAccountingLinesSectionTitle() {
078 return KFSConstants.FROM;
079 }
080
081 /**
082 * @see org.kuali.kfs.sys.document.AccountingDocument#getTargetAccountingLinesSectionTitle()
083 */
084 @Override
085 public String getTargetAccountingLinesSectionTitle() {
086 return KFSConstants.TO;
087 }
088
089 /**
090 * Return true if account line is debit
091 *
092 * @param financialDocument submitted accounting document
093 * @param accountingLine accounting line from accounting document
094 * @return true is account line is debit
095 * @see IsDebitUtils#isDebitConsideringSectionAndTypePositiveOnly(FinancialDocumentRuleBase, FinancialDocument, AccountingLine)
096 * @see org.kuali.rice.kns.rule.AccountingLineRule#isDebit(org.kuali.rice.kns.document.FinancialDocument,
097 * org.kuali.rice.kns.bo.AccountingLine)
098 */
099 public boolean isDebit(GeneralLedgerPendingEntrySourceDetail postable) {
100 DebitDeterminerService isDebitUtils = SpringContext.getBean(DebitDeterminerService.class);
101 return isDebitUtils.isDebitConsideringSectionAndTypePositiveOnly(this, (AccountingLine) postable);
102 }
103
104 /**
105 * @see org.kuali.kfs.sys.document.ElectronicPaymentClaiming#declaimElectronicPaymentClaims()
106 */
107 public void declaimElectronicPaymentClaims() {
108 SpringContext.getBean(ElectronicPaymentClaimingService.class).declaimElectronicPaymentClaimsForDocument(this);
109 }
110
111 /**
112 * Gets the electronicPaymentClaims attribute.
113 *
114 * @return Returns the electronicPaymentClaims.
115 */
116 public List<ElectronicPaymentClaim> getElectronicPaymentClaims() {
117 return electronicPaymentClaims;
118 }
119
120 /**
121 * Sets the electronicPaymentClaims attribute value.
122 *
123 * @param electronicPaymentClaims The electronicPaymentClaims to set.
124 * @deprecated
125 */
126 public void setElectronicPaymentClaims(List<ElectronicPaymentClaim> electronicPaymentClaims) {
127 this.electronicPaymentClaims = electronicPaymentClaims;
128 }
129
130 /**
131 * Gets the capitalAssetInformation attribute.
132 *
133 * @return Returns the capitalAssetInformation.
134 */
135 public CapitalAssetInformation getCapitalAssetInformation() {
136 return ObjectUtils.isNull(capitalAssetInformation) ? null : capitalAssetInformation;
137 }
138
139 /**
140 * Sets the capitalAssetInformation attribute value.
141 *
142 * @param capitalAssetInformation The capitalAssetInformation to set.
143 */
144 @Deprecated
145 public void setCapitalAssetInformation(CapitalAssetInformation capitalAssetInformation) {
146 this.capitalAssetInformation = capitalAssetInformation;
147 }
148
149
150 /**
151 * @see org.kuali.kfs.sys.document.GeneralLedgerPostingDocumentBase#doRouteStatusChange()
152 */
153 @Override
154 public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) {
155 super.doRouteStatusChange(statusChangeEvent);
156 this.getCapitalAssetManagementModuleService().deleteDocumentAssetLocks(this);
157 }
158
159
160 /**
161 * @see org.kuali.rice.kns.document.DocumentBase#postProcessSave(org.kuali.rice.kns.rule.event.KualiDocumentEvent)
162 */
163 @Override
164 public void postProcessSave(KualiDocumentEvent event) {
165 super.postProcessSave(event);
166 if (!(event instanceof SaveDocumentEvent)) { // don't lock until they route
167 String documentTypeName = SpringContext.getBean(DataDictionaryService.class).getDocumentTypeNameByClass(this.getClass());
168 this.getCapitalAssetManagementModuleService().generateCapitalAssetLock(this, documentTypeName);
169 }
170 }
171
172
173 /**
174 * @return CapitalAssetManagementModuleService
175 */
176 CapitalAssetManagementModuleService getCapitalAssetManagementModuleService() {
177 if (capitalAssetManagementModuleService == null) {
178 capitalAssetManagementModuleService = SpringContext.getBean(CapitalAssetManagementModuleService.class);
179 }
180 return capitalAssetManagementModuleService;
181 }
182 }