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.ar.businessobject;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.LinkedHashMap;
021    import java.util.List;
022    
023    import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader;
024    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
025    import org.kuali.rice.kns.util.KualiDecimal;
026    
027    /**
028     * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu)
029     */
030    public class NonAppliedHolding extends PersistableBusinessObjectBase {
031    
032            private String referenceFinancialDocumentNumber;
033            private KualiDecimal financialDocumentLineAmount = KualiDecimal.ZERO;
034            private String customerNumber;
035            private Customer customer;
036        private KualiDecimal availableUnappliedAmount = KualiDecimal.ZERO;
037        private KualiDecimal appliedUnappliedAmount = KualiDecimal.ZERO;
038        private Collection<NonInvoicedDistribution> nonInvoicedDistributions;
039        private Collection<NonAppliedDistribution> nonAppliedDistributions;
040        private FinancialSystemDocumentHeader documentHeader;
041    
042            /**
043             * Default constructor.
044             */
045            public NonAppliedHolding() {
046            nonAppliedDistributions = new ArrayList<NonAppliedDistribution>();
047            }
048    
049            /**
050             * Gets the referenceFinancialDocumentNumber attribute.
051             * 
052             * @return Returns the referenceFinancialDocumentNumber
053             * 
054             */
055            public String getReferenceFinancialDocumentNumber() { 
056                    return referenceFinancialDocumentNumber;
057            }
058    
059            /**
060             * Sets the referenceFinancialDocumentNumber attribute.
061             * 
062             * @param referenceFinancialDocumentNumber The referenceFinancialDocumentNumber to set.
063             * 
064             */
065            public void setReferenceFinancialDocumentNumber(String referenceFinancialDocumentNumber) {
066                    this.referenceFinancialDocumentNumber = referenceFinancialDocumentNumber;
067            }
068    
069    
070            /**
071             * Gets the financialDocumentLineAmount attribute.
072             * 
073             * @return Returns the financialDocumentLineAmount
074             * 
075             */
076            public KualiDecimal getFinancialDocumentLineAmount() { 
077                    return financialDocumentLineAmount;
078            }
079    
080            /**
081             * Sets the financialDocumentLineAmount attribute.
082             * 
083             * @param financialDocumentLineAmount The financialDocumentLineAmount to set.
084             * 
085             */
086            public void setFinancialDocumentLineAmount(KualiDecimal financialDocumentLineAmount) {
087                    this.financialDocumentLineAmount = financialDocumentLineAmount;
088            }
089    
090    
091            /**
092             * Gets the customerNumber attribute.
093             * 
094             * @return Returns the customerNumber
095             * 
096             */
097            public String getCustomerNumber() { 
098                    return customerNumber;
099            }
100    
101            /**
102             * Sets the customerNumber attribute.
103             * 
104             * @param customerNumber The customerNumber to set.
105             * 
106             */
107            public void setCustomerNumber(String customerNumber) {
108                    this.customerNumber = customerNumber;
109            }
110    
111    
112            /**
113             * Gets the customer attribute.
114             * 
115             * @return Returns the customer
116             * 
117             */
118            public Customer getCustomer() { 
119                    return customer;
120            }
121    
122            /**
123             * Sets the customer attribute.
124             * 
125             * @param customer The customer to set.
126             * @deprecated
127             */
128            public void setCustomer(Customer customer) {
129                    this.customer = customer;
130            }
131        
132        /**
133         * Gets the nonInvoicedDistributions attribute. 
134         * @return Returns the nonInvoicedDistributions.
135         */
136        public Collection<NonInvoicedDistribution> getNonInvoicedDistributions() {
137            return nonInvoicedDistributions;
138        }
139    
140        /**
141         * Sets the nonInvoicedDistributions attribute value.
142         * @param nonInvoicedDistributions The nonInvoicedDistributions to set.
143         */
144        public void setNonInvoicedDistributions(Collection<NonInvoicedDistribution> nonInvoicedDistributions) {
145            this.nonInvoicedDistributions = nonInvoicedDistributions;
146        }
147    
148            /**
149         * Gets the nonAppliedDistributions attribute. 
150         * @return Returns the nonAppliedDistributions.
151         */
152        public Collection<NonAppliedDistribution> getNonAppliedDistributions() {
153            return nonAppliedDistributions;
154        }
155    
156        /**
157         * Sets the nonAppliedDistributions attribute value.
158         * @param nonAppliedDistributions The nonAppliedDistributions to set.
159         */
160        public void setNonAppliedDistributions(List<NonAppliedDistribution> nonAppliedDistributions) {
161            this.nonAppliedDistributions = nonAppliedDistributions;
162        }
163    
164        /**
165             * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
166             */
167            protected LinkedHashMap toStringMapper() {
168                LinkedHashMap m = new LinkedHashMap();          
169            m.put("referenceFinancialDocumentNumber", this.referenceFinancialDocumentNumber);
170                return m;
171        }
172    
173        /**
174         * Gets the availableUnappliedAmount attribute.
175         * @return Returns the availableUnappliedAmount.
176         */
177        public KualiDecimal getAvailableUnappliedAmount() {
178            //  start with the original unapplied amount
179            KualiDecimal amount = financialDocumentLineAmount;
180            
181            //  subtract any non-invoiced distributions made against it
182            for (NonInvoicedDistribution nonInvoicedDistribution : nonInvoicedDistributions) {
183                amount = amount.subtract(nonInvoicedDistribution.getFinancialDocumentLineAmount());
184            }
185            
186            //  subtract any non-applied distributions made against it
187            for (NonAppliedDistribution nonAppliedDistribution : nonAppliedDistributions) {
188                amount = amount.subtract(nonAppliedDistribution.getFinancialDocumentLineAmount());
189            }
190            return amount;
191        }
192    
193        /**
194         * Gets the appliedUnappliedAmount attribute.
195         * @return Returns the appliedUnappliedAmount.
196         */
197        public KualiDecimal getAppliedUnappliedAmount() {
198            //  start with zero
199            KualiDecimal amount = KualiDecimal.ZERO;
200            
201            //  add any non-invoiced distributions made against it
202            for (NonInvoicedDistribution nonInvoicedDistribution : nonInvoicedDistributions) {
203                amount = amount.add(nonInvoicedDistribution.getFinancialDocumentLineAmount());
204            }
205            
206            //  add any non-applied distributions made against it
207            for (NonAppliedDistribution nonAppliedDistribution : nonAppliedDistributions) {
208                amount = amount.add(nonAppliedDistribution.getFinancialDocumentLineAmount());
209            }
210            return amount;
211        }
212    
213        /**
214         * Sets the documentHeader attribute value.
215         * @param documentHeader.
216         */
217        public FinancialSystemDocumentHeader getDocumentHeader() {
218            return documentHeader;
219        }
220    
221        /**
222         * Sets the documentHeader attribute value.
223         * @param documentHeader.
224         */
225        public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) {
226            this.documentHeader = documentHeader;
227        }
228    
229    }