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.pdp.businessobject; 018 019 import java.util.ArrayList; 020 import java.util.Iterator; 021 import java.util.LinkedHashMap; 022 import java.util.List; 023 024 import org.apache.commons.lang.ObjectUtils; 025 import org.kuali.kfs.pdp.PdpPropertyConstants; 026 import org.kuali.kfs.pdp.service.PaymentGroupService; 027 import org.kuali.kfs.sys.context.SpringContext; 028 import org.kuali.rice.kns.bo.TransientBusinessObjectBase; 029 import org.kuali.rice.kns.service.BusinessObjectService; 030 import org.kuali.rice.kns.util.KualiDecimal; 031 import org.kuali.rice.kns.util.KualiInteger; 032 033 /** 034 * This class collects the summary information for payment Format Process 035 */ 036 public class FormatProcessSummary extends TransientBusinessObjectBase { 037 038 private List<ProcessSummary> processSummaryList; 039 private KualiInteger totalCount; 040 private KualiDecimal totalAmount; 041 private KualiInteger processId; 042 043 /** 044 * Constructs a FormatProcessSummary.java. 045 */ 046 public FormatProcessSummary() { 047 super(); 048 processSummaryList = new ArrayList<ProcessSummary>(); 049 totalCount = KualiInteger.ZERO; 050 totalAmount = KualiDecimal.ZERO; 051 } 052 053 /** 054 * Add the payment detail info to our summary list 055 * 056 * @param paymentGroup 057 */ 058 public void add(PaymentGroup paymentGroup) { 059 ProcessSummary ps = findProcessSummary(paymentGroup); 060 061 // If it's not in our list, add it 062 if (ps == null) { 063 ps = new ProcessSummary(); 064 ps.setBeginDisbursementNbr(KualiInteger.ZERO); 065 ps.setCustomer(paymentGroup.getBatch().getCustomerProfile()); 066 ps.setDisbursementType(paymentGroup.getDisbursementType()); 067 ps.setEndDisbursementNbr(KualiInteger.ZERO); 068 ps.setProcess(paymentGroup.getProcess()); 069 ps.setProcessTotalAmount(KualiDecimal.ZERO); 070 ps.setProcessTotalCount(KualiInteger.ZERO); 071 ps.setSortGroupId(new KualiInteger(SpringContext.getBean(PaymentGroupService.class).getSortGroupId(paymentGroup))); 072 processSummaryList.add(ps); 073 074 // if first one added set the process id 075 if (processId == null) { 076 processId = paymentGroup.getProcessId(); 077 } 078 } 079 080 // Update the total & count 081 ps.setProcessTotalAmount(ps.getProcessTotalAmount().add(paymentGroup.getNetPaymentAmount())); 082 ps.setProcessTotalCount(new KualiInteger(ps.getProcessTotalCount().intValue() + paymentGroup.getPaymentDetails().size())); 083 totalAmount = totalAmount.add(paymentGroup.getNetPaymentAmount()); 084 totalCount = totalCount.add(new KualiInteger(paymentGroup.getPaymentDetails().size())); 085 } 086 087 /** 088 * Save all the process summary records 089 * 090 * @param pdd 091 */ 092 public void save() { 093 for (Iterator<ProcessSummary> iter = processSummaryList.iterator(); iter.hasNext();) { 094 ProcessSummary ps = (ProcessSummary) iter.next(); 095 096 SpringContext.getBean(BusinessObjectService.class).save(ps); 097 } 098 } 099 100 /** 101 * This method checks if we already have a summary record. 102 * @param paymentGroup 103 * @return If we we already have a summary record return it, if not, return null; 104 */ 105 private ProcessSummary findProcessSummary(PaymentGroup paymentGroup) { 106 107 for (Iterator<ProcessSummary> iter = processSummaryList.iterator(); iter.hasNext();) { 108 ProcessSummary processSummary = (ProcessSummary) iter.next(); 109 110 if(ObjectUtils.equals(processSummary.getCustomer(), paymentGroup.getBatch().getCustomerProfile()) && ObjectUtils.equals(processSummary.getDisbursementType(), paymentGroup.getDisbursementType()) && (processSummary.getSortGroupId().intValue()==SpringContext.getBean(PaymentGroupService.class).getSortGroupId(paymentGroup)) && ObjectUtils.equals(processSummary.getProcess(), paymentGroup.getProcess())) { 111 return processSummary; 112 } 113 } 114 return null; 115 } 116 117 /** 118 * @param pg Update the disbursement number information 119 * @param range 120 */ 121 public void setDisbursementNumber(PaymentGroup paymentGroup, Integer disbursementNumber) { 122 ProcessSummary processSummary = findProcessSummary(paymentGroup); 123 if (processSummary != null) { 124 if (processSummary.getBeginDisbursementNbr().isZero()) { 125 processSummary.setBeginDisbursementNbr(new KualiInteger(disbursementNumber)); 126 processSummary.setEndDisbursementNbr(new KualiInteger(disbursementNumber)); 127 } 128 else { 129 processSummary.setEndDisbursementNbr(new KualiInteger(disbursementNumber)); 130 } 131 } 132 } 133 134 /** 135 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 136 */ 137 @SuppressWarnings("rawtypes") 138 @Override 139 protected LinkedHashMap toStringMapper() { 140 LinkedHashMap<String, List<ProcessSummary>> m = new LinkedHashMap<String, List<ProcessSummary>>(); 141 142 m.put(PdpPropertyConstants.FormatProcessSummary.PROCESS_SUMMARY, this.processSummaryList); 143 144 return m; 145 } 146 147 /** 148 * This method gets the total amount. 149 * @return totalAmount 150 */ 151 public KualiDecimal getTotalAmount() { 152 return totalAmount; 153 } 154 155 /** 156 * This method sets the total amount. 157 * @param totalAmount 158 */ 159 public void setTotalAmount(KualiDecimal totalAmount) { 160 this.totalAmount = totalAmount; 161 } 162 163 /** 164 * This method gets the total count. 165 * @return totalCount 166 */ 167 public KualiInteger getTotalCount() { 168 return totalCount; 169 } 170 171 /** 172 * This method sets the total count. 173 * @param totalCount 174 */ 175 public void setTotalCount(KualiInteger totalCount) { 176 this.totalCount = totalCount; 177 } 178 179 /** 180 * This method retrieves a specific process summary from the list, by index 181 * 182 * @param index the index of the results to retrieve the process summary from 183 * @return a ProcessSummary 184 */ 185 public ProcessSummary getProcessSummary(int index) { 186 if (index >= processSummaryList.size()) { 187 for (int i = processSummaryList.size(); i <= index; i++) { 188 processSummaryList.add(new ProcessSummary()); 189 } 190 } 191 return (ProcessSummary) processSummaryList.get(index); 192 } 193 194 /** 195 * This method sets a process summary value at a given index in the process summary list. 196 * 197 * @param key the index 198 * @param value the new value 199 */ 200 public void setProcessSummary(int key, ProcessSummary value) { 201 processSummaryList.set(key, value); 202 } 203 204 /** 205 * This method gets the process summary list 206 * @return processSummaryList 207 */ 208 public List<ProcessSummary> getProcessSummaryList() { 209 return processSummaryList; 210 } 211 212 /** 213 * This method sets the process summary list. 214 * @param processSummaryList 215 */ 216 public void setProcessSummaryList(List<ProcessSummary> processSummaryList) { 217 this.processSummaryList = processSummaryList; 218 } 219 220 /** 221 * This method gets the process id. 222 * @return the processId 223 */ 224 public KualiInteger getProcessId() { 225 return processId; 226 } 227 228 /** 229 * This method sets the process id. 230 * @param processId 231 */ 232 public void setProcessId(KualiInteger processId) { 233 this.processId = processId; 234 } 235 }