diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/api/JournalEntriesApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/api/JournalEntriesApiResource.java index bdb944f60..e4bdb6902 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/api/JournalEntriesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/api/JournalEntriesApiResource.java @@ -166,11 +166,12 @@ public class JournalEntriesApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Path("openingbalance") - public String retrieveOpeningBalance(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId) { + public String retrieveOpeningBalance(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId, + @QueryParam("currencyCode") final String currencyCode) { this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission); - final OfficeOpeningBalancesData officeOpeningBalancesData = this.journalEntryReadPlatformService - .retrieveOfficeOpeningBalances(officeId); + final OfficeOpeningBalancesData officeOpeningBalancesData = this.journalEntryReadPlatformService.retrieveOfficeOpeningBalances( + officeId, currencyCode); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.apiJsonSerializerService.serialize(settings, officeOpeningBalancesData); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformService.java index 7826495c2..e26e3a38f 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformService.java @@ -20,6 +20,6 @@ public interface JournalEntryReadPlatformService { Page retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate, Date toDate, String transactionId, Integer entityType, JournalEntryAssociationParametersData associationParametersData); - OfficeOpeningBalancesData retrieveOfficeOpeningBalances(Long officeId); + OfficeOpeningBalancesData retrieveOfficeOpeningBalances(Long officeId, String currencyCode); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java index fa1884add..c04e8369c 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/journalentry/service/JournalEntryReadPlatformServiceImpl.java @@ -268,6 +268,14 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat whereClose = " and "; } + if (searchParameters.isCurrencyCodePassed()) { + sqlBuilder.append(whereClose + " journalEntry.currency_code = ?"); + objectArray[arrayPos] = searchParameters.getCurrencyCode(); + arrayPos = arrayPos + 1; + + whereClose = " and "; + } + if (glAccountId != null && glAccountId != 0) { sqlBuilder.append(whereClose + " journalEntry.account_id = ?"); objectArray[arrayPos] = glAccountId; @@ -372,7 +380,7 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat } @Override - public OfficeOpeningBalancesData retrieveOfficeOpeningBalances(final Long officeId) { + public OfficeOpeningBalancesData retrieveOfficeOpeningBalances(final Long officeId, String currencyCode) { final FinancialActivityAccount financialActivityAccountId = this.financialActivityAccountRepositoryWrapper .findByFinancialActivityTypeWithNotFoundDetection(300); @@ -389,11 +397,11 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat final OfficeData officeData = this.officeReadPlatformService.retrieveOffice(officeId); final List allOpeningTransactions = populateAllTransactionsFromGLAccounts(contraId); - final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId); + final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId, currencyCode); List existingOpeningBalanceTransactions = new ArrayList<>(); if (StringUtils.isNotBlank(contraTransactionId)) { - existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId); + existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId, currencyCode); } final List transactions = populateOpeningBalances(existingOpeningBalanceTransactions, allOpeningTransactions); final List assetAccountOpeningBalances = new ArrayList<>(); @@ -457,14 +465,15 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat return openingBalanceTransactions; } - private List retrieveOfficeBalanceTransactions(final Long officeId, final String transactionId) { + private List retrieveOfficeBalanceTransactions(final Long officeId, final String transactionId, + final String currencyCode) { final Long contraId = null; - return retrieveContraTransactions(officeId, contraId, transactionId).getPageItems(); + return retrieveContraTransactions(officeId, contraId, transactionId, currencyCode).getPageItems(); } - private String retrieveContraAccountTransactionId(final Long officeId, final Long contraId) { + private String retrieveContraAccountTransactionId(final Long officeId, final Long contraId, final String currencyCode) { final String transactionId = ""; - final Page contraJournalEntries = retrieveContraTransactions(officeId, contraId, transactionId); + final Page contraJournalEntries = retrieveContraTransactions(officeId, contraId, transactionId, currencyCode); if (!CollectionUtils.isEmpty(contraJournalEntries.getPageItems())) { final JournalEntryData contraTransaction = contraJournalEntries.getPageItems().get( contraJournalEntries.getPageItems().size() - 1); @@ -473,7 +482,8 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat return transactionId; } - private Page retrieveContraTransactions(final Long officeId, final Long contraId, final String transactionId) { + private Page retrieveContraTransactions(final Long officeId, final Long contraId, final String transactionId, + final String currencyCode) { final Integer offset = 0; final Integer limit = null; final String orderBy = "journalEntry.id"; @@ -487,7 +497,7 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat final Long savingsId = null; final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder, loanId, - savingsId); + savingsId, currencyCode); return retrieveAll(searchParameters, contraId, onlyManualEntries, fromDate, toDate, transactionId, entityType, associationParametersData); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/SearchParameters.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/SearchParameters.java index cea46e1c3..25586a450 100755 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/SearchParameters.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/core/service/SearchParameters.java @@ -21,13 +21,14 @@ public final class SearchParameters { private final String orderBy; private final String sortOrder; private final String accountNo; + private final String currencyCode; private final Long staffId; private final Long loanId; private final Long savingsId; - private final Boolean orphansOnly; + private final Boolean orphansOnly; public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name, final String hierarchy) { @@ -68,8 +69,9 @@ public final class SearchParameters { } public static SearchParameters forOffices(final String orderBy, final String sortOrder) { - final Boolean orphansOnly = false; - return new SearchParameters(null, null, null, null, null, null, null, null, null, orderBy, sortOrder, null, null, null, null, orphansOnly); + final Boolean orphansOnly = false; + return new SearchParameters(null, null, null, null, null, null, null, null, null, orderBy, sortOrder, null, null, null, null, + orphansOnly); } public static SearchParameters forLoans(final String sqlSearch, final String externalId, final Integer offset, final Integer limit, @@ -96,6 +98,16 @@ public final class SearchParameters { null, loanId, savingsId, orphansOnly); } + public static SearchParameters forJournalEntries(final Long officeId, final Integer offset, final Integer limit, final String orderBy, + final String sortOrder, final Long loanId, final Long savingsId, final String currencyCode) { + final Integer maxLimitAllowed = getCheckedLimit(limit); + final Long staffId = null; + final Boolean orphansOnly = false; + + return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId, + null, loanId, savingsId, orphansOnly, currencyCode); + } + public static SearchParameters forPagination(final Integer offset, final Integer limit, final String orderBy, final String sortOrder) { final Integer maxLimitAllowed = getCheckedLimit(limit); @@ -156,6 +168,30 @@ public final class SearchParameters { this.loanId = loanId; this.savingsId = savingsId; this.orphansOnly = orphansOnly; + this.currencyCode = null; + } + + public SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name, + final String hierarchy, final String firstname, final String lastname, final Integer offset, final Integer limit, + final String orderBy, final String sortOrder, final Long staffId, final String accountNo, final Long loanId, + final Long savingsId, final Boolean orphansOnly, final String currencyCode) { + this.sqlSearch = sqlSearch; + this.officeId = officeId; + this.externalId = externalId; + this.name = name; + this.hierarchy = hierarchy; + this.firstname = firstname; + this.lastname = lastname; + this.offset = offset; + this.limit = limit; + this.orderBy = orderBy; + this.sortOrder = sortOrder; + this.staffId = staffId; + this.accountNo = accountNo; + this.loanId = loanId; + this.savingsId = savingsId; + this.orphansOnly = orphansOnly; + this.currencyCode = currencyCode; } public boolean isOrderByRequested() { @@ -186,6 +222,10 @@ public final class SearchParameters { return this.officeId != null && this.officeId != 0; } + public boolean isCurrencyCodePassed() { + return this.currencyCode != null; + } + public boolean isLimited() { return this.limit != null && this.limit.intValue() > 0; } @@ -205,7 +245,11 @@ public final class SearchParameters { public Long getOfficeId() { return this.officeId; } - + + public String getCurrencyCode(){ + return this.currencyCode; + } + public String getExternalId() { return this.externalId; } @@ -269,12 +313,10 @@ public final class SearchParameters { public Long getSavingsId() { return this.savingsId; } - - public Boolean isOrphansOnly(){ - if(this.orphansOnly != null){ - return this.orphansOnly; - } - return false; - + + public Boolean isOrphansOnly() { + if (this.orphansOnly != null) { return this.orphansOnly; } + return false; + } } \ No newline at end of file