/*
* Copyright (c) 2005-2011 Grameen Foundation USA
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* See also http://www.apache.org/licenses/LICENSE-2.0.html for an
* explanation of the license and how it is applied.
*/
package org.mifos.dto.domain;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.joda.time.LocalDate;
import org.mifos.dto.screen.RepayLoanInfoDto;
/**
* The Class AccountPaymentParametersDto is a data transfer
* object that holds the parameters necessary to make a
* payment to a loan account.
*/
public class AccountPaymentParametersDto {
public enum TransactionType {
PAYMENT, LOAN_DISBURSAL;
}
public enum PaymentOptions {
ALLOW_OVERPAYMENTS
}
/** The user making the payment. */
private final UserReferenceDto userMakingPayment;
/** The account the payment is made to. */
private final AccountReferenceDto account;
/** The payment amount. */
private final BigDecimal paymentAmount;
/** The payment date. */
private final LocalDate paymentDate;
/** The receipt date. */
private final LocalDate receiptDate;
/** The receipt id. */
private final String receiptId;
/** The payment type. */
private PaymentTypeDto paymentType;
/** The comment associated with the payment. */
private final String comment;
/** Customer making the payment */
private CustomerDto customer;
/** Optional transaction type indicator */
TransactionType transactionType;
/** Optional payment options */
private Set<PaymentOptions> paymentOptions;
/** ids and amounts of payment for member accounts*/
private Map<Integer, String> memberInfo;
/** member accountId which oen should be repay*/
private Integer memberAccountIdToRepay;
private RepayLoanInfoDto repayLoanInfoDto;
private BigDecimal interestDueForCurrentInstalmanet;
/**
* Instantiates a new account payment parameters dto.
*
* @param userMakingPayment the user making payment
* @param account the account the payment is made to
* @param paymentAmount the payment amount
* @param paymentDate the payment date
* @param paymentType the payment type
* @param comment the comment associated with the payment
*/
public AccountPaymentParametersDto(UserReferenceDto userMakingPayment, AccountReferenceDto account,
BigDecimal paymentAmount, LocalDate paymentDate, PaymentTypeDto paymentType, String comment) {
this(userMakingPayment, account, paymentAmount, paymentDate, paymentType, comment, null, null, null);
}
public AccountPaymentParametersDto(UserReferenceDto userMakingPayment, AccountReferenceDto account,
BigDecimal paymentAmount, LocalDate paymentDate, PaymentTypeDto paymentType, String comment, String receiptId) {
this(userMakingPayment, account, paymentAmount, paymentDate, paymentType, comment, null, receiptId, null);
}
/**
* Instantiates a new account payment parameters dto.
*
* @param userMakingPayment the user making payment
* @param account the account the payment is made to
* @param paymentAmount the payment amount
* @param paymentDate the payment date
* @param paymentType the payment type
* @param comment the comment associated with the payment
* @param receiptDate the receipt date
* @param receiptId the receipt id
* @param customer a customer making payment
*/
public AccountPaymentParametersDto(UserReferenceDto userMakingPayment, AccountReferenceDto account,
BigDecimal paymentAmount, LocalDate paymentDate, PaymentTypeDto paymentType, String comment,
LocalDate receiptDate, String receiptId, CustomerDto customer) {
super();
if (null == userMakingPayment) {
throw new IllegalArgumentException("userMakingPayment cannot be null");
}
this.userMakingPayment = userMakingPayment;
if (null == account) {
throw new IllegalArgumentException("account cannot be null");
}
this.account = account;
if (null == paymentAmount) {
throw new IllegalArgumentException("paymentAmount cannot be null");
}
this.paymentAmount = paymentAmount;
if (null == paymentDate) {
throw new IllegalArgumentException("paymentDate cannot be null");
}
this.paymentDate = paymentDate;
this.paymentType = paymentType;
if (null == comment) {
throw new IllegalArgumentException("comment cannot be null");
}
this.comment = comment;
this.receiptDate = receiptDate;
this.receiptId = receiptId;
this.customer = customer;
}
@SuppressWarnings("PMD.ExcessiveParameterList")
public AccountPaymentParametersDto(UserReferenceDto userMakingPayment, AccountReferenceDto account,
BigDecimal paymentAmount, LocalDate paymentDate, PaymentTypeDto paymentType, String comment,
LocalDate receiptDate, String receiptId, CustomerDto customer, Map<Integer, String> memberInfo) {
super();
if (null == userMakingPayment) {
throw new IllegalArgumentException("userMakingPayment cannot be null");
}
this.userMakingPayment = userMakingPayment;
if (null == account) {
throw new IllegalArgumentException("account cannot be null");
}
this.account = account;
if (null == paymentAmount) {
throw new IllegalArgumentException("paymentAmount cannot be null");
}
this.paymentAmount = paymentAmount;
if (null == paymentDate) {
throw new IllegalArgumentException("paymentDate cannot be null");
}
this.paymentDate = paymentDate;
this.paymentType = paymentType;
if (null == comment) {
throw new IllegalArgumentException("comment cannot be null");
}
this.comment = comment;
this.receiptDate = receiptDate;
this.receiptId = receiptId;
this.customer = customer;
this.memberInfo = memberInfo;
}
/**
* Gets the user making payment.
*
* @return the user making payment
*/
public UserReferenceDto getUserMakingPayment() {
return this.userMakingPayment;
}
/**
* Gets the account.
*
* @return the account
*/
public AccountReferenceDto getAccount() {
return this.account;
}
/**
* Gets the payment amount.
*
* @return the payment amount
*/
public BigDecimal getPaymentAmount() {
return this.paymentAmount;
}
/**
* Gets the payment date.
*
* @return the payment date
*/
public LocalDate getPaymentDate() {
return this.paymentDate;
}
/**
* Gets the receipt date.
*
* @return the receipt date
*/
public LocalDate getReceiptDate() {
return this.receiptDate;
}
/**
* Gets the receipt id.
*
* @return the receipt id
*/
public String getReceiptId() {
return this.receiptId;
}
/**
* Gets the payment type.
*
* @return the payment type
*/
public PaymentTypeDto getPaymentType() {
return this.paymentType;
}
/**
* Gets the comment.
*
* @return the comment
*/
public String getComment() {
return this.comment;
}
public int getAccountId() {
return account.getAccountId();
}
public CustomerDto getCustomer() {
return customer;
}
public void setCustomer(CustomerDto customer) {
this.customer = customer;
}
public void setPaymentType(PaymentTypeDto paymentType) {
this.paymentType = paymentType;
}
public TransactionType getTransactionType() {
TransactionType result = null;
if (transactionType == null) {
result = TransactionType.PAYMENT;
} else {
result = transactionType;
}
return result;
}
public void setTransactionType(TransactionType transactionType) {
this.transactionType = transactionType;
}
public Set<PaymentOptions> getPaymentOptions() {
if (paymentOptions == null) {
paymentOptions = new HashSet<PaymentOptions>();
}
return paymentOptions;
}
public void addPaymentOption(PaymentOptions option) {
if (paymentOptions == null) {
paymentOptions = new HashSet<PaymentOptions>();
}
paymentOptions.add(option);
}
public Map<Integer, String> getMemberInfo() {
return memberInfo;
}
public void setMemberInfo(Map<Integer, String> memberInfo) {
this.memberInfo = memberInfo;
}
public Integer getMemberAccountIdToRepay() {
return memberAccountIdToRepay;
}
public void setMemberAccountIdToRepay(Integer memberAccountIdToRepay) {
this.memberAccountIdToRepay = memberAccountIdToRepay;
}
public RepayLoanInfoDto getRepayLoanInfoDto() {
return repayLoanInfoDto;
}
public void setRepayLoanInfoDto(RepayLoanInfoDto repayLoanInfoDto) {
this.repayLoanInfoDto = repayLoanInfoDto;
}
public BigDecimal getInterestDueForCurrentInstalmanet() {
return interestDueForCurrentInstalmanet;
}
public void setInterestDueForCurrentInstalmanet(BigDecimal interestDueForCurrentInstalmanet) {
this.interestDueForCurrentInstalmanet = interestDueForCurrentInstalmanet;
}
}