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.module.endow.document;
017
018 import org.apache.cxf.common.util.StringUtils;
019 import org.kuali.kfs.module.endow.EndowConstants.TransactionSourceTypeCode;
020 import org.kuali.kfs.module.endow.EndowConstants.TransactionSubTypeCode;
021 import org.kuali.kfs.module.endow.businessobject.EndowmentSourceTransactionSecurity;
022 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionSecurity;
023 import org.kuali.kfs.sys.document.AmountTotaling;
024
025 /**
026 * Holding Adjustment (EHA) transaction is available for those times when a number of units of a security held by the
027 * KEMID must be modified without affecting the original cost or carry value of the security tax lot(s).
028 */
029 public class HoldingAdjustmentDocument extends EndowmentTaxLotLinesDocumentBase {
030
031 /**
032 * Constructs a HoldingAdjustmentDocument.java.
033 */
034 public HoldingAdjustmentDocument() {
035 super();
036 setTransactionSourceTypeCode(TransactionSourceTypeCode.MANUAL);
037 setTransactionSubTypeCode(TransactionSubTypeCode.NON_CASH);
038
039 initializeSubType();
040 }
041
042 /**
043 * @see org.kuali.kfs.module.endow.document.EndowmentSecurityDetailsDocumentBase#prepareForSave()
044 */
045 @Override
046 public void prepareForSave() {
047 if (this instanceof AmountTotaling) {
048 getDocumentHeader().setFinancialDocumentTotalAmount(((AmountTotaling) this).getTotalDollarAmount());
049 }
050
051 sourceTransactionSecurities.clear();
052 targetTransactionSecurities.clear();
053
054 // functionality specific to the HoldingAdjustmentDocument. The document will have a source or target security
055 // detail depending on whether the user has entered source or target transaction lines (Decrease or Increase). The UI allows
056 // the user to enter a source security detail by default. This is adjusted before save so that the right security is saved
057 // in the DB.
058 if (this instanceof HoldingAdjustmentDocument) {
059
060 if (!StringUtils.isEmpty(sourceTransactionSecurity.getSecurityID())) {
061
062 if (this.getSourceTransactionLines() != null && this.getSourceTransactionLines().size() > 0) {
063 getSourceTransactionSecurities().add(0, sourceTransactionSecurity);
064 }
065 else if (this.getTargetTransactionLines() != null && this.getTargetTransactionLines().size() > 0) {
066 targetTransactionSecurity.setSecurityID(sourceTransactionSecurity.getSecurityID());
067 targetTransactionSecurity.setRegistrationCode(sourceTransactionSecurity.getRegistrationCode());
068 getTargetTransactionSecurities().add(0, targetTransactionSecurity);
069 }
070 }
071 }
072 }
073
074 /**
075 * @see org.kuali.kfs.module.endow.document.EndowmentSecurityDetailsDocumentBase#getSourceTransactionSecurity()
076 */
077 @Override
078 public EndowmentTransactionSecurity getSourceTransactionSecurity() {
079
080 if (this.sourceTransactionSecurities.size() > 0) {
081 this.sourceTransactionSecurity = (EndowmentSourceTransactionSecurity) this.sourceTransactionSecurities.get(0);
082 }
083 // functionality specific to the HoldingAdjustmentDocument. The document will have a source or target security
084 // detail depending on whether the user has entered source or target transaction lines (Decrease or Increase). The UI
085 // display a source security detail by default so this code will return the target security saved to be displayed on the
086 // source security on the UI.
087 else if (this.targetTransactionSecurities.size() > 0) {
088 this.sourceTransactionSecurity.setSecurityID(this.targetTransactionSecurities.get(0).getSecurityID());
089
090 this.sourceTransactionSecurity.setRegistrationCode(this.targetTransactionSecurities.get(0).getRegistrationCode());
091 }
092 return this.sourceTransactionSecurity;
093
094 }
095 }