use of org.mifos.accounts.business.AccountFeesActionDetailEntity in project head by mifos.
the class TestObjectFactory method getBulkEntryAccountFeeActionViews.
public static List<CollectionSheetEntryAccountFeeActionDto> getBulkEntryAccountFeeActionViews(final AccountActionDateEntity accountActionDateEntity) {
List<CollectionSheetEntryAccountFeeActionDto> bulkEntryFeeViews = new ArrayList<CollectionSheetEntryAccountFeeActionDto>();
Set<AccountFeesActionDetailEntity> feeActions = null;
if (accountActionDateEntity instanceof LoanScheduleEntity) {
feeActions = ((LoanScheduleEntity) accountActionDateEntity).getAccountFeesActionDetails();
} else if (accountActionDateEntity instanceof CustomerScheduleEntity) {
feeActions = ((CustomerScheduleEntity) accountActionDateEntity).getAccountFeesActionDetails();
}
if (feeActions != null && feeActions.size() > 0) {
for (AccountFeesActionDetailEntity accountFeesActionDetail : feeActions) {
bulkEntryFeeViews.add(getBulkEntryAccountFeeActionView(accountFeesActionDetail));
}
}
return bulkEntryFeeViews;
}
use of org.mifos.accounts.business.AccountFeesActionDetailEntity in project head by mifos.
the class CustomerTrxnDetailEntityIntegrationTest method testGenerateReverseTrxn.
@Test
public void testGenerateReverseTrxn() throws Exception {
accountBO = client.getCustomerAccount();
Date currentDate = new Date(System.currentTimeMillis());
CustomerAccountBO customerAccountBO = (CustomerAccountBO) accountBO;
customerAccountBO.setUserContext(userContext);
CustomerScheduleEntity accountAction = (CustomerScheduleEntity) customerAccountBO.getAccountActionDate(Short.valueOf("1"));
accountAction.setMiscFeePaid(TestUtils.createMoney(100));
accountAction.setMiscPenaltyPaid(TestUtils.createMoney(100));
accountAction.setPaymentDate(currentDate);
accountAction.setPaymentStatus(PaymentStatus.PAID);
AccountPaymentEntity accountPaymentEntity = new AccountPaymentEntity(accountBO, TestUtils.createMoney(100), "1111", currentDate, new PaymentTypeEntity(Short.valueOf("1")), new Date(System.currentTimeMillis()));
CustomerTrxnDetailEntity accountTrxnEntity = new CustomerTrxnDetailEntity(accountPaymentEntity, AccountActionTypes.PAYMENT, Short.valueOf("1"), accountAction.getActionDate(), TestObjectFactory.getPersonnel(userContext.getId()), currentDate, TestUtils.createMoney(200), "payment done", null, TestUtils.createMoney(100), TestUtils.createMoney(100));
for (AccountFeesActionDetailEntity accountFeesActionDetailEntity : accountAction.getAccountFeesActionDetails()) {
CustomerAccountBOTestUtils.setFeeAmountPaid((CustomerFeeScheduleEntity) accountFeesActionDetailEntity, TestUtils.createMoney(100));
FeesTrxnDetailEntity feeTrxn = new FeesTrxnDetailEntity(accountTrxnEntity, accountFeesActionDetailEntity.getAccountFee(), accountFeesActionDetailEntity.getFeeAmount());
accountTrxnEntity.addFeesTrxnDetail(feeTrxn);
}
accountPaymentEntity.addAccountTrxn(accountTrxnEntity);
AccountTestUtils.addAccountPayment(accountPaymentEntity, customerAccountBO);
PersonnelBO loggedInUser = legacyPersonnelDao.getPersonnel(userContext.getId());
for (AccountTrxnEntity accntTrxn : customerAccountBO.findMostRecentPaymentByPaymentDate().getAccountTrxns()) {
AccountTrxnEntity reverseAccntTrxn = ((CustomerTrxnDetailEntity) accntTrxn).generateReverseTrxn(loggedInUser, "adjustment");
Assert.assertEquals(reverseAccntTrxn.getAmount(), accntTrxn.getAmount().negate());
Assert.assertEquals(loggedInUser.getPersonnelId(), reverseAccntTrxn.getPersonnel().getPersonnelId());
}
}
use of org.mifos.accounts.business.AccountFeesActionDetailEntity in project head by mifos.
the class CustomerAccountBOIntegrationTest method applyPayment.
private void applyPayment() throws Exception {
client = TestObjectFactory.createClient("Client_Active_test", CustomerStatus.CLIENT_ACTIVE, group);
customerAccountBO = client.getCustomerAccount();
Date currentDate = new Date(System.currentTimeMillis());
customerAccountBO.setUserContext(userContext);
CustomerScheduleEntity accountAction = (CustomerScheduleEntity) customerAccountBO.getAccountActionDate(Short.valueOf("1"));
accountAction.setMiscFeePaid(TestUtils.createMoney(100));
accountAction.setMiscPenaltyPaid(TestUtils.createMoney(100));
accountAction.setPaymentDate(currentDate);
accountAction.setPaymentStatus(PaymentStatus.PAID);
AccountPaymentEntity accountPaymentEntity = new AccountPaymentEntity(customerAccountBO, TestUtils.createMoney(300), "1111", currentDate, new PaymentTypeEntity(Short.valueOf("1")), new Date(System.currentTimeMillis()));
CustomerTrxnDetailEntity accountTrxnEntity = new CustomerTrxnDetailEntity(accountPaymentEntity, AccountActionTypes.PAYMENT, Short.valueOf("1"), accountAction.getActionDate(), TestObjectFactory.getPersonnel(userContext.getId()), currentDate, TestUtils.createMoney(300), "payment done", null, TestUtils.createMoney(100), TestUtils.createMoney(100));
for (AccountFeesActionDetailEntity accountFeesActionDetailEntity : accountAction.getAccountFeesActionDetails()) {
CustomerAccountBOTestUtils.setFeeAmountPaid((CustomerFeeScheduleEntity) accountFeesActionDetailEntity, TestUtils.createMoney(100));
FeesTrxnDetailEntity feeTrxn = new FeesTrxnDetailEntity(accountTrxnEntity, accountFeesActionDetailEntity.getAccountFee(), accountFeesActionDetailEntity.getFeeAmount());
accountTrxnEntity.addFeesTrxnDetail(feeTrxn);
}
accountPaymentEntity.addAccountTrxn(accountTrxnEntity);
AccountTestUtils.addAccountPayment(accountPaymentEntity, customerAccountBO);
TestObjectFactory.updateObject(customerAccountBO);
StaticHibernateUtil.flushSession();
}
use of org.mifos.accounts.business.AccountFeesActionDetailEntity in project head by mifos.
the class LoanBO method updateInstallmentAfterAdjustment.
@Override
protected void updateInstallmentAfterAdjustment(final List<AccountTrxnEntity> reversedTrxns, PersonnelBO loggedInUser) throws AccountException {
Money increaseInterest = new Money(this.getCurrency());
Money increaseFees = new Money(this.getCurrency());
Money increasePenalty = new Money(this.getCurrency());
int numberOfFullPayments = 0;
short numberOfInstalments = (short) reversedTrxns.size();
List<AccountActionDateEntity> allInstallments = this.getAllInstallments();
if (isNotEmpty(reversedTrxns)) {
for (AccountTrxnEntity reversedTrxn : reversedTrxns) {
Short prevInstallmentId = null;
Short currentInstallmentId = reversedTrxn.getInstallmentId();
numberOfFullPayments = getIncrementedNumberOfFullPaymentsIfPaid(numberOfFullPayments, allInstallments, prevInstallmentId, currentInstallmentId);
if (!reversedTrxn.isTrxnForReversalOfLoanDisbursal()) {
LoanTrxnDetailEntity loanReverseTrxn = (LoanTrxnDetailEntity) reversedTrxn;
loanSummary.updatePaymentDetails(loanReverseTrxn);
if (loanReverseTrxn.isNotEmptyTransaction()) {
LoanScheduleEntity installment = (LoanScheduleEntity) getAccountActionDate(loanReverseTrxn.getInstallmentId());
installment.updatePaymentDetailsForAdjustment(loanReverseTrxn);
if (installment.isPaid()) {
increaseInterest = increaseInterest.add(installment.getInterestDue().add(installment.getExtraInterestDue())).add(loanReverseTrxn.getInterestAmount());
increaseFees = increaseFees.add(installment.getTotalFeesDue());
if (!this.noOfInstallments.equals(numberOfInstalments)) {
increaseFees = increaseFees.add(installment.getMiscFeeDue()).add(loanReverseTrxn.getMiscFeeAmount());
increasePenalty = increasePenalty.add(installment.getPenaltyDue()).add(loanReverseTrxn.getPenaltyAmount());
}
}
installment.recordForAdjustment();
if (installment.hasFees()) {
for (AccountFeesActionDetailEntity accntFeesAction : installment.getAccountFeesActionDetails()) {
loanReverseTrxn.adjustFees(accntFeesAction);
}
}
if (installment.hasPenalties()) {
for (LoanPenaltyScheduleEntity entity : installment.getLoanPenaltyScheduleEntities()) {
loanReverseTrxn.adjustPenalties(entity);
}
}
}
}
}
AccountStateEntity currentAccountState = this.getAccountState();
AccountStateEntity newAccountState = currentAccountState;
boolean statusChangeNeeded = false;
if (isLoanActiveWithStatusChangeHistory()) {
AccountStatusChangeHistoryEntity lastAccountStatusChange = getLastAccountStatusChange();
if (lastAccountStatusChange.isLoanActive()) {
statusChangeNeeded = true;
} else if (currentAccountState.isLoanClosedObligationsMet()) {
statusChangeNeeded = true;
newAccountState = lastAccountStatusChange.getOldStatus();
}
}
boolean accountReOpened = isAccountReOpened(currentAccountState, newAccountState);
updatePerformanceHistory(accountReOpened);
/*
* John W - mifos-1986 - see related comment above
*/
if (accountReOpened) {
loanSummary.increaseBy(null, increaseInterest, increasePenalty, increaseFees);
// fix for MIFOS-3287
this.setClosedDate(null);
}
// Else reverse payments equal to number of transactions reversed.
if (accountReOpened) {
updatePerformanceHistoryOnAdjustment(1);
} else if (reversedTrxns.size() > 0) {
updatePerformanceHistoryOnAdjustment(numberOfFullPayments);
}
if (statusChangeNeeded) {
Short daysInArrears = getDaysInArrears(accountReOpened);
if (currentAccountState.isLoanClosedObligationsMet()) {
AccountState newStatus = AccountState.LOAN_ACTIVE_IN_BAD_STANDING;
if (daysInArrears == 0) {
newStatus = AccountState.LOAN_ACTIVE_IN_GOOD_STANDING;
}
changeStatus(newStatus, null, "Account Reopened", loggedInUser);
} else {
if (daysInArrears == 0) {
if (!currentAccountState.isLoanActiveInGoodStanding()) {
changeStatus(AccountState.LOAN_ACTIVE_IN_GOOD_STANDING, null, "Account Adjusted", loggedInUser);
}
} else {
if (!currentAccountState.isLoanActiveInBadStanding()) {
changeStatus(AccountState.LOAN_ACTIVE_IN_BAD_STANDING, null, "Account Adjusted", loggedInUser);
handleArrearsAging();
}
}
}
}
try {
PersonnelBO personnel = legacyPersonnelDao.getPersonnel(getUserContext().getId());
addLoanActivity(buildLoanActivity(reversedTrxns, personnel, AccountConstants.LOAN_ADJUSTED, DateUtils.getCurrentDateWithoutTimeStamp()));
} catch (PersistenceException e) {
throw new AccountException(e);
}
}
}
use of org.mifos.accounts.business.AccountFeesActionDetailEntity in project head by mifos.
the class LoanBusinessService method clearAndPersistOriginalSchedule.
public void clearAndPersistOriginalSchedule(LoanBO loan) throws PersistenceException {
List<OriginalLoanScheduleEntity> originalLoanScheduleEntities = this.getlegacyLoanDao().getOriginalLoanScheduleEntity(loan.getAccountId());
Collection<LoanScheduleEntity> loanScheduleEntities = loan.getLoanScheduleEntities();
Iterator<LoanScheduleEntity> loanScheduleEntitiesIterator = loanScheduleEntities.iterator();
for (OriginalLoanScheduleEntity originalLoanScheduleEntity : originalLoanScheduleEntities) {
Iterator<AccountFeesActionDetailEntity> accountFeesIterator = loanScheduleEntitiesIterator.next().getAccountFeesActionDetails().iterator();
for (OriginalLoanFeeScheduleEntity originalLoanFeeScheduleEntity : originalLoanScheduleEntity.getAccountFeesActionDetails()) {
originalLoanFeeScheduleEntity.updateFeeAmount(accountFeesIterator.next().getFeeAmount().getAmount());
}
}
this.getlegacyLoanDao().saveOriginalSchedule(originalLoanScheduleEntities);
}
Aggregations