package org.mifos.accounts.loan.schedule.domain;
import java.math.BigDecimal;
import java.util.Date;
public class InstallmentBuilder {
private Installment installment;
private InstallmentPayment installmentPayment;
public InstallmentBuilder(String installmentId) {
installment = new Installment();
installmentPayment = installment.getCurrentPayment();
installment.recordCurrentPayment();
withInstallmentId(installmentId).
withDueDate(new Date(0)).withPaymentDate(new Date(0)).
withPrincipal(0).withPrincipalPaid(0).
withInterest(0).withInterestPaid(0).
withExtraInterest(0).withExtraInterestPaid(0).
withFees(0).withFeesPaid(0).
withMiscFees(0).withMiscFeesPaid(0).
withPenalty(0).withPenaltyPaid(0).
withMiscPenalty(0).withMiscPenaltyPaid(0);
}
public InstallmentBuilder withInstallmentId(String installmentId) {
installment.setId(Integer.valueOf(installmentId));
return this;
}
public InstallmentBuilder withPrincipal(double principal) {
installment.setAmount(InstallmentComponent.PRINCIPAL, BigDecimal.valueOf(principal));
return this;
}
public InstallmentBuilder withInterest(double interest) {
installment.setAmount(InstallmentComponent.INTEREST, BigDecimal.valueOf(interest));
return this;
}
public InstallmentBuilder withExtraInterest(double extraInterest) {
installment.setAmount(InstallmentComponent.EXTRA_INTEREST, BigDecimal.valueOf(extraInterest));
return this;
}
public InstallmentBuilder withFees(double fees) {
installment.setAmount(InstallmentComponent.FEES, BigDecimal.valueOf(fees));
return this;
}
public InstallmentBuilder withMiscFees(double miscFees) {
installment.setAmount(InstallmentComponent.MISC_FEES, BigDecimal.valueOf(miscFees));
return this;
}
public InstallmentBuilder withPenalty(double penalty) {
installment.setAmount(InstallmentComponent.PENALTY, BigDecimal.valueOf(penalty));
return this;
}
public InstallmentBuilder withMiscPenalty(double miscPenalty) {
installment.setAmount(InstallmentComponent.MISC_PENALTY, BigDecimal.valueOf(miscPenalty));
return this;
}
public InstallmentBuilder withPrincipalPaid(double principalPaid) {
installmentPayment.setAmount(InstallmentComponent.PRINCIPAL, BigDecimal.valueOf(principalPaid));
return this;
}
public InstallmentBuilder withInterestPaid(double interestPaid) {
installmentPayment.setAmount(InstallmentComponent.INTEREST, BigDecimal.valueOf(interestPaid));
return this;
}
public InstallmentBuilder withExtraInterestPaid(double extraInterestPaid) {
installmentPayment.setAmount(InstallmentComponent.EXTRA_INTEREST, BigDecimal.valueOf(extraInterestPaid));
return this;
}
public InstallmentBuilder withFeesPaid(double fees) {
installmentPayment.setAmount(InstallmentComponent.FEES, BigDecimal.valueOf(fees));
return this;
}
public InstallmentBuilder withMiscFeesPaid(double miscFeesPaid) {
installmentPayment.setAmount(InstallmentComponent.MISC_FEES, BigDecimal.valueOf(miscFeesPaid));
return this;
}
public InstallmentBuilder withPenaltyPaid(double penaltyPaid) {
installmentPayment.setAmount(InstallmentComponent.PENALTY, BigDecimal.valueOf(penaltyPaid));
return this;
}
public InstallmentBuilder withMiscPenaltyPaid(double miscPenaltyPaid) {
installmentPayment.setAmount(InstallmentComponent.MISC_PENALTY, BigDecimal.valueOf(miscPenaltyPaid));
return this;
}
public InstallmentBuilder withDueDate(Date dueDate) {
installment.setDueDate(dueDate);
return this;
}
public InstallmentBuilder withPaymentDate(Date paymentDate) {
installment.setDueDate(paymentDate);
return this;
}
public Installment build() {
return installment;
}
}