Merge pull request #924 from lingalamadhukar/MIFOSX-1242

MIFOSX-1245,MIFOSX-1244,MIFOSX-1243,MIFOSX-1242,MIFOSX-1241,MIFOSX-1240
This commit is contained in:
Vishwas Babu A J
2014-06-02 16:15:48 -07:00
8 changed files with 198 additions and 33 deletions
@@ -16,7 +16,6 @@ public final class AuditData {
private final Long id; private final Long id;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String actionName; private final String actionName;
@SuppressWarnings("unused")
private final String entityName; private final String entityName;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final Long resourceId; private final Long resourceId;
@@ -84,4 +83,8 @@ public final class AuditData {
public String getCommandAsJson() { public String getCommandAsJson() {
return this.commandAsJson; return this.commandAsJson;
} }
public String getEntityName() {
return this.entityName;
}
} }
@@ -38,6 +38,12 @@ import org.mifosplatform.portfolio.client.service.ClientReadPlatformService;
import org.mifosplatform.portfolio.loanproduct.data.LoanProductData; import org.mifosplatform.portfolio.loanproduct.data.LoanProductData;
import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations; import org.mifosplatform.portfolio.loanproduct.service.LoanEnumerations;
import org.mifosplatform.portfolio.loanproduct.service.LoanProductReadPlatformService; 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.data.AppUserData;
import org.mifosplatform.useradministration.domain.AppUser; import org.mifosplatform.useradministration.domain.AppUser;
import org.mifosplatform.useradministration.service.AppUserReadPlatformService; import org.mifosplatform.useradministration.service.AppUserReadPlatformService;
@@ -70,13 +76,17 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
private final StaffReadPlatformService staffReadPlatformService; private final StaffReadPlatformService staffReadPlatformService;
private final PaginationHelper<AuditData> paginationHelper = new PaginationHelper<AuditData>(); private final PaginationHelper<AuditData> paginationHelper = new PaginationHelper<AuditData>();
private final PaginationParametersDataValidator paginationParametersDataValidator; private final PaginationParametersDataValidator paginationParametersDataValidator;
private final SavingsProductReadPlatformService savingsProductReadPlatformService;
private final DepositProductReadPlatformService depositProductReadPlatformService;
@Autowired @Autowired
public AuditReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource, public AuditReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource,
final FromJsonHelper fromApiJsonHelper, final AppUserReadPlatformService appUserReadPlatformService, final FromJsonHelper fromApiJsonHelper, final AppUserReadPlatformService appUserReadPlatformService,
final OfficeReadPlatformService officeReadPlatformService, final ClientReadPlatformService clientReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, final ClientReadPlatformService clientReadPlatformService,
final LoanProductReadPlatformService loanProductReadPlatformService, final StaffReadPlatformService staffReadPlatformService, final LoanProductReadPlatformService loanProductReadPlatformService, final StaffReadPlatformService staffReadPlatformService,
final PaginationParametersDataValidator paginationParametersDataValidator) { final PaginationParametersDataValidator paginationParametersDataValidator,
final SavingsProductReadPlatformService savingsProductReadPlatformService,
final DepositProductReadPlatformService depositProductReadPlatformService) {
this.context = context; this.context = context;
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
this.fromApiJsonHelper = fromApiJsonHelper; this.fromApiJsonHelper = fromApiJsonHelper;
@@ -86,6 +96,8 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
this.loanProductReadPlatformService = loanProductReadPlatformService; this.loanProductReadPlatformService = loanProductReadPlatformService;
this.staffReadPlatformService = staffReadPlatformService; this.staffReadPlatformService = staffReadPlatformService;
this.paginationParametersDataValidator = paginationParametersDataValidator; this.paginationParametersDataValidator = paginationParametersDataValidator;
this.savingsProductReadPlatformService = savingsProductReadPlatformService;
this.depositProductReadPlatformService = depositProductReadPlatformService;
} }
private static final class AuditMapper implements RowMapper<AuditData> { private static final class AuditMapper implements RowMapper<AuditData> {
@@ -308,43 +320,52 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
final String productIdStr = auditObject.get("productId").getAsString(); final String productIdStr = auditObject.get("productId").getAsString();
if (StringUtils.isNotBlank(productIdStr)) { if (StringUtils.isNotBlank(productIdStr)) {
productId = Long.valueOf(productIdStr); productId = Long.valueOf(productIdStr);
final LoanProductData loanProduct = this.loanProductReadPlatformService.retrieveLoanProduct(productId); if (auditResult.getEntityName().equalsIgnoreCase("LOAN")) {
commandAsJsonMap.put("productName", loanProduct.getName()); 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 { } else {
commandAsJsonMap.put("productName", ""); commandAsJsonMap.put("productName", "");
} }
} }
if (commandAsJsonMap.containsKey("loanOfficerId")) { if (commandAsJsonMap.containsKey("loanOfficerId") || commandAsJsonMap.containsKey("fieldOfficerId")
commandAsJsonMap.remove("loanOfficerId"); || commandAsJsonMap.containsKey("staffId")) {
String staffIdStr = "";
String staffNameParamName = "";
Long loanOfficerId = null; if (commandAsJsonMap.containsKey("loanOfficerId")) {
final String loanOfficerIdStr = auditObject.get("loanOfficerId").getAsString(); commandAsJsonMap.remove("loanOfficerId");
if (StringUtils.isNotBlank(loanOfficerIdStr)) { staffIdStr = auditObject.get("loanOfficerId").getAsString();
loanOfficerId = Long.valueOf(loanOfficerIdStr); staffNameParamName = "loanOfficerName";
final StaffData officer = this.staffReadPlatformService.retrieveStaff(loanOfficerId); } else if (commandAsJsonMap.containsKey("fieldOfficerId")) {
commandAsJsonMap.put("loanOfficerName", officer.getDisplayName()); commandAsJsonMap.remove("fieldOfficerId");
} else { staffIdStr = auditObject.get("fieldOfficerId").getAsString();
commandAsJsonMap.put("loanOfficerName", ""); 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", updateEnumerations(commandAsJsonMap, auditObject, auditResult.getEntityName());
"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);
}
}
}
}
final String newAuditAsJson = this.fromApiJsonHelper.toJson(commandAsJsonMap); final String newAuditAsJson = this.fromApiJsonHelper.toJson(commandAsJsonMap);
auditResult.setCommandAsJson(newAuditAsJson); auditResult.setCommandAsJson(newAuditAsJson);
@@ -352,6 +373,64 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
return auditResult; return auditResult;
} }
private void updateEnumerations(Map<String, Object> 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<String, Object> 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 @Override
public AuditSearchData retrieveSearchTemplate(final String useType) { public AuditSearchData retrieveSearchTemplate(final String useType) {
@@ -429,6 +429,11 @@ public final class Client extends AbstractPersistable<Long> {
final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.staffIdParamName); final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.staffIdParamName);
actualChanges.put(ClientApiConstants.staffIdParamName, newValue); 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())) { if (command.isChangeInLongParameterNamed(ClientApiConstants.savingsProductIdParamName, savingsProductId())) {
final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.savingsProductIdParamName); final Long newValue = command.longValueOfParameterNamed(ClientApiConstants.savingsProductIdParamName);
@@ -734,4 +739,16 @@ public final class Client extends AbstractPersistable<Long> {
public CodeValue gender() { public CodeValue gender() {
return this.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;
}
} }
@@ -260,6 +260,16 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP
} }
clientForUpdate.updateStaff(newStaff); 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 (changes.containsKey(ClientApiConstants.savingsProductIdParamName)) {
if (clientForUpdate.isActive()) { throw new ClientActiveForUpdateException(clientId, if (clientForUpdate.isActive()) { throw new ClientActiveForUpdateException(clientId,
@@ -5,6 +5,7 @@
*/ */
package org.mifosplatform.portfolio.loanproduct.service; package org.mifosplatform.portfolio.loanproduct.service;
import org.mifosplatform.accounting.common.AccountingEnumerations;
import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.accountdetails.service.AccountEnumerations; import org.mifosplatform.portfolio.accountdetails.service.AccountEnumerations;
import org.mifosplatform.portfolio.common.domain.PeriodFrequencyType; 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_TYPE = "interestType";
public static final String INTEREST_CALCULATION_PERIOD_TYPE = "interestCalculationPeriodType"; public static final String INTEREST_CALCULATION_PERIOD_TYPE = "interestCalculationPeriodType";
public static final String PAYMENT_TYPE = "paymentType"; 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 final String LOAN_TYPE = "loanType";
public static EnumOptionData loanEnumueration(final String typeName, final int id) { public static EnumOptionData loanEnumueration(final String typeName, final int id) {
@@ -47,7 +48,11 @@ public class LoanEnumerations {
return interestType(id); return interestType(id);
} else if (typeName.equals(INTEREST_CALCULATION_PERIOD_TYPE)) { } else if (typeName.equals(INTEREST_CALCULATION_PERIOD_TYPE)) {
return interestCalculationPeriodType(id); 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; return null;
} }
@@ -361,4 +361,8 @@ public class DepositProductData {
public int accountingRuleTypeId() { public int accountingRuleTypeId() {
return this.accountingRule.getId().intValue(); return this.accountingRule.getId().intValue();
} }
public String getName() {
return this.name;
}
} }
@@ -341,4 +341,8 @@ public class SavingsProductData {
public int hashCode() { public int hashCode() {
return this.id.hashCode(); return this.id.hashCode();
} }
public String getName() {
return this.name;
}
} }
@@ -8,6 +8,7 @@ package org.mifosplatform.portfolio.savings.service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.mifosplatform.accounting.common.AccountingEnumerations;
import org.mifosplatform.infrastructure.core.data.EnumOptionData; import org.mifosplatform.infrastructure.core.data.EnumOptionData;
import org.mifosplatform.portfolio.savings.DepositAccountOnClosureType; import org.mifosplatform.portfolio.savings.DepositAccountOnClosureType;
import org.mifosplatform.portfolio.savings.DepositAccountType; import org.mifosplatform.portfolio.savings.DepositAccountType;
@@ -25,7 +26,49 @@ import org.mifosplatform.portfolio.savings.data.SavingsAccountTransactionEnumDat
import org.mifosplatform.portfolio.savings.domain.SavingsAccountStatusType; import org.mifosplatform.portfolio.savings.domain.SavingsAccountStatusType;
public class SavingsEnumerations { 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) { public static EnumOptionData lockinPeriodFrequencyType(final int id) {
return lockinPeriodFrequencyType(SavingsPeriodFrequencyType.fromInt(id)); return lockinPeriodFrequencyType(SavingsPeriodFrequencyType.fromInt(id));
} }