From 95e78699d6be998172a32324ffa11494dfdb522e Mon Sep 17 00:00:00 2001 From: Madhukar Date: Mon, 2 Jun 2014 11:05:55 +0530 Subject: [PATCH] MIFOSX-1245,MIFOSX-1244,MIFOSX-1243,MIFOSX-1242,MIFOSX-1241,MIFOSX-1240 --- .../commands/data/AuditData.java | 5 +- .../service/AuditReadPlatformServiceImpl.java | 137 ++++++++++++++---- .../portfolio/client/domain/Client.java | 17 +++ ...WritePlatformServiceJpaRepositoryImpl.java | 10 ++ .../loanproduct/service/LoanEnumerations.java | 9 +- .../savings/data/DepositProductData.java | 4 + .../savings/data/SavingsProductData.java | 4 + .../savings/service/SavingsEnumerations.java | 45 +++++- 8 files changed, 198 insertions(+), 33 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/commands/data/AuditData.java b/mifosng-provider/src/main/java/org/mifosplatform/commands/data/AuditData.java index ed531dd9b..98181beea 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/commands/data/AuditData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/commands/data/AuditData.java @@ -16,7 +16,6 @@ public final class AuditData { private final Long id; @SuppressWarnings("unused") private final String actionName; - @SuppressWarnings("unused") private final String entityName; @SuppressWarnings("unused") private final Long resourceId; @@ -84,4 +83,8 @@ public final class AuditData { public String getCommandAsJson() { return this.commandAsJson; } + + public String getEntityName() { + return this.entityName; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/commands/service/AuditReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/commands/service/AuditReadPlatformServiceImpl.java index 3b9f0bdcc..0f4a96080 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/commands/service/AuditReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/commands/service/AuditReadPlatformServiceImpl.java @@ -38,6 +38,12 @@ import org.mifosplatform.portfolio.client.service.ClientReadPlatformService; import org.mifosplatform.portfolio.loanproduct.data.LoanProductData; import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations; import org.mifosplatform.portfolio.loanproduct.service.LoanProductReadPlatformService; +import org.mifosplatform.portfolio.savings.DepositAccountType; +import org.mifosplatform.portfolio.savings.data.DepositProductData; +import org.mifosplatform.portfolio.savings.data.SavingsProductData; +import org.mifosplatform.portfolio.savings.service.DepositProductReadPlatformService; +import org.mifosplatform.portfolio.savings.service.SavingsEnumerations; +import org.mifosplatform.portfolio.savings.service.SavingsProductReadPlatformService; import org.mifosplatform.useradministration.data.AppUserData; import org.mifosplatform.useradministration.domain.AppUser; import org.mifosplatform.useradministration.service.AppUserReadPlatformService; @@ -70,13 +76,17 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { private final StaffReadPlatformService staffReadPlatformService; private final PaginationHelper paginationHelper = new PaginationHelper(); private final PaginationParametersDataValidator paginationParametersDataValidator; + private final SavingsProductReadPlatformService savingsProductReadPlatformService; + private final DepositProductReadPlatformService depositProductReadPlatformService; @Autowired public AuditReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource, final FromJsonHelper fromApiJsonHelper, final AppUserReadPlatformService appUserReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, final ClientReadPlatformService clientReadPlatformService, final LoanProductReadPlatformService loanProductReadPlatformService, final StaffReadPlatformService staffReadPlatformService, - final PaginationParametersDataValidator paginationParametersDataValidator) { + final PaginationParametersDataValidator paginationParametersDataValidator, + final SavingsProductReadPlatformService savingsProductReadPlatformService, + final DepositProductReadPlatformService depositProductReadPlatformService) { this.context = context; this.jdbcTemplate = new JdbcTemplate(dataSource); this.fromApiJsonHelper = fromApiJsonHelper; @@ -86,6 +96,8 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { this.loanProductReadPlatformService = loanProductReadPlatformService; this.staffReadPlatformService = staffReadPlatformService; this.paginationParametersDataValidator = paginationParametersDataValidator; + this.savingsProductReadPlatformService = savingsProductReadPlatformService; + this.depositProductReadPlatformService = depositProductReadPlatformService; } private static final class AuditMapper implements RowMapper { @@ -308,43 +320,52 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { final String productIdStr = auditObject.get("productId").getAsString(); if (StringUtils.isNotBlank(productIdStr)) { productId = Long.valueOf(productIdStr); - final LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId); - commandAsJsonMap.put("productName", loanProduct.getName()); + if (auditResult.getEntityName().equalsIgnoreCase("LOAN")) { + final LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId); + commandAsJsonMap.put("productName", loanProduct.getName()); + } else if (auditResult.getEntityName().equalsIgnoreCase("SAVINGSACCOUNT")) { + final SavingsProductData savingProduct = this.savingsProductReadPlatformService.retrieveOne(productId); + commandAsJsonMap.put("productName", savingProduct.getName()); + } else if (auditResult.getEntityName().equalsIgnoreCase("RECURRINGDEPOSITACCOUNT")) { + final DepositProductData depositProduct = this.depositProductReadPlatformService.retrieveOne( + DepositAccountType.RECURRING_DEPOSIT, productId); + commandAsJsonMap.put("productName", depositProduct.getName()); + } else if (auditResult.getEntityName().equalsIgnoreCase("FIXEDDEPOSITACCOUNT")) { + final DepositProductData depositProduct = this.depositProductReadPlatformService.retrieveOne( + DepositAccountType.FIXED_DEPOSIT, productId); + commandAsJsonMap.put("productName", depositProduct.getName()); + } else { + commandAsJsonMap.put("productName", ""); + } } else { commandAsJsonMap.put("productName", ""); } } - if (commandAsJsonMap.containsKey("loanOfficerId")) { - commandAsJsonMap.remove("loanOfficerId"); + if (commandAsJsonMap.containsKey("loanOfficerId") || commandAsJsonMap.containsKey("fieldOfficerId") + || commandAsJsonMap.containsKey("staffId")) { + String staffIdStr = ""; + String staffNameParamName = ""; - Long loanOfficerId = null; - final String loanOfficerIdStr = auditObject.get("loanOfficerId").getAsString(); - if (StringUtils.isNotBlank(loanOfficerIdStr)) { - loanOfficerId = Long.valueOf(loanOfficerIdStr); - final StaffData officer = this.staffReadPlatformService.retrieveStaff(loanOfficerId); - commandAsJsonMap.put("loanOfficerName", officer.getDisplayName()); - } else { - commandAsJsonMap.put("loanOfficerName", ""); + if (commandAsJsonMap.containsKey("loanOfficerId")) { + commandAsJsonMap.remove("loanOfficerId"); + staffIdStr = auditObject.get("loanOfficerId").getAsString(); + staffNameParamName = "loanOfficerName"; + } else if (commandAsJsonMap.containsKey("fieldOfficerId")) { + commandAsJsonMap.remove("fieldOfficerId"); + staffIdStr = auditObject.get("fieldOfficerId").getAsString(); + staffNameParamName = "fieldOfficerName"; + } else if (commandAsJsonMap.containsKey("staffId")) { + commandAsJsonMap.remove("staffId"); + staffIdStr = auditObject.get("staffId").getAsString(); + staffNameParamName = "staffName"; } + + replaceStaffIdWithStaffName(staffIdStr, staffNameParamName, commandAsJsonMap); + } - final String[] enumTypes = { "loanTermFrequencyType", "repaymentFrequencyType", "amortizationType", "interestType", - "interestCalculationPeriodType", "interestRateFrequencyType" }; - - for (final String typeName : enumTypes) { - if (commandAsJsonMap.containsKey(typeName)) { - commandAsJsonMap.remove(typeName); - - final Integer enumTypeId = auditObject.get(typeName).getAsInt(); - if (enumTypeId != null) { - final String code = LoanEnumerations.loanEnumueration(typeName, enumTypeId).getCode(); - if (code != null) { - commandAsJsonMap.put(typeName, code); - } - } - } - } + updateEnumerations(commandAsJsonMap, auditObject, auditResult.getEntityName()); final String newAuditAsJson = this.fromApiJsonHelper.toJson(commandAsJsonMap); auditResult.setCommandAsJson(newAuditAsJson); @@ -352,6 +373,64 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { return auditResult; } + private void updateEnumerations(Map commandAsJsonMap, JsonObject auditObject, String entityName) { + + if (entityName.equalsIgnoreCase("LOAN") || entityName.equalsIgnoreCase("LOANPRODUCT")) { + + final String[] enumTypes = { "loanTermFrequencyType", "termFrequencyType", "repaymentFrequencyType", "amortizationType", + "interestType", "interestCalculationPeriodType", "interestRateFrequencyType", "loanType", "accountingRule" }; + + for (final String typeName : enumTypes) { + if (commandAsJsonMap.containsKey(typeName)) { + commandAsJsonMap.remove(typeName); + + final Integer enumTypeId = auditObject.get(typeName).getAsInt(); + if (enumTypeId != null) { + final String code = LoanEnumerations.loanEnumueration(typeName, enumTypeId).getValue(); + if (code != null) { + commandAsJsonMap.put(typeName, code); + } + } + } + } + + } else if (entityName.equalsIgnoreCase("SAVINGSPRODUCT") || entityName.equalsIgnoreCase("SAVINGSACCOUNT") + || entityName.equalsIgnoreCase("RECURRINGDEPOSITPRODUCT") || entityName.equalsIgnoreCase("RECURRINGDEPOSITACCOUNT") + || entityName.equalsIgnoreCase("FIXEDDEPOSITPRODUCT") || entityName.equalsIgnoreCase("FIXEDDEPOSITACCOUNT")) { + + final String[] enumTypes = { "interestCompoundingPeriodType", "interestPostingPeriodType", "interestCalculationType", + "lockinPeriodFrequencyType", "minDepositTermTypeId", "maxDepositTermTypeId", "inMultiplesOfDepositTermTypeId", + "depositPeriodFrequencyId", "accountingRule", "interestCalculationDaysInYearType", "preClosurePenalInterestOnTypeId", + "recurringFrequencyType" }; + + for (final String typeName : enumTypes) { + if (commandAsJsonMap.containsKey(typeName)) { + commandAsJsonMap.remove(typeName); + + final Integer enumTypeId = auditObject.get(typeName).getAsInt(); + if (enumTypeId != null) { + final String code = SavingsEnumerations.savingEnumueration(typeName, enumTypeId).getValue(); + if (code != null) { + commandAsJsonMap.put(typeName, code); + } + } + } + } + } + } + + private void replaceStaffIdWithStaffName(final String staffIdStr, final String staffNameParamName, Map commandAsJsonMap) { + + Long staffId = null; + if (StringUtils.isNotBlank(staffIdStr)) { + staffId = Long.valueOf(staffIdStr); + final StaffData officer = this.staffReadPlatformService.retrieveStaff(staffId); + commandAsJsonMap.put(staffNameParamName, officer.getDisplayName()); + } else { + commandAsJsonMap.put(staffNameParamName, ""); + } + } + @Override public AuditSearchData retrieveSearchTemplate(final String useType) { 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 dfa5694cd..e089fe407 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 @@ -429,6 +429,11 @@ public final class Client extends AbstractPersistable { final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.staffIdParamName); actualChanges.put(ClientApiConstants.staffIdParamName, newValue); } + + if (command.isChangeInLongParameterNamed(ClientApiConstants.genderIdParamName, genderId())) { + final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.genderIdParamName); + actualChanges.put(ClientApiConstants.genderIdParamName, newValue); + } if (command.isChangeInLongParameterNamed(ClientApiConstants.savingsProductIdParamName, savingsProductId())) { final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.savingsProductIdParamName); @@ -734,4 +739,16 @@ public final class Client extends AbstractPersistable { public CodeValue gender() { return this.gender; } + + private Long genderId() { + Long genderId = null; + if (this.gender != null) { + genderId = this.gender.getId(); + } + return genderId; + } + + public void updateGender(final CodeValue gender) { + this.gender = gender; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java index d35f8a75b..901a4c6a3 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java @@ -260,6 +260,16 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } clientForUpdate.updateStaff(newStaff); } + + if (changes.containsKey(ClientApiConstants.genderIdParamName)) { + + final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.genderIdParamName); + CodeValue gender = null; + if (newValue != null) { + gender = this.codeValueRepository.findOneByCodeNameAndIdWithNotFoundDetection(ClientApiConstants.GENDER, newValue); + } + clientForUpdate.updateGender(gender); + } if (changes.containsKey(ClientApiConstants.savingsProductIdParamName)) { if (clientForUpdate.isActive()) { throw new ClientActiveForUpdateException(clientId, diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/service/LoanEnumerations.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/service/LoanEnumerations.java index 754142ca3..992914f0d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/service/LoanEnumerations.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/service/LoanEnumerations.java @@ -5,6 +5,7 @@ */ package org.mifosplatform.portfolio.loanproduct.service; +import org.mifosplatform.accounting.common.AccountingEnumerations; import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.portfolio.accountdetails.service.AccountEnumerations; import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; @@ -29,7 +30,7 @@ public class LoanEnumerations { public static final String INTEREST_TYPE = "interestType"; public static final String INTEREST_CALCULATION_PERIOD_TYPE = "interestCalculationPeriodType"; public static final String PAYMENT_TYPE = "paymentType"; - public static final String ACCOUNTING_RULE_TYPE = "accountingRuleType"; + public static final String ACCOUNTING_RULE_TYPE = "accountingRule"; public static final String LOAN_TYPE = "loanType"; public static EnumOptionData loanEnumueration(final String typeName, final int id) { @@ -47,7 +48,11 @@ public class LoanEnumerations { return interestType(id); } else if (typeName.equals(INTEREST_CALCULATION_PERIOD_TYPE)) { return interestCalculationPeriodType(id); - } else if (typeName.equals(LOAN_TYPE)) { return AccountEnumerations.loanType(id); } + } else if (typeName.equals(ACCOUNTING_RULE_TYPE)) { + return AccountingEnumerations.accountingRuleType(id); + } else if (typeName.equals(LOAN_TYPE)) { + return AccountEnumerations.loanType(id); + } return null; } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/DepositProductData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/DepositProductData.java index 001dcc841..b658ecdde 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/DepositProductData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/DepositProductData.java @@ -361,4 +361,8 @@ public class DepositProductData { public int accountingRuleTypeId() { return this.accountingRule.getId().intValue(); } + + public String getName() { + return this.name; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/SavingsProductData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/SavingsProductData.java index f7e91ec4d..52df0b5f9 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/SavingsProductData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/data/SavingsProductData.java @@ -341,4 +341,8 @@ public class SavingsProductData { public int hashCode() { return this.id.hashCode(); } + + public String getName() { + return this.name; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsEnumerations.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsEnumerations.java index c96d2158f..d91c5b51f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsEnumerations.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsEnumerations.java @@ -8,6 +8,7 @@ package org.mifosplatform.portfolio.savings.service; import java.util.ArrayList; import java.util.List; +import org.mifosplatform.accounting.common.AccountingEnumerations; import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.portfolio.savings.DepositAccountOnClosureType; import org.mifosplatform.portfolio.savings.DepositAccountType; @@ -25,7 +26,49 @@ import org.mifosplatform.portfolio.savings.data.SavingsAccountTransactionEnumDat import org.mifosplatform.portfolio.savings.domain.SavingsAccountStatusType; public class SavingsEnumerations { - + + public static final String INTEREST_COMPOUNDING_PERIOD_TYPE = "interestCompoundingPeriodType"; + public static final String INTEREST_POSTING_PERIOD_TYPE = "interestPostingPeriodType"; + public static final String INTEREST_CALCULATION_TYPE = "interestCalculationType"; + public static final String MIN_DEPOSIT_TERM_TYPE = "minDepositTermTypeId"; + public static final String MAX_DEPOSIT_TERM_TYPE = "maxDepositTermTypeId"; + public static final String IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE = "inMultiplesOfDepositTermTypeId"; + public static final String DEPOSIT_PERIOD_FREQUNCY_TYPE = "depositPeriodFrequencyId"; + public static final String LOCKIN_PERIOD_FREQUNCY_TYPE = "lockinPeriodFrequencyType"; + public static final String ACCOUNTING_RULE_TYPE = "accountingRule"; + public static final String PRE_CLOSURE_PENAL_INTEREST_TYPE = "preClosurePenalInterestOnTypeId"; + public static final String INTEREST_CALCULATION_DAYS_IN_YEAR = "interestCalculationDaysInYearType"; + public static final String RECURRING_FREQUENCY_TYPE = "recurringFrequencyType"; + + public static EnumOptionData savingEnumueration(final String typeName, final int id) { + if (typeName.equals(INTEREST_COMPOUNDING_PERIOD_TYPE)) { + return compoundingInterestPeriodType(id); + } else if (typeName.equals(INTEREST_POSTING_PERIOD_TYPE)) { + return interestPostingPeriodType(id); + } else if (typeName.equals(INTEREST_CALCULATION_TYPE)) { + return interestCalculationType(id); + } else if (typeName.equals(MIN_DEPOSIT_TERM_TYPE)) { + return depositTermFrequencyType(id); + } else if (typeName.equals(MAX_DEPOSIT_TERM_TYPE)) { + return depositTermFrequencyType(id); + } else if (typeName.equals(IN_MULTIPLES_OF_DEPOSIT_TERM_TYPE)) { + return inMultiplesOfDepositTermFrequencyType(id); + } else if (typeName.equals(DEPOSIT_PERIOD_FREQUNCY_TYPE)) { + return depositPeriodFrequency(id); + } else if (typeName.equals(LOCKIN_PERIOD_FREQUNCY_TYPE)) { + return lockinPeriodFrequencyType(id); + } else if (typeName.equals(ACCOUNTING_RULE_TYPE)) { + return AccountingEnumerations.accountingRuleType(id); + } else if (typeName.equals(PRE_CLOSURE_PENAL_INTEREST_TYPE)) { + return preClosurePenaltyInterestOnType(id); + } else if (typeName.equals(INTEREST_CALCULATION_DAYS_IN_YEAR)) { + return interestCalculationDaysInYearType(id); + } else if (typeName.equals(RECURRING_FREQUENCY_TYPE)) { + return depositPeriodFrequency(id); + } + return null; + } + public static EnumOptionData lockinPeriodFrequencyType(final int id) { return lockinPeriodFrequencyType(SavingsPeriodFrequencyType.fromInt(id)); }