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.fp.businessobject; 018 019 import java.util.LinkedHashMap; 020 021 import org.kuali.kfs.sys.KFSConstants; 022 import org.kuali.kfs.sys.KFSPropertyConstants; 023 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 024 import org.kuali.rice.kns.util.KualiDecimal; 025 026 /** 027 * This class contains the coin breakdown for coin inserted into a cash drawer 028 */ 029 public class CoinDetail extends PersistableBusinessObjectBase { 030 031 private String documentNumber; 032 private String financialDocumentTypeCode; 033 private String cashieringRecordSource; 034 private KualiDecimal financialDocumentFiftyCentAmount; 035 private KualiDecimal financialDocumentTwentyFiveCentAmount; 036 private KualiDecimal financialDocumentTenCentAmount; 037 private KualiDecimal financialDocumentFiveCentAmount; 038 private KualiDecimal financialDocumentOneCentAmount; 039 private KualiDecimal financialDocumentOtherCentAmount; 040 private KualiDecimal financialDocumentHundredCentAmount; 041 042 /** 043 * Default constructor. 044 */ 045 public CoinDetail() { 046 } 047 048 /** 049 * Gets the documentNumber attribute. 050 * 051 * @return Returns the documentNumber 052 */ 053 public String getDocumentNumber() { 054 return documentNumber; 055 } 056 057 /** 058 * Sets the documentNumber attribute. 059 * 060 * @param documentNumber The documentNumber to set. 061 */ 062 public void setDocumentNumber(String documentNumber) { 063 this.documentNumber = documentNumber; 064 } 065 066 067 /** 068 * Gets the financialDocumentTypeCode attribute. 069 * 070 * @return Returns the financialDocumentTypeCode 071 */ 072 public String getFinancialDocumentTypeCode() { 073 return financialDocumentTypeCode; 074 } 075 076 /** 077 * Sets the financialDocumentTypeCode attribute. 078 * 079 * @param financialDocumentTypeCode The financialDocumentTypeCode to set. 080 */ 081 public void setFinancialDocumentTypeCode(String financialDocumentTypeCode) { 082 this.financialDocumentTypeCode = financialDocumentTypeCode; 083 } 084 085 086 /** 087 * Gets the cashieringRecordSource attribute. 088 * 089 * @return Returns the cashieringRecordSource 090 */ 091 public String getCashieringRecordSource() { 092 return cashieringRecordSource; 093 } 094 095 /** 096 * Sets the cashieringRecordSource attribute. 097 * 098 * @param cashieringRecordSource The cashieringRecordSource to set. 099 */ 100 public void setCashieringRecordSource(String financialDocumentColumnTypeCode) { 101 this.cashieringRecordSource = financialDocumentColumnTypeCode; 102 } 103 104 /** 105 * Gets the financialDocumentFiftyCentAmount attribute. 106 * 107 * @return Returns the financialDocumentFiftyCentAmount 108 */ 109 public KualiDecimal getFinancialDocumentFiftyCentAmount() { 110 return financialDocumentFiftyCentAmount; 111 } 112 113 /** 114 * Sets the financialDocumentFiftyCentAmount attribute. 115 * 116 * @param financialDocumentFiftyCentAmount The financialDocumentFiftyCentAmount to set. 117 */ 118 public void setFinancialDocumentFiftyCentAmount(KualiDecimal financialDocumentFiftyCentAmount) { 119 this.financialDocumentFiftyCentAmount = financialDocumentFiftyCentAmount; 120 } 121 122 /** 123 * Returns the number of half-cent coins in the drawer 124 * 125 * @return the count of half cent coins in the drawer 126 */ 127 public Integer getFiftyCentCount() { 128 return (financialDocumentFiftyCentAmount == null) ? new Integer(0) : new Integer(financialDocumentFiftyCentAmount.divide(KFSConstants.CoinTypeAmounts.FIFTY_CENT_AMOUNT).intValue()); 129 } 130 131 /** 132 * Sets the number of fifty cent coins in the drawer. This is useful if, you know, you're in da club, with, say a bottle full of 133 * "bub" 134 * 135 * @param count the number of fifty cent coins present in the drawer 136 */ 137 public void setFiftyCentCount(Integer count) { 138 if (count != null) { 139 financialDocumentFiftyCentAmount = new KualiDecimal(count.intValue()).multiply(KFSConstants.CoinTypeAmounts.FIFTY_CENT_AMOUNT); 140 } 141 } 142 143 /** 144 * Gets the financialDocumentTwentyFiveCentAmount attribute. 145 * 146 * @return Returns the financialDocumentTwentyFiveCentAmount 147 */ 148 public KualiDecimal getFinancialDocumentTwentyFiveCentAmount() { 149 return financialDocumentTwentyFiveCentAmount; 150 } 151 152 /** 153 * Sets the financialDocumentTwentyFiveCentAmount attribute. 154 * 155 * @param financialDocumentTwentyFiveCentAmount The financialDocumentTwentyFiveCentAmount to set. 156 */ 157 public void setFinancialDocumentTwentyFiveCentAmount(KualiDecimal financialDocumentTwentyFiveCentAmount) { 158 this.financialDocumentTwentyFiveCentAmount = financialDocumentTwentyFiveCentAmount; 159 } 160 161 /** 162 * Returns the number of quarters in the drawer 163 * 164 * @return the count of quarters in the drawer 165 */ 166 public Integer getTwentyFiveCentCount() { 167 return (financialDocumentTwentyFiveCentAmount == null) ? new Integer(0) : new Integer(financialDocumentTwentyFiveCentAmount.divide(KFSConstants.CoinTypeAmounts.TWENTY_FIVE_CENT_AMOUNT).intValue()); 168 } 169 170 /** 171 * Sets the number of quarters in the drawer 172 * 173 * @param count the number of quarters present in the drawer 174 */ 175 public void setTwentyFiveCentCount(Integer count) { 176 if (count != null) { 177 financialDocumentTwentyFiveCentAmount = new KualiDecimal(count.intValue()).multiply(KFSConstants.CoinTypeAmounts.TWENTY_FIVE_CENT_AMOUNT); 178 } 179 } 180 181 /** 182 * Gets the financialDocumentTenCentAmount attribute. 183 * 184 * @return Returns the financialDocumentTenCentAmount 185 */ 186 public KualiDecimal getFinancialDocumentTenCentAmount() { 187 return financialDocumentTenCentAmount; 188 } 189 190 /** 191 * Sets the financialDocumentTenCentAmount attribute. 192 * 193 * @param financialDocumentTenCentAmount The financialDocumentTenCentAmount to set. 194 */ 195 public void setFinancialDocumentTenCentAmount(KualiDecimal financialDocumentTenCentAmount) { 196 this.financialDocumentTenCentAmount = financialDocumentTenCentAmount; 197 } 198 199 /** 200 * Returns the number of dimes in the drawer 201 * 202 * @return the count of dimes in the drawer 203 */ 204 public Integer getTenCentCount() { 205 return (financialDocumentTenCentAmount == null) ? new Integer(0) : new Integer(financialDocumentTenCentAmount.divide(KFSConstants.CoinTypeAmounts.TEN_CENT_AMOUNT).intValue()); 206 } 207 208 /** 209 * Sets the number of dimes in the drawer 210 * 211 * @param count the number of dimes present in the drawer 212 */ 213 public void setTenCentCount(Integer count) { 214 if (count != null) { 215 financialDocumentTenCentAmount = new KualiDecimal(count.intValue()).multiply(KFSConstants.CoinTypeAmounts.TEN_CENT_AMOUNT); 216 } 217 } 218 219 /** 220 * Gets the financialDocumentFiveCentAmount attribute. 221 * 222 * @return Returns the financialDocumentFiveCentAmount 223 */ 224 public KualiDecimal getFinancialDocumentFiveCentAmount() { 225 return financialDocumentFiveCentAmount; 226 } 227 228 /** 229 * Sets the financialDocumentFiveCentAmount attribute. 230 * 231 * @param financialDocumentFiveCentAmount The financialDocumentFiveCentAmount to set. 232 */ 233 public void setFinancialDocumentFiveCentAmount(KualiDecimal financialDocumentFiveCentAmount) { 234 this.financialDocumentFiveCentAmount = financialDocumentFiveCentAmount; 235 } 236 237 /** 238 * Returns the number of nickels in the drawer 239 * 240 * @return the count of nickels in the drawer 241 */ 242 public Integer getFiveCentCount() { 243 return (financialDocumentFiveCentAmount == null) ? new Integer(0) : new Integer(financialDocumentFiveCentAmount.divide(KFSConstants.CoinTypeAmounts.FIVE_CENT_AMOUNT).intValue()); 244 } 245 246 /** 247 * Sets the number of nickels in the drawer 248 * 249 * @param count the number of nickels present in the drawer 250 */ 251 public void setFiveCentCount(Integer count) { 252 if (count != null) { 253 financialDocumentFiveCentAmount = new KualiDecimal(count.intValue()).multiply(KFSConstants.CoinTypeAmounts.FIVE_CENT_AMOUNT); 254 } 255 } 256 257 /** 258 * Gets the financialDocumentOneCentAmount attribute. 259 * 260 * @return Returns the financialDocumentOneCentAmount 261 */ 262 public KualiDecimal getFinancialDocumentOneCentAmount() { 263 return financialDocumentOneCentAmount; 264 } 265 266 /** 267 * Sets the financialDocumentOneCentAmount attribute. 268 * 269 * @param financialDocumentOneCentAmount The financialDocumentOneCentAmount to set. 270 */ 271 public void setFinancialDocumentOneCentAmount(KualiDecimal financialDocumentOneCentAmount) { 272 this.financialDocumentOneCentAmount = financialDocumentOneCentAmount; 273 } 274 275 /** 276 * Returns the number of pennies in the drawer 277 * 278 * @return the count of pennies in the drawer 279 */ 280 public Integer getOneCentCount() { 281 return (financialDocumentOneCentAmount == null) ? new Integer(0) : new Integer(financialDocumentOneCentAmount.divide(KFSConstants.CoinTypeAmounts.ONE_CENT_AMOUNT).intValue()); 282 } 283 284 /** 285 * Sets the number of pennies in the drawer 286 * 287 * @param count the number of pennies present in the drawer 288 */ 289 public void setOneCentCount(Integer count) { 290 if (count != null) { 291 financialDocumentOneCentAmount = new KualiDecimal(count).multiply(KFSConstants.CoinTypeAmounts.ONE_CENT_AMOUNT); 292 } 293 } 294 295 /** 296 * Gets the financialDocumentOtherCentAmount attribute. 297 * 298 * @return Returns the financialDocumentOtherCentAmount 299 */ 300 public KualiDecimal getFinancialDocumentOtherCentAmount() { 301 return financialDocumentOtherCentAmount; 302 } 303 304 /** 305 * Sets the financialDocumentOtherCentAmount attribute. 306 * 307 * @param financialDocumentOtherCentAmount The financialDocumentOtherCentAmount to set. 308 */ 309 public void setFinancialDocumentOtherCentAmount(KualiDecimal financialDocumentOtherCentAmount) { 310 this.financialDocumentOtherCentAmount = financialDocumentOtherCentAmount; 311 } 312 313 314 /** 315 * Gets the financialDocumentHundredCentAmount attribute. 316 * 317 * @return Returns the financialDocumentHundredCentAmount 318 */ 319 public KualiDecimal getFinancialDocumentHundredCentAmount() { 320 return financialDocumentHundredCentAmount; 321 } 322 323 /** 324 * Sets the financialDocumentHundredCentAmount attribute. 325 * 326 * @param financialDocumentHundredCentAmount The financialDocumentHundredCentAmount to set. 327 */ 328 public void setFinancialDocumentHundredCentAmount(KualiDecimal financialDocumentHundredCentAmount) { 329 this.financialDocumentHundredCentAmount = financialDocumentHundredCentAmount; 330 } 331 332 /** 333 * Returns the number of dollar coins--Sacajawea, Susan B. Anthony, or otherwise--in the drawer 334 * 335 * @return the count of dollar coins in the drawer 336 */ 337 public Integer getHundredCentCount() { 338 return (financialDocumentHundredCentAmount == null) ? new Integer(0) : new Integer(financialDocumentHundredCentAmount.divide(KFSConstants.CoinTypeAmounts.HUNDRED_CENT_AMOUNT).intValue()); 339 } 340 341 /** 342 * Sets the number of hundred cent coins in the drawer 343 * 344 * @param count the number of hundred cent coins present in the drawer 345 */ 346 public void setHundredCentCount(Integer count) { 347 if (count != null) { 348 financialDocumentHundredCentAmount = new KualiDecimal(count.intValue()).multiply(KFSConstants.CoinTypeAmounts.HUNDRED_CENT_AMOUNT); 349 } 350 } 351 352 /** 353 * Returns the total amount represented by this coin detail record. 354 * 355 * @return total amount of this detail 356 */ 357 public KualiDecimal getTotalAmount() { 358 KualiDecimal result = KualiDecimal.ZERO; 359 if (this.financialDocumentHundredCentAmount != null) { 360 result = result.add(this.financialDocumentHundredCentAmount); 361 } 362 if (this.financialDocumentFiftyCentAmount != null) { 363 result = result.add(this.financialDocumentFiftyCentAmount); 364 } 365 if (this.financialDocumentTwentyFiveCentAmount != null) { 366 result = result.add(this.financialDocumentTwentyFiveCentAmount); 367 } 368 if (this.financialDocumentTenCentAmount != null) { 369 result = result.add(this.financialDocumentTenCentAmount); 370 } 371 if (this.financialDocumentFiveCentAmount != null) { 372 result = result.add(this.financialDocumentFiveCentAmount); 373 } 374 if (this.financialDocumentOneCentAmount != null) { 375 result = result.add(this.financialDocumentOneCentAmount); 376 } 377 if (this.financialDocumentOtherCentAmount != null) { 378 result = result.add(this.financialDocumentOtherCentAmount); 379 } 380 return result; 381 } 382 383 /** 384 * This method sets all amounts in this record to zero 385 */ 386 public void zeroOutAmounts() { 387 this.financialDocumentHundredCentAmount = KualiDecimal.ZERO; 388 this.financialDocumentFiftyCentAmount = KualiDecimal.ZERO; 389 this.financialDocumentTwentyFiveCentAmount = KualiDecimal.ZERO; 390 this.financialDocumentTenCentAmount = KualiDecimal.ZERO; 391 this.financialDocumentFiveCentAmount = KualiDecimal.ZERO; 392 this.financialDocumentOneCentAmount = KualiDecimal.ZERO; 393 this.financialDocumentOtherCentAmount = KualiDecimal.ZERO; 394 } 395 396 /** 397 * This method sets all amounts that are null to zero 398 */ 399 public void zeroOutUnpopulatedAmounts() { 400 if (this.financialDocumentHundredCentAmount == null) { 401 this.financialDocumentHundredCentAmount = KualiDecimal.ZERO; 402 } 403 if (this.financialDocumentFiftyCentAmount == null) { 404 this.financialDocumentFiftyCentAmount = KualiDecimal.ZERO; 405 } 406 if (this.financialDocumentTwentyFiveCentAmount == null) { 407 this.financialDocumentTwentyFiveCentAmount = KualiDecimal.ZERO; 408 } 409 if (this.financialDocumentTenCentAmount == null) { 410 this.financialDocumentTenCentAmount = KualiDecimal.ZERO; 411 } 412 if (this.financialDocumentFiveCentAmount == null) { 413 this.financialDocumentFiveCentAmount = KualiDecimal.ZERO; 414 } 415 if (this.financialDocumentOneCentAmount == null) { 416 this.financialDocumentOneCentAmount = KualiDecimal.ZERO; 417 } 418 if (this.financialDocumentOtherCentAmount == null) { 419 this.financialDocumentOtherCentAmount = KualiDecimal.ZERO; 420 } 421 } 422 423 public void add(CoinDetail detail) { 424 if (detail.financialDocumentHundredCentAmount != null) { 425 if (this.financialDocumentHundredCentAmount == null) { 426 this.financialDocumentHundredCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentHundredCentAmount); 427 } 428 else { 429 this.financialDocumentHundredCentAmount = this.financialDocumentHundredCentAmount.add(detail.financialDocumentHundredCentAmount); 430 } 431 } 432 if (detail.financialDocumentFiftyCentAmount != null) { 433 if (this.financialDocumentFiftyCentAmount == null) { 434 this.financialDocumentFiftyCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentFiftyCentAmount); 435 } 436 else { 437 this.financialDocumentFiftyCentAmount = this.financialDocumentFiftyCentAmount.add(detail.financialDocumentFiftyCentAmount); 438 } 439 } 440 if (detail.financialDocumentTwentyFiveCentAmount != null) { 441 if (this.financialDocumentTwentyFiveCentAmount == null) { 442 this.financialDocumentTwentyFiveCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentTwentyFiveCentAmount); 443 } 444 else { 445 this.financialDocumentTwentyFiveCentAmount = this.financialDocumentTwentyFiveCentAmount.add(detail.financialDocumentTwentyFiveCentAmount); 446 } 447 } 448 if (detail.financialDocumentTenCentAmount != null) { 449 if (this.financialDocumentTenCentAmount == null) { 450 this.financialDocumentTenCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentTenCentAmount); 451 } 452 else { 453 this.financialDocumentTenCentAmount = this.financialDocumentTenCentAmount.add(detail.financialDocumentTenCentAmount); 454 } 455 } 456 if (detail.financialDocumentFiveCentAmount != null) { 457 if (this.financialDocumentFiveCentAmount == null) { 458 this.financialDocumentFiveCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentFiveCentAmount); 459 } 460 else { 461 this.financialDocumentFiveCentAmount = this.financialDocumentFiveCentAmount.add(detail.financialDocumentFiveCentAmount); 462 } 463 } 464 if (detail.financialDocumentOneCentAmount != null) { 465 if (this.financialDocumentOneCentAmount == null) { 466 this.financialDocumentOneCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentOneCentAmount); 467 } 468 else { 469 this.financialDocumentOneCentAmount = this.financialDocumentOneCentAmount.add(detail.financialDocumentOneCentAmount); 470 } 471 } 472 if (detail.financialDocumentOtherCentAmount != null) { 473 if (this.financialDocumentOtherCentAmount == null) { 474 this.financialDocumentOtherCentAmount = KualiDecimal.ZERO.add(detail.financialDocumentOtherCentAmount); 475 } 476 else { 477 this.financialDocumentOtherCentAmount = this.financialDocumentOtherCentAmount.add(detail.financialDocumentOtherCentAmount); 478 } 479 } 480 } 481 482 public void subtract(CoinDetail detail) { 483 if (detail.financialDocumentHundredCentAmount != null) { 484 if (this.financialDocumentHundredCentAmount == null) { 485 this.financialDocumentHundredCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentHundredCentAmount); 486 } 487 else { 488 this.financialDocumentHundredCentAmount = this.financialDocumentHundredCentAmount.subtract(detail.financialDocumentHundredCentAmount); 489 } 490 } 491 if (detail.financialDocumentFiftyCentAmount != null) { 492 if (this.financialDocumentFiftyCentAmount == null) { 493 this.financialDocumentFiftyCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentFiftyCentAmount); 494 } 495 else { 496 this.financialDocumentFiftyCentAmount = this.financialDocumentFiftyCentAmount.subtract(detail.financialDocumentFiftyCentAmount); 497 } 498 } 499 if (detail.financialDocumentTwentyFiveCentAmount != null) { 500 if (this.financialDocumentTwentyFiveCentAmount == null) { 501 this.financialDocumentTwentyFiveCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentTwentyFiveCentAmount); 502 } 503 else { 504 this.financialDocumentTwentyFiveCentAmount = this.financialDocumentTwentyFiveCentAmount.subtract(detail.financialDocumentTwentyFiveCentAmount); 505 } 506 } 507 if (detail.financialDocumentTenCentAmount != null) { 508 if (this.financialDocumentTenCentAmount == null) { 509 this.financialDocumentTenCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentTenCentAmount); 510 } 511 else { 512 this.financialDocumentTenCentAmount = this.financialDocumentTenCentAmount.subtract(detail.financialDocumentTenCentAmount); 513 } 514 } 515 if (detail.financialDocumentFiveCentAmount != null) { 516 if (this.financialDocumentFiveCentAmount == null) { 517 this.financialDocumentFiveCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentFiveCentAmount); 518 } 519 else { 520 this.financialDocumentFiveCentAmount = this.financialDocumentFiveCentAmount.subtract(detail.financialDocumentFiveCentAmount); 521 } 522 } 523 if (detail.financialDocumentOneCentAmount != null) { 524 if (this.financialDocumentOneCentAmount == null) { 525 this.financialDocumentOneCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentOneCentAmount); 526 } 527 else { 528 this.financialDocumentOneCentAmount = this.financialDocumentOneCentAmount.subtract(detail.financialDocumentOneCentAmount); 529 } 530 } 531 if (detail.financialDocumentOtherCentAmount != null) { 532 if (this.financialDocumentOtherCentAmount == null) { 533 this.financialDocumentOtherCentAmount = KualiDecimal.ZERO.subtract(detail.financialDocumentOtherCentAmount); 534 } 535 else { 536 this.financialDocumentOtherCentAmount = this.financialDocumentOtherCentAmount.subtract(detail.financialDocumentOtherCentAmount); 537 } 538 } 539 } 540 541 /** 542 * Is this coin detail empty of any value? 543 * 544 * @return true if any field at all is neither null nor the amount is zero 545 */ 546 public boolean isEmpty() { 547 return ((this.financialDocumentHundredCentAmount == null || this.financialDocumentHundredCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentFiftyCentAmount == null || this.financialDocumentFiftyCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentTwentyFiveCentAmount == null || this.financialDocumentTwentyFiveCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentTenCentAmount == null || this.financialDocumentTenCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentFiveCentAmount == null || this.financialDocumentFiveCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentOneCentAmount == null || this.financialDocumentOneCentAmount.equals(KualiDecimal.ZERO)) && (this.financialDocumentOtherCentAmount == null || this.financialDocumentOtherCentAmount.equals(KualiDecimal.ZERO))); 548 } 549 550 /** 551 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 552 */ 553 protected LinkedHashMap toStringMapper() { 554 LinkedHashMap m = new LinkedHashMap(); 555 m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber); 556 m.put("financialDocumentTypeCode", this.financialDocumentTypeCode); 557 m.put("cashieringRecordSource", this.cashieringRecordSource); 558 return m; 559 } 560 }