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.pdp.businessobject;
017    
018    import java.sql.Timestamp;
019    import java.text.ParseException;
020    import java.util.ArrayList;
021    import java.util.Date;
022    import java.util.LinkedHashMap;
023    import java.util.List;
024    
025    import org.kuali.kfs.pdp.PdpPropertyConstants;
026    import org.kuali.kfs.sys.KFSPropertyConstants;
027    import org.kuali.kfs.sys.context.SpringContext;
028    import org.kuali.rice.kns.bo.TransientBusinessObjectBase;
029    import org.kuali.rice.kns.service.DateTimeService;
030    import org.kuali.rice.kns.util.KualiDecimal;
031    import org.kuali.rice.kns.util.KualiInteger;
032    
033    /**
034     * Represents the parsed contents of an incoming payment file.
035     */
036    public class PaymentFileLoad extends TransientBusinessObjectBase {
037        // header fields
038        private String chart;
039        private String unit;
040        private String subUnit;
041        private Timestamp creationDate;
042    
043        // trailer fields
044        private int paymentCount;
045        private KualiDecimal paymentTotalAmount;
046    
047        // data
048        private List<PaymentGroup> paymentGroups;
049    
050        // load vars
051        private KualiInteger batchId;
052        private boolean fileThreshold;
053        private boolean detailThreshold;
054        private boolean taxEmailRequired;
055    
056        private List<PaymentDetail> thresholdPaymentDetails;
057        private CustomerProfile customer;
058    
059        private boolean passedValidation;
060    
061        public PaymentFileLoad() {
062            super();
063            paymentGroups = new ArrayList<PaymentGroup>();
064            fileThreshold = false;
065            detailThreshold = false;
066            taxEmailRequired = false;
067            passedValidation = false;
068            thresholdPaymentDetails = new ArrayList<PaymentDetail>();
069        }
070    
071        /**
072         * @return number of detail records loaded
073         */
074        public int getActualPaymentCount() {
075            int count = 0;
076    
077            for (PaymentGroup paymentGroup : paymentGroups) {
078                for (PaymentDetail paymentDetail : paymentGroup.getPaymentDetails()) {
079                    count++;
080                }
081            }
082    
083            return count;
084        }
085    
086        /**
087         * @return total amount of all payments
088         */
089        public KualiDecimal getCalculatedPaymentTotalAmount() {
090            KualiDecimal totalAmount = KualiDecimal.ZERO;
091    
092            for (PaymentGroup paymentGroup : paymentGroups) {
093                for (PaymentDetail paymentDetail : paymentGroup.getPaymentDetails()) {
094                    totalAmount = totalAmount.add(paymentDetail.getAccountTotal());
095                }
096            }
097    
098            return totalAmount;
099        }
100    
101        /**
102         * Gets the chart attribute.
103         * 
104         * @return Returns the chart.
105         */
106        public String getChart() {
107            return chart;
108        }
109    
110        /**
111         * Sets the chart attribute value.
112         * 
113         * @param chart The chart to set.
114         */
115        public void setChart(String chart) {
116            this.chart = chart;
117        }
118    
119        /**
120         * Gets the unit attribute.
121         * 
122         * @return Returns the unit.
123         */
124        public String getUnit() {
125            return unit;
126        }
127    
128        /**
129         * Sets the unit attribute value.
130         * 
131         * @param unit The unit to set.
132         */
133        public void setUnit(String unit) {
134            this.unit = unit;
135        }
136    
137        /**
138         * Gets the subUnit attribute.
139         * 
140         * @return Returns the subUnit.
141         */
142        public String getSubUnit() {
143            return subUnit;
144        }
145    
146        /**
147         * Sets the subUnit attribute value.
148         * 
149         * @param subUnit The subUnit to set.
150         */
151        public void setSubUnit(String subUnit) {
152            this.subUnit = subUnit;
153        }
154    
155        /**
156         * Gets the creationDate attribute.
157         * 
158         * @return Returns the creationDate.
159         */
160        public Timestamp getCreationDate() {
161            return creationDate;
162        }
163    
164        /**
165         * Sets the creationDate attribute value.
166         * 
167         * @param creationDate The creationDate to set.
168         */
169        public void setCreationDate(Timestamp creationDate) {
170            this.creationDate = creationDate;
171        }
172        
173        /**
174         * Takes a <code>String</code> and attempt to format as <code>Timestamp</code for setting the
175         * creationDate field
176         * 
177         * @param creationDate Timestamp as string
178         */
179        public void setCreationDate(String creationDate) {
180            try {
181                this.creationDate = SpringContext.getBean(DateTimeService.class).convertToSqlTimestamp(creationDate);
182            }
183            catch (ParseException e) {
184                throw new RuntimeException("Unable to convert create timestamp value " + creationDate + " :" + e.getMessage(), e);
185            }
186        }
187    
188        /**
189         * Gets the paymentCount attribute.
190         * 
191         * @return Returns the paymentCount.
192         */
193        public int getPaymentCount() {
194            return paymentCount;
195        }
196    
197        /**
198         * Sets the paymentCount attribute value.
199         * 
200         * @param paymentCount The paymentCount to set.
201         */
202        public void setPaymentCount(int paymentCount) {
203            this.paymentCount = paymentCount;
204        }
205    
206        /**
207         * Helper method to set the paymentCount int from a string.
208         * 
209         * @param paymentCount String payment count
210         */
211        public void setPaymentCount(String paymentCount) {
212            this.paymentCount = Integer.parseInt(paymentCount);
213        }
214    
215        /**
216         * Gets the paymentTotalAmount attribute.
217         * 
218         * @return Returns the paymentTotalAmount.
219         */
220        public KualiDecimal getPaymentTotalAmount() {
221            return paymentTotalAmount;
222        }
223    
224        /**
225         * Sets the paymentTotalAmount attribute value.
226         * 
227         * @param paymentTotalAmount The paymentTotalAmount to set.
228         */
229        public void setPaymentTotalAmount(KualiDecimal paymentTotalAmount) {
230            this.paymentTotalAmount = paymentTotalAmount;
231        }
232        
233        public void setPaymentTotalAmount(String paymentTotalAmount) {
234            this.paymentTotalAmount = new KualiDecimal(paymentTotalAmount);
235        }
236    
237        /**
238         * Gets the paymentGroups attribute.
239         * 
240         * @return Returns the paymentGroups.
241         */
242        public List<PaymentGroup> getPaymentGroups() {
243            return paymentGroups;
244        }
245    
246        /**
247         * Sets the paymentGroups attribute value.
248         * 
249         * @param paymentGroups The paymentGroups to set.
250         */
251        public void setPaymentGroups(List<PaymentGroup> paymentGroups) {
252            this.paymentGroups = paymentGroups;
253        }
254    
255        /**
256         * Adds a <code>PaymentGroup</code> to the group <code>List</code>
257         * 
258         * @param paymentGroup <code>PaymentGroup</code> to add
259         */
260        public void addPaymentGroup(PaymentGroup paymentGroup) {
261            this.paymentGroups.add(paymentGroup);
262        }
263    
264        /**
265         * Gets the fileThreshold attribute.
266         * 
267         * @return Returns the fileThreshold.
268         */
269        public boolean isFileThreshold() {
270            return fileThreshold;
271        }
272    
273        /**
274         * Sets the fileThreshold attribute value.
275         * 
276         * @param fileThreshold The fileThreshold to set.
277         */
278        public void setFileThreshold(boolean fileThreshold) {
279            this.fileThreshold = fileThreshold;
280        }
281    
282        /**
283         * Gets the detailThreshold attribute.
284         * 
285         * @return Returns the detailThreshold.
286         */
287        public boolean isDetailThreshold() {
288            return detailThreshold;
289        }
290    
291        /**
292         * Sets the detailThreshold attribute value.
293         * 
294         * @param detailThreshold The detailThreshold to set.
295         */
296        public void setDetailThreshold(boolean detailThreshold) {
297            this.detailThreshold = detailThreshold;
298        }
299    
300    
301        /**
302         * Gets the batchId attribute.
303         * 
304         * @return Returns the batchId.
305         */
306        public KualiInteger getBatchId() {
307            return batchId;
308        }
309    
310        /**
311         * Sets the batchId attribute value.
312         * 
313         * @param batchId The batchId to set.
314         */
315        public void setBatchId(KualiInteger batchId) {
316            this.batchId = batchId;
317        }
318    
319        /**
320         * Gets the taxEmailRequired attribute.
321         * 
322         * @return Returns the taxEmailRequired.
323         */
324        public boolean isTaxEmailRequired() {
325            return taxEmailRequired;
326        }
327    
328        /**
329         * Sets the taxEmailRequired attribute value.
330         * 
331         * @param taxEmailRequired The taxEmailRequired to set.
332         */
333        public void setTaxEmailRequired(boolean taxEmailRequired) {
334            this.taxEmailRequired = taxEmailRequired;
335        }
336    
337        /**
338         * Gets the thresholdPaymentDetails attribute.
339         * 
340         * @return Returns the thresholdPaymentDetails.
341         */
342        public List<PaymentDetail> getThresholdPaymentDetails() {
343            return thresholdPaymentDetails;
344        }
345    
346        /**
347         * Sets the thresholdPaymentDetails attribute value.
348         * 
349         * @param thresholdPaymentDetails The thresholdPaymentDetails to set.
350         */
351        public void setThresholdPaymentDetails(List<PaymentDetail> thresholdPaymentDetails) {
352            this.thresholdPaymentDetails = thresholdPaymentDetails;
353        }
354    
355        /**
356         * Gets the passedValidation attribute.
357         * 
358         * @return Returns the passedValidation.
359         */
360        public boolean isPassedValidation() {
361            return passedValidation;
362        }
363    
364        /**
365         * Sets the passedValidation attribute value.
366         * 
367         * @param passedValidation The passedValidation to set.
368         */
369        public void setPassedValidation(boolean passedValidation) {
370            this.passedValidation = passedValidation;
371        }
372    
373    
374        /**
375         * Gets the customer attribute.
376         * 
377         * @return Returns the customer.
378         */
379        public CustomerProfile getCustomer() {
380            return customer;
381        }
382    
383        /**
384         * Sets the customer attribute value.
385         * 
386         * @param customer The customer to set.
387         */
388        public void setCustomer(CustomerProfile customer) {
389            this.customer = customer;
390        }
391    
392        @Override
393        protected LinkedHashMap toStringMapper() {
394            LinkedHashMap m = new LinkedHashMap();
395    
396            m.put(KFSPropertyConstants.CHART, this.chart);
397            m.put(PdpPropertyConstants.UNIT, this.unit);
398            m.put(PdpPropertyConstants.SUB_UNIT, this.subUnit);
399            m.put(PdpPropertyConstants.CREATION_DATE, this.creationDate);
400    
401            return m;
402        }
403    
404    }