diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java index 2f5dacfad..7b6ce6b94 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/DepositAccountsApiResource.java @@ -25,6 +25,7 @@ import org.mifosng.platform.api.commands.DepositStateTransitionApprovalCommand; import org.mifosng.platform.api.commands.DepositStateTransitionCommand; import org.mifosng.platform.api.commands.UndoStateTransitionCommand; import org.mifosng.platform.api.data.DepositAccountData; +import org.mifosng.platform.api.data.DepositPermissionData; import org.mifosng.platform.api.data.DepositProductLookup; import org.mifosng.platform.api.data.EntityIdentifier; import org.mifosng.platform.api.data.EnumOptionData; @@ -106,6 +107,9 @@ public class DepositAccountsApiResource { public String retrieveDepositAccount(@PathParam("accountId") final Long accountId, @Context final UriInfo uriInfo) { Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters()); + + DepositPermissionData permissions = null; + if (responseParameters.isEmpty()) { responseParameters.addAll(typicalResponseParameters); } @@ -118,6 +122,18 @@ public class DepositAccountsApiResource { account = handleTemplateRelatedData(responseParameters, account); } + Set associationParameters = ApiParameterHelper.extractAssociationsForResponseIfProvided(uriInfo.getQueryParameters()); + if (!associationParameters.isEmpty()) { + if (associationParameters.contains("all")) { + responseParameters.addAll(Arrays.asList("permissions")); + } else { + responseParameters.addAll(associationParameters); + } + permissions = this.depositAccountReadPlatformService.retrieveDepositAccountsPermissions(account); + } + + account.setPermissions(permissions); + return this.apiJsonSerializerService.serializeDepositAccountDataToJson(prettyPrint, responseParameters, account); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositAccountData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositAccountData.java index 596e05bf2..4fd39921d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositAccountData.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositAccountData.java @@ -46,6 +46,7 @@ public class DepositAccountData { private final List productOptions; private Collection transactions; + private DepositPermissionData permissions; /* * used when returning account template data but only a clientId is passed, no selected product. @@ -89,6 +90,7 @@ public class DepositAccountData { this.rejectedonDate=null; this.transactions=null; + this.permissions=null; } public DepositAccountData( @@ -127,6 +129,7 @@ public class DepositAccountData { this.closedonDate=account.getClosedonDate(); this.transactions=account.getTransactions(); + this.permissions=account.getPermissions(); } public DepositAccountData( @@ -187,6 +190,7 @@ public class DepositAccountData { this.closedonDate = closedonDate; this.transactions = null; + this.permissions = null; } public DepositAccountData( @@ -234,6 +238,7 @@ public class DepositAccountData { this.rejectedonDate=null; this.transactions = null; + this.permissions = null; } public Long getId() { @@ -355,5 +360,13 @@ public class DepositAccountData { public void setTransactions(Collection transactions) { this.transactions = transactions; } + + public DepositPermissionData getPermissions() { + return permissions; + } + + public void setPermissions(DepositPermissionData permissions) { + this.permissions = permissions; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositPermissionData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositPermissionData.java new file mode 100644 index 000000000..75fb16278 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/DepositPermissionData.java @@ -0,0 +1,45 @@ +package org.mifosng.platform.api.data; + +public class DepositPermissionData { + + private final boolean rejectAllowed; + private final boolean withdrawnByApplicantAllowed; + private final boolean undoApprovalAllowed; + private final boolean pendingApproval; + private final boolean isActive; + + private final boolean anyActionOnLoanAllowed; + + public DepositPermissionData(final boolean rejectAllowed,final boolean withdrawnByApplicantAllowed,final boolean undoApprovalAllowed,final boolean pendingApproval,final boolean isActive) { + this.rejectAllowed = rejectAllowed; + this.withdrawnByApplicantAllowed = withdrawnByApplicantAllowed; + this.undoApprovalAllowed = undoApprovalAllowed; + this.pendingApproval = pendingApproval; + this.isActive=isActive; + this.anyActionOnLoanAllowed = isRejectAllowed() || isPendingApproval() || isUndoApprovalAllowed() || isWithdrawnByApplicantAllowed(); + } + + public boolean isRejectAllowed() { + return rejectAllowed; + } + + public boolean isWithdrawnByApplicantAllowed() { + return withdrawnByApplicantAllowed; + } + + public boolean isUndoApprovalAllowed() { + return undoApprovalAllowed; + } + + public boolean isPendingApproval() { + return pendingApproval; + } + + public boolean isAnyActionOnLoanAllowed() { + return anyActionOnLoanAllowed; + } + + public boolean isActive() { + return isActive; + } +} diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java index 31912de0a..f99c6756f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonApiJsonSerializerService.java @@ -105,7 +105,7 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ "currency", "deposit", "maturityInterestRate", "tenureInMonths", "interestCompoundedEvery", "interestCompoundedEveryPeriodType", "renewalAllowed","preClosureAllowed","preClosureInterestRate", - "withdrawnonDate","rejectedonDate","closedonDate","transactions" + "withdrawnonDate","rejectedonDate","closedonDate","transactions","permissions" ) ); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformService.java index 58ca8353c..1edb6272e 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformService.java @@ -3,6 +3,7 @@ package org.mifosng.platform.saving.service; import java.util.Collection; import org.mifosng.platform.api.data.DepositAccountData; +import org.mifosng.platform.api.data.DepositPermissionData; public interface DepositAccountReadPlatformService { @@ -10,5 +11,7 @@ public interface DepositAccountReadPlatformService { DepositAccountData retrieveDepositAccount(Long accountId); - DepositAccountData retrieveNewDepositAccountDetails(Long clientId, Long productId); + DepositAccountData retrieveNewDepositAccountDetails(Long clientId, Long productId); + + DepositPermissionData retrieveDepositAccountsPermissions(DepositAccountData depositAccountData); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformServiceImpl.java index b05bb6482..a73dd27f0 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/saving/service/DepositAccountReadPlatformServiceImpl.java @@ -12,6 +12,7 @@ import org.mifosng.platform.api.data.ClientData; import org.mifosng.platform.api.data.CurrencyData; import org.mifosng.platform.api.data.DepositAccountData; import org.mifosng.platform.api.data.DepositAccountTransactionData; +import org.mifosng.platform.api.data.DepositPermissionData; import org.mifosng.platform.api.data.DepositProductData; import org.mifosng.platform.api.data.DepositProductLookup; import org.mifosng.platform.api.data.EnumOptionData; @@ -245,4 +246,15 @@ public class DepositAccountReadPlatformServiceImpl implements DepositAccountRead } } + + @Override + public DepositPermissionData retrieveDepositAccountsPermissions(DepositAccountData depositAccountData) { + boolean pendingApproval = (depositAccountData.getStatus().getId().equals(100L)); + boolean undoApprovalAllowed = (depositAccountData.getStatus().getId().equals(200L)); + boolean isActive = (depositAccountData.getStatus().getId().equals(300L)); + boolean rejectAllowed = pendingApproval; + boolean withdrawnByApplicantAllowed = pendingApproval; + + return new DepositPermissionData(rejectAllowed, withdrawnByApplicantAllowed, undoApprovalAllowed, pendingApproval,isActive); + } } \ No newline at end of file