View Javadoc
1   /*
2    * Copyright 2006 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    * http://www.opensource.org/licenses/ecl2.php
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.fp.document.web.struts;
17  
18  import java.util.ArrayList;
19  import java.util.List;
20  import java.util.Map;
21  
22  import org.kuali.ole.fp.businessobject.Check;
23  import org.kuali.ole.fp.businessobject.CheckBase;
24  import org.kuali.ole.fp.businessobject.CoinDetail;
25  import org.kuali.ole.fp.businessobject.CurrencyDetail;
26  import org.kuali.ole.fp.businessobject.DepositWizardCashieringCheckHelper;
27  import org.kuali.ole.fp.businessobject.DepositWizardHelper;
28  import org.kuali.ole.fp.businessobject.format.CashReceiptDepositTypeFormatter;
29  import org.kuali.ole.fp.document.CashReceiptDocument;
30  import org.kuali.ole.sys.OLEConstants;
31  import org.kuali.ole.sys.OLEKeyConstants;
32  import org.kuali.ole.sys.businessobject.Bank;
33  import org.kuali.ole.sys.context.SpringContext;
34  import org.kuali.ole.sys.service.BankService;
35  import org.kuali.rice.core.api.util.type.KualiDecimal;
36  import org.kuali.rice.core.web.format.CurrencyFormatter;
37  import org.kuali.rice.kns.util.WebUtils;
38  import org.kuali.rice.kns.web.struts.form.KualiForm;
39  
40  /**
41   * This class is the action form for the deposit document wizard.
42   */
43  public class DepositWizardForm extends KualiForm {
44      private String cashDrawerCampusCode;
45      private String cashManagementDocId;
46  
47      private List<CashReceiptDocument> depositableCashReceipts;
48      private List depositWizardHelpers;
49      private List<Check> depositableCashieringChecks;
50      private transient List<DepositWizardCashieringCheckHelper> depositWizardCashieringCheckHelpers;
51      private List<CashReceiptDocument> checkFreeCashReceipts;
52  
53      // Deposit fields
54      private Bank bank;
55      private String bankCode;
56  
57      private String depositTypeCode;
58      private String depositTicketNumber;
59  
60      private CurrencyDetail currencyDetail;
61      private CoinDetail coinDetail;
62      
63      private KualiDecimal targetDepositAmount;
64      private KualiDecimal currentCheckTotal;
65      
66      // carried over editing modes and document actions to make the bank tags happy
67      protected Map editingMode;
68      protected Map documentActions;
69      
70      protected String noVerifiedCashErrorMessage = "";
71  
72      /**
73       * Constructs a DepositWizardForm class instance.
74       */
75      public DepositWizardForm() {
76          depositableCashReceipts = new ArrayList();
77          depositableCashieringChecks = new ArrayList<Check>();
78          depositWizardHelpers = new ArrayList();
79          depositWizardCashieringCheckHelpers = new ArrayList<DepositWizardCashieringCheckHelper>();
80  
81          setFormatterType("depositTypeCode", CashReceiptDepositTypeFormatter.class);
82          setDefaultBankCode();
83      }
84      
85      /**
86       * Sets the bank code for a new deposit to the setup default for the Cash Management document.
87       */
88      public void setDefaultBankCode() {
89          Bank defaultBank = SpringContext.getBean(BankService.class).getDefaultBankByDocType(OLEConstants.FinancialDocumentTypeCodes.CASH_MANAGEMENT);
90          if (defaultBank != null) {
91              this.bankCode = defaultBank.getBankCode();
92              this.bank = defaultBank;
93          }
94      }
95  
96      /**
97       * @return current value of cashManagementDocId.
98       */
99      public String getCashManagementDocId() {
100         return cashManagementDocId;
101     }
102 
103     /**
104      * Sets the cashManagementDocId attribute value.
105      * 
106      * @param cashManagementDocId The cashManagementDocId to set.
107      */
108     public void setCashManagementDocId(String cashManagementDocId) {
109         this.cashManagementDocId = cashManagementDocId;
110     }
111 
112 
113     /**
114      * @param depositTypeCode
115      */
116     public void setDepositTypeCode(String depositTypeCode) {
117         this.depositTypeCode = depositTypeCode;
118     }
119 
120     /**
121      * @return depositTypeCode
122      */
123     public String getDepositTypeCode() {
124         return depositTypeCode;
125     }
126 
127     /**
128      * Hack to make the translated depositTypeCode more readily available to the JSP
129      * 
130      * @return translated depositTypeCode
131      */
132     public String getDepositTypeString() {
133         CashReceiptDepositTypeFormatter f = new CashReceiptDepositTypeFormatter();
134         return (String) f.format(getDepositTypeCode());
135     }
136 
137 
138     /**
139      * @return List
140      */
141     public List<CashReceiptDocument> getDepositableCashReceipts() {
142         return depositableCashReceipts;
143     }
144 
145     /**
146      * @param cashReceiptsReadyForDeposit
147      */
148     public void setDepositableCashReceipts(List cashReceiptsReadyForDeposit) {
149         this.depositableCashReceipts = cashReceiptsReadyForDeposit;
150     }
151 
152     public CashReceiptDocument getDepositableCashReceipt(int i) {
153         while (depositableCashReceipts.size() <= i) {
154             depositableCashReceipts.add(new CashReceiptDocument());
155         }
156 
157         return (CashReceiptDocument) depositableCashReceipts.get(i);
158     }
159 
160     /**
161      * @return ArrayList
162      */
163     public List getDepositWizardHelpers() {
164         return depositWizardHelpers;
165     }
166 
167     /**
168      * @param depositWizardHelpers
169      */
170     public void setDepositWizardHelpers(List depositWizardHelpers) {
171         this.depositWizardHelpers = depositWizardHelpers;
172     }
173 
174     /**
175      * This method retrieves whether the cash receipt ID at the specified index will be selected or not.
176      * 
177      * @param index
178      * @return DepositWizarHelper
179      */
180     public DepositWizardHelper getDepositWizardHelper(int index) {
181         while (this.depositWizardHelpers.size() <= index) {
182             this.depositWizardHelpers.add(new DepositWizardHelper());
183             // default to no check
184         }
185         return (DepositWizardHelper) this.depositWizardHelpers.get(index);
186     }
187 
188 
189     /**
190      * @return current value of cashDrawerCampusCode.
191      */
192     public String getCashDrawerCampusCode() {
193         return cashDrawerCampusCode;
194     }
195 
196     /**
197      * Sets the cashDrawerCampusCode attribute value.
198      * 
199      * @param cashDrawerCampusCode The cashDrawerCampusCode to set.
200      */
201     public void setCashDrawerCampusCode(String cashDrawerVerificationUnit) {
202         this.cashDrawerCampusCode = cashDrawerVerificationUnit;
203     }
204 
205 
206     /**
207      * @return current value of bankCode.
208      */
209     public String getBankCode() {
210         return bankCode;
211     }
212 
213     /**
214      * Sets the bankCode attribute value.
215      * 
216      * @param bankCode The bankCode to set.
217      */
218     public void setBankCode(String bankCode) {
219         this.bankCode = bankCode;
220     }
221 
222     /**
223      * @return current value of depositTicketNumber.
224      */
225     public String getDepositTicketNumber() {
226         return depositTicketNumber;
227     }
228 
229     /**
230      * Sets the depositTicketNumber attribute value.
231      * 
232      * @param depositTicketNumber The depositTicketNumber to set.
233      */
234     public void setDepositTicketNumber(String depositTicketNumber) {
235         this.depositTicketNumber = depositTicketNumber;
236     }
237 
238     /**
239      * @return current value of bank.
240      */
241     public Bank getBank() {
242         return bank;
243     }
244 
245     /**
246      * Sets the bank attribute value.
247      * 
248      * @param bank The bank to set.
249      */
250     public void setBank(Bank bank) {
251         this.bank = bank;
252     }
253 
254     /**
255      * Gets the coinDetail attribute.
256      * 
257      * @return Returns the coinDetail.
258      */
259     public CoinDetail getCoinDetail() {
260         return coinDetail;
261     }
262 
263 
264     /**
265      * Sets the coinDetail attribute value.
266      * 
267      * @param coinDetail The coinDetail to set.
268      */
269     public void setCoinDetail(CoinDetail coinDetail) {
270         this.coinDetail = coinDetail;
271     }
272 
273 
274     /**
275      * Gets the currencyDetail attribute.
276      * 
277      * @return Returns the currencyDetail.
278      */
279     public CurrencyDetail getCurrencyDetail() {
280         return currencyDetail;
281     }
282 
283 
284     /**
285      * Sets the currencyDetail attribute value.
286      * 
287      * @param currencyDetail The currencyDetail to set.
288      */
289     public void setCurrencyDetail(CurrencyDetail currencyDetail) {
290         this.currencyDetail = currencyDetail;
291     }
292     
293     /**
294      * Retrieves the summed total amount in a currency format with commas.
295      * 
296      * @return String
297      */
298     public String getCurrencyFormattedSumTotalAmount() {
299         return (String) new CurrencyFormatter().format(getTotalDollarAmount());
300     }
301     
302     /**
303      * This method returns the overall total of the document - coin plus check plus cash.
304      * 
305      * @return KualiDecimal
306      */
307     public KualiDecimal getTotalDollarAmount() {
308         KualiDecimal sumTotalAmount = getTotalCoinAmount().add(getTotalCashAmount());
309         return sumTotalAmount;
310     }
311     
312     /**
313      * Gets the totalCoinAmount attribute.
314      * 
315      * @return Returns the totalCoinAmount.
316      */
317     public KualiDecimal getTotalCoinAmount() {
318         return (coinDetail != null) ? coinDetail.getTotalAmount() : KualiDecimal.ZERO;
319     }
320     
321     /**
322      * Gets the totalCashAmount attribute.
323      * 
324      * @return Returns the totalCashAmount.
325      */
326     public KualiDecimal getTotalCashAmount() {
327         return (currencyDetail != null) ? currencyDetail.getTotalAmount() : KualiDecimal.ZERO;
328     }
329 
330     /**
331      * Explains if this deposit form is for creating a final deposit or not
332      * 
333      * @return true if this deposit form will create a final deposit, false if it will create an interim
334      */
335     public boolean isDepositFinal() {
336         return (depositTypeCode.equals(OLEConstants.DepositConstants.DEPOSIT_TYPE_FINAL));
337     }
338 
339     /**
340      * Gets the depositableCashieringChecks attribute.
341      * 
342      * @return Returns the depositableCashieringChecks.
343      */
344     public List<Check> getDepositableCashieringChecks() {
345         return depositableCashieringChecks;
346     }
347 
348     /**
349      * Sets the depositableCashieringChecks attribute value.
350      * 
351      * @param depositableCashieringChecks The depositableCashieringChecks to set.
352      */
353     public void setDepositableCashieringChecks(List<Check> depositableCashieringChecks) {
354         this.depositableCashieringChecks = depositableCashieringChecks;
355     }
356 
357     /**
358      * Return the deposit cashiering check at the given index
359      * 
360      * @param index index of check to retrieve
361      * @return a check
362      */
363     public Check getDepositableCashieringCheck(int index) {
364         while (this.depositableCashieringChecks.size() <= index) {
365             this.depositableCashieringChecks.add(new CheckBase());
366         }
367         return this.depositableCashieringChecks.get(index);
368     }
369 
370     /**
371      * Gets the depositWizardCashieringCheckHelpers attribute.
372      * 
373      * @return Returns the depositWizardCashieringCheckHelpers.
374      */
375     public List<DepositWizardCashieringCheckHelper> getDepositWizardCashieringCheckHelpers() {
376         return depositWizardCashieringCheckHelpers;
377     }
378 
379     /**
380      * Gets the checkFreeCashReceipts attribute.
381      * 
382      * @return Returns the checkFreeCashReceipts.
383      */
384     public List<CashReceiptDocument> getCheckFreeCashReceipts() {
385         return checkFreeCashReceipts;
386     }
387 
388 
389     /**
390      * Sets the checkFreeCashReceipts attribute value.
391      * 
392      * @param checkFreeCashReceipts The checkFreeCashReceipts to set.
393      */
394     public void setCheckFreeCashReceipts(List<CashReceiptDocument> checkFreeCashReceipts) {
395         this.checkFreeCashReceipts = checkFreeCashReceipts;
396     }
397 
398     /**
399      * Retreive a single check free cash receipt
400      * 
401      * @param index the index of the cash receipt
402      * @return a cash receipt document
403      */
404     public CashReceiptDocument getCheckFreeCashReceipt(int index) {
405         while (this.checkFreeCashReceipts.size() <= index) {
406             this.checkFreeCashReceipts.add(new CashReceiptDocument());
407         }
408         return this.checkFreeCashReceipts.get(index);
409     }
410 
411     /**
412      * Sets the depositWizardCashieringCheckHelpers attribute value.
413      * 
414      * @param depositWizardCashieringCheckHelpers The depositWizardCashieringCheckHelpers to set.
415      */
416     public void setDepositWizardCashieringCheckHelpers(List<DepositWizardCashieringCheckHelper> depositWizardCashieringCheckHelpers) {
417         this.depositWizardCashieringCheckHelpers = depositWizardCashieringCheckHelpers;
418     }
419 
420     public DepositWizardCashieringCheckHelper getDepositWizardCashieringCheckHelper(int index) {
421         while (this.depositWizardCashieringCheckHelpers.size() <= index) {
422             this.depositWizardCashieringCheckHelpers.add(new DepositWizardCashieringCheckHelper());
423         }
424         return this.depositWizardCashieringCheckHelpers.get(index);
425     }
426 
427     /**
428      * Gets the documentActions attribute. 
429      * @return Returns the documentActions.
430      */
431     public Map getDocumentActions() {
432         return documentActions; 
433     }
434 
435     /**
436      * Sets the documentActions attribute value.
437      * @param documentActions The documentActions to set.
438      */
439     public void setDocumentActions(Map documentActions) {
440         this.documentActions = documentActions;
441     }
442 
443     /**
444      * Gets the editingMode attribute. 
445      * @return Returns the editingMode.
446      */
447     public Map getEditingMode() {
448         return editingMode;
449     }
450 
451     /**
452      * Sets the editingMode attribute value.
453      * @param editingMode The editingMode to set.
454      */
455     public void setEditingMode(Map editingMode) {
456         this.editingMode = editingMode;
457     }
458     
459     /**
460      * @return the total target amount which needs deposited
461      */
462     public KualiDecimal getTargetDepositAmount() {
463         return targetDepositAmount;
464     }
465 
466     /**
467      * Adds a cash receipt to the target total amount for the given deposit (if the deposit was final)
468      * The amount to add is: confirmed check amount + confirmed currency amount + confirmed coin amount - change request
469      * currency amount - change request coin amount
470      * @param crDoc
471      */
472     public void addCashReceiptToTargetTotal(CashReceiptDocument crDoc) {
473         if (targetDepositAmount == null) {
474             targetDepositAmount = KualiDecimal.ZERO;
475         }
476         if (crDoc.getFinancialSystemDocumentHeader().getFinancialDocumentStatusCode().equals(OLEConstants.DocumentStatusCodes.CashReceipt.VERIFIED) || crDoc.getFinancialSystemDocumentHeader().getFinancialDocumentStatusCode().equals(OLEConstants.DocumentStatusCodes.CashReceipt.FINAL)) {
477             targetDepositAmount = targetDepositAmount.add(crDoc.getTotalConfirmedCheckAmount());
478         }
479         targetDepositAmount = targetDepositAmount.add(crDoc.getConfirmedCurrencyDetail().getTotalAmount()).subtract(crDoc.getChangeCurrencyDetail().getTotalAmount()).add(crDoc.getConfirmedCoinDetail().getTotalAmount()).subtract(crDoc.getChangeCoinDetail().getTotalAmount());
480     }
481 
482     /**
483      * Adds total undeposited cashiering transaction amount to the target total
484      * @param transaction
485      */
486     public void addCashieringTransactionToTargetTotal(KualiDecimal undepositedCheckAmount) {
487         if (targetDepositAmount == null) {
488             targetDepositAmount = KualiDecimal.ZERO;
489         }
490         targetDepositAmount = targetDepositAmount.subtract(undepositedCheckAmount);
491     }
492 
493     /**
494      * @return the current amount for checks needing depositing
495      */
496     public KualiDecimal getCurrentCheckTotal() {
497         return currentCheckTotal;
498     }
499 
500     /**
501      * Adds the check total for a cash receipt to checks
502      * @param crDoc
503      */
504     public void addCashReceiptToChecks(CashReceiptDocument crDoc) {
505         if (currentCheckTotal == null) {
506             currentCheckTotal = KualiDecimal.ZERO;
507         }
508         currentCheckTotal = currentCheckTotal.add(crDoc.getTotalConfirmedCheckAmount());
509     }
510 
511     /**
512      * @return the no verified cash error message
513      */
514     public String getNoVerifiedCashErrorMessage() {
515         String errorMessage = WebUtils.getKualiConfigurationService().getPropertyValueAsString(OLEKeyConstants.CashManagement.ERROR_NO_VERIFIED_CASH);
516         errorMessage = errorMessage.replace("{0}", getCashDrawerCampusCode());
517         errorMessage = errorMessage.replace("{1}", getCashManagementDocId());
518         return WebUtils.filterHtmlAndReplaceRiceMarkup(errorMessage);
519     }
520 
521     /**
522      * @param noVerifiedCashErrorMessage the noVerifiedCashErrorMessage to set
523      */
524     public void setNoVerifiedCashErrorMessage(String noVerifiedCashErrorMessage) {
525         this.noVerifiedCashErrorMessage = noVerifiedCashErrorMessage;
526     }
527     
528     
529 }