From e09162f5e2e4ae663f7fd12684e50d7fee3af9f1 Mon Sep 17 00:00:00 2001 From: Madhukar Date: Wed, 11 Jun 2014 17:46:11 +0530 Subject: [PATCH] MIFOSX-1318,MIFOSX-1314,MIFOSX-1300,MIFOSX-1242,MIFOSX-1199 --- .../ProductToGLAccountMappingHelper.java | 4 ++-- ...ountTransfersWritePlatformServiceImpl.java | 24 ++++++++++++++++--- .../portfolio/client/domain/Client.java | 18 ++++++++++++++ ...ollectionSheetReadPlatformServiceImpl.java | 12 ++++++---- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java index c8d4ed92a..820bcfaff 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java @@ -181,7 +181,7 @@ public class ProductToGLAccountMappingHelper { * Accounts in the system **/ final Set existingCharges = new HashSet(); - if (chargeToIncomeAccountMappingArray != null) { + if (chargeToIncomeAccountMappingArray != null && chargeToIncomeAccountMappingArray.size() > 0) { if (changes != null) { changes.put(arrayFragmentName, command.jsonFragment(arrayFragmentName)); } @@ -259,7 +259,7 @@ public class ProductToGLAccountMappingHelper { * Fund Sources in the system **/ final Set existingPaymentTypes = new HashSet(); - if (paymentChannelMappingArray != null) { + if (paymentChannelMappingArray != null && paymentChannelMappingArray.size() > 0) { if (changes != null) { changes.put(LOAN_PRODUCT_ACCOUNTING_PARAMS.PAYMENT_CHANNEL_FUND_SOURCE_MAPPING.getValue(), command.jsonFragment(LOAN_PRODUCT_ACCOUNTING_PARAMS.PAYMENT_CHANNEL_FUND_SOURCE_MAPPING.getValue())); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java index be62dcea5..4f3a11a4b 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/account/service/AccountTransfersWritePlatformServiceImpl.java @@ -22,6 +22,7 @@ import org.joda.time.format.DateTimeFormatter; import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder; +import org.mifosplatform.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.mifosplatform.portfolio.account.PortfolioAccountType; import org.mifosplatform.portfolio.account.data.AccountTransferDTO; import org.mifosplatform.portfolio.account.data.AccountTransfersDataValidator; @@ -100,10 +101,12 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer Long transferDetailId = null; boolean isInterestTransfer = false; boolean isAccountTransfer = true; + Long fromLoanAccountId = null; if (isSavingsToSavingsAccountTransfer(fromAccountType, toAccountType)) { fromSavingsAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); final SavingsAccount fromSavingsAccount = this.savingsAccountAssembler.assembleFrom(fromSavingsAccountId); + validateAccountForTransfer(fromSavingsAccount); final SavingsAccountTransaction withdrawal = this.savingsAccountDomainService.handleWithdrawal(fromSavingsAccount, fmt, transactionDate, transactionAmount, paymentDetail, fromSavingsAccount.isWithdrawalFeeApplicableForTransfer(), @@ -111,6 +114,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer final Long toSavingsId = command.longValueOfParameterNamed(toAccountIdParamName); final SavingsAccount toSavingsAccount = this.savingsAccountAssembler.assembleFrom(toSavingsId); + validateAccountForTransfer(toSavingsAccount); final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(toSavingsAccount, fmt, transactionDate, transactionAmount, paymentDetail, isAccountTransfer); @@ -124,6 +128,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer // fromSavingsAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); final SavingsAccount fromSavingsAccount = this.savingsAccountAssembler.assembleFrom(fromSavingsAccountId); + validateAccountForTransfer(fromSavingsAccount); final SavingsAccountTransaction withdrawal = this.savingsAccountDomainService.handleWithdrawal(fromSavingsAccount, fmt, transactionDate, transactionAmount, paymentDetail, fromSavingsAccount.isWithdrawalFeeApplicableForTransfer(), @@ -146,8 +151,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer // FIXME - kw - ADD overpaid loan to savings account transfer // support. - // - final Long fromLoanAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); + fromLoanAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); final Loan fromLoanAccount = this.loanAccountAssembler.assembleFrom(fromLoanAccountId); final LoanTransaction loanRefundTransaction = this.loanAccountDomainService.makeRefund(fromLoanAccountId, @@ -155,6 +159,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer final Long toSavingsAccountId = command.longValueOfParameterNamed(toAccountIdParamName); final SavingsAccount toSavingsAccount = this.savingsAccountAssembler.assembleFrom(toSavingsAccountId); + validateAccountForTransfer(toSavingsAccount); final SavingsAccountTransaction deposit = this.savingsAccountDomainService.handleDeposit(toSavingsAccount, fmt, transactionDate, transactionAmount, paymentDetail, isAccountTransfer); @@ -171,9 +176,11 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer final CommandProcessingResultBuilder builder = new CommandProcessingResultBuilder().withEntityId(transferDetailId); if (fromAccountType.isSavingsAccount()) { - builder.withSavingsId(fromSavingsAccountId); } + if (fromAccountType.isLoanAccount()) { + builder.withLoanId(fromLoanAccountId); + } return builder.build(); } @@ -292,6 +299,7 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer toSavingsAccount = accountTransferDetails.toSavingsAccount(); this.savingsAccountAssembler.setHelpers(toSavingsAccount); } + final SavingsAccountTransaction withdrawal = this.savingsAccountDomainService.handleWithdrawal(fromSavingsAccount, accountTransferDTO.getFmt(), accountTransferDTO.getTransactionDate(), accountTransferDTO.getTransactionAmount(), accountTransferDTO.getPaymentDetail(), fromSavingsAccount.isWithdrawalFeeApplicableForTransfer(), AccountTransferType @@ -368,4 +376,14 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer private boolean isSavingsToSavingsAccountTransfer(final PortfolioAccountType fromAccountType, final PortfolioAccountType toAccountType) { return fromAccountType.isSavingsAccount() && toAccountType.isSavingsAccount(); } + + private void validateAccountForTransfer(final SavingsAccount account) { + if (account.depositAccountType().isFixedDeposit() && account.isActive()) { + + final String globalisationMessageCode = "error.msg.accounttransfers.are.not.allowed.on.active.fixeddepositaccount"; + final String defaultUserMessage = "Account Transfers are not allowed on Active Fixed Deposit Account"; + + throw new GeneralPlatformDomainRuleException(globalisationMessageCode, defaultUserMessage, account.getId()); + } + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java index 9ab4cf1c5..bd061fe3e 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java @@ -475,6 +475,16 @@ public final class Client extends AbstractPersistable { this.activationDate = newValue.toDate(); this.officeJoiningDate = this.activationDate; } + + if (command.isChangeInLocalDateParameterNamed(ClientApiConstants.dateOfBirthParamName, dateOfBirthLocalDate())) { + final String valueAsInput = command.stringValueOfParameterNamed(ClientApiConstants.dateOfBirthParamName); + actualChanges.put(ClientApiConstants.dateOfBirthParamName, valueAsInput); + actualChanges.put(ClientApiConstants.dateFormatParamName, dateFormatAsInput); + actualChanges.put(ClientApiConstants.localeParamName, localeAsInput); + + final LocalDate newValue = command.localDateValueOfParameterNamed(ClientApiConstants.dateOfBirthParamName); + this.dateOfBirth = newValue.toDate(); + } validate(); @@ -803,4 +813,12 @@ public final class Client extends AbstractPersistable { public Date dateOfBirth() { return this.dateOfBirth; } + + public LocalDate dateOfBirthLocalDate(){ + LocalDate dateOfBirth = null; + if (this.dateOfBirth != null) { + dateOfBirth = LocalDate.fromDateFields(this.dateOfBirth); + } + return dateOfBirth; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java index ca2719d9b..1128b99de 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/collectionsheet/service/CollectionSheetReadPlatformServiceImpl.java @@ -488,12 +488,14 @@ public class CollectionSheetReadPlatformServiceImpl implements CollectionSheetRe int groupIndex = 0; boolean isEndOfRecords = false; // move cursor to first row. - rs.next(); + final boolean isNotEmtyResultSet = rs.next(); - while (!isEndOfRecords) { - group = groupSavingsDataMapper.mapRowData(rs, groupIndex++); - groups.add(group); - isEndOfRecords = rs.isAfterLast(); + if (isNotEmtyResultSet) { + while (!isEndOfRecords) { + group = groupSavingsDataMapper.mapRowData(rs, groupIndex++); + groups.add(group); + isEndOfRecords = rs.isAfterLast(); + } } return groups;