Merge pull request #1375 from awaleram/MIFOSX-1956
MIFOSX-1956: accounting opening balance with multiple currency
This commit is contained in:
+4
-3
@@ -166,11 +166,12 @@ public class JournalEntriesApiResource {
|
|||||||
@Consumes({ MediaType.APPLICATION_JSON })
|
@Consumes({ MediaType.APPLICATION_JSON })
|
||||||
@Produces({ MediaType.APPLICATION_JSON })
|
@Produces({ MediaType.APPLICATION_JSON })
|
||||||
@Path("openingbalance")
|
@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);
|
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
|
||||||
final OfficeOpeningBalancesData officeOpeningBalancesData = this.journalEntryReadPlatformService
|
final OfficeOpeningBalancesData officeOpeningBalancesData = this.journalEntryReadPlatformService.retrieveOfficeOpeningBalances(
|
||||||
.retrieveOfficeOpeningBalances(officeId);
|
officeId, currencyCode);
|
||||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||||
return this.apiJsonSerializerService.serialize(settings, officeOpeningBalancesData);
|
return this.apiJsonSerializerService.serialize(settings, officeOpeningBalancesData);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -20,6 +20,6 @@ public interface JournalEntryReadPlatformService {
|
|||||||
Page<JournalEntryData> retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate,
|
Page<JournalEntryData> retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate,
|
||||||
Date toDate, String transactionId, Integer entityType, JournalEntryAssociationParametersData associationParametersData);
|
Date toDate, String transactionId, Integer entityType, JournalEntryAssociationParametersData associationParametersData);
|
||||||
|
|
||||||
OfficeOpeningBalancesData retrieveOfficeOpeningBalances(Long officeId);
|
OfficeOpeningBalancesData retrieveOfficeOpeningBalances(Long officeId, String currencyCode);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-9
@@ -268,6 +268,14 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
whereClose = " and ";
|
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) {
|
if (glAccountId != null && glAccountId != 0) {
|
||||||
sqlBuilder.append(whereClose + " journalEntry.account_id = ?");
|
sqlBuilder.append(whereClose + " journalEntry.account_id = ?");
|
||||||
objectArray[arrayPos] = glAccountId;
|
objectArray[arrayPos] = glAccountId;
|
||||||
@@ -372,7 +380,7 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OfficeOpeningBalancesData retrieveOfficeOpeningBalances(final Long officeId) {
|
public OfficeOpeningBalancesData retrieveOfficeOpeningBalances(final Long officeId, String currencyCode) {
|
||||||
|
|
||||||
final FinancialActivityAccount financialActivityAccountId = this.financialActivityAccountRepositoryWrapper
|
final FinancialActivityAccount financialActivityAccountId = this.financialActivityAccountRepositoryWrapper
|
||||||
.findByFinancialActivityTypeWithNotFoundDetection(300);
|
.findByFinancialActivityTypeWithNotFoundDetection(300);
|
||||||
@@ -389,11 +397,11 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
|
|
||||||
final OfficeData officeData = this.officeReadPlatformService.retrieveOffice(officeId);
|
final OfficeData officeData = this.officeReadPlatformService.retrieveOffice(officeId);
|
||||||
final List<JournalEntryData> allOpeningTransactions = populateAllTransactionsFromGLAccounts(contraId);
|
final List<JournalEntryData> allOpeningTransactions = populateAllTransactionsFromGLAccounts(contraId);
|
||||||
final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId);
|
final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId, currencyCode);
|
||||||
|
|
||||||
List<JournalEntryData> existingOpeningBalanceTransactions = new ArrayList<>();
|
List<JournalEntryData> existingOpeningBalanceTransactions = new ArrayList<>();
|
||||||
if (StringUtils.isNotBlank(contraTransactionId)) {
|
if (StringUtils.isNotBlank(contraTransactionId)) {
|
||||||
existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId);
|
existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId, currencyCode);
|
||||||
}
|
}
|
||||||
final List<JournalEntryData> transactions = populateOpeningBalances(existingOpeningBalanceTransactions, allOpeningTransactions);
|
final List<JournalEntryData> transactions = populateOpeningBalances(existingOpeningBalanceTransactions, allOpeningTransactions);
|
||||||
final List<JournalEntryData> assetAccountOpeningBalances = new ArrayList<>();
|
final List<JournalEntryData> assetAccountOpeningBalances = new ArrayList<>();
|
||||||
@@ -457,14 +465,15 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
return openingBalanceTransactions;
|
return openingBalanceTransactions;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<JournalEntryData> retrieveOfficeBalanceTransactions(final Long officeId, final String transactionId) {
|
private List<JournalEntryData> retrieveOfficeBalanceTransactions(final Long officeId, final String transactionId,
|
||||||
|
final String currencyCode) {
|
||||||
final Long contraId = null;
|
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 String transactionId = "";
|
||||||
final Page<JournalEntryData> contraJournalEntries = retrieveContraTransactions(officeId, contraId, transactionId);
|
final Page<JournalEntryData> contraJournalEntries = retrieveContraTransactions(officeId, contraId, transactionId, currencyCode);
|
||||||
if (!CollectionUtils.isEmpty(contraJournalEntries.getPageItems())) {
|
if (!CollectionUtils.isEmpty(contraJournalEntries.getPageItems())) {
|
||||||
final JournalEntryData contraTransaction = contraJournalEntries.getPageItems().get(
|
final JournalEntryData contraTransaction = contraJournalEntries.getPageItems().get(
|
||||||
contraJournalEntries.getPageItems().size() - 1);
|
contraJournalEntries.getPageItems().size() - 1);
|
||||||
@@ -473,7 +482,8 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
return transactionId;
|
return transactionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Page<JournalEntryData> retrieveContraTransactions(final Long officeId, final Long contraId, final String transactionId) {
|
private Page<JournalEntryData> retrieveContraTransactions(final Long officeId, final Long contraId, final String transactionId,
|
||||||
|
final String currencyCode) {
|
||||||
final Integer offset = 0;
|
final Integer offset = 0;
|
||||||
final Integer limit = null;
|
final Integer limit = null;
|
||||||
final String orderBy = "journalEntry.id";
|
final String orderBy = "journalEntry.id";
|
||||||
@@ -487,7 +497,7 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
|||||||
final Long savingsId = null;
|
final Long savingsId = null;
|
||||||
|
|
||||||
final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder, loanId,
|
final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder, loanId,
|
||||||
savingsId);
|
savingsId, currencyCode);
|
||||||
return retrieveAll(searchParameters, contraId, onlyManualEntries, fromDate, toDate, transactionId, entityType,
|
return retrieveAll(searchParameters, contraId, onlyManualEntries, fromDate, toDate, transactionId, entityType,
|
||||||
associationParametersData);
|
associationParametersData);
|
||||||
|
|
||||||
|
|||||||
+50
-8
@@ -21,13 +21,14 @@ public final class SearchParameters {
|
|||||||
private final String orderBy;
|
private final String orderBy;
|
||||||
private final String sortOrder;
|
private final String sortOrder;
|
||||||
private final String accountNo;
|
private final String accountNo;
|
||||||
|
private final String currencyCode;
|
||||||
|
|
||||||
private final Long staffId;
|
private final Long staffId;
|
||||||
|
|
||||||
private final Long loanId;
|
private final Long loanId;
|
||||||
|
|
||||||
private final Long savingsId;
|
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,
|
public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name,
|
||||||
final String hierarchy) {
|
final String hierarchy) {
|
||||||
@@ -68,8 +69,9 @@ public final class SearchParameters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static SearchParameters forOffices(final String orderBy, final String sortOrder) {
|
public static SearchParameters forOffices(final String orderBy, final String sortOrder) {
|
||||||
final Boolean orphansOnly = false;
|
final Boolean orphansOnly = false;
|
||||||
return new SearchParameters(null, null, null, null, null, null, null, null, null, orderBy, sortOrder, null, null, null, null, orphansOnly);
|
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,
|
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);
|
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) {
|
public static SearchParameters forPagination(final Integer offset, final Integer limit, final String orderBy, final String sortOrder) {
|
||||||
|
|
||||||
final Integer maxLimitAllowed = getCheckedLimit(limit);
|
final Integer maxLimitAllowed = getCheckedLimit(limit);
|
||||||
@@ -156,6 +168,30 @@ public final class SearchParameters {
|
|||||||
this.loanId = loanId;
|
this.loanId = loanId;
|
||||||
this.savingsId = savingsId;
|
this.savingsId = savingsId;
|
||||||
this.orphansOnly = orphansOnly;
|
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() {
|
public boolean isOrderByRequested() {
|
||||||
@@ -186,6 +222,10 @@ public final class SearchParameters {
|
|||||||
return this.officeId != null && this.officeId != 0;
|
return this.officeId != null && this.officeId != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCurrencyCodePassed() {
|
||||||
|
return this.currencyCode != null;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isLimited() {
|
public boolean isLimited() {
|
||||||
return this.limit != null && this.limit.intValue() > 0;
|
return this.limit != null && this.limit.intValue() > 0;
|
||||||
}
|
}
|
||||||
@@ -206,6 +246,10 @@ public final class SearchParameters {
|
|||||||
return this.officeId;
|
return this.officeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCurrencyCode(){
|
||||||
|
return this.currencyCode;
|
||||||
|
}
|
||||||
|
|
||||||
public String getExternalId() {
|
public String getExternalId() {
|
||||||
return this.externalId;
|
return this.externalId;
|
||||||
}
|
}
|
||||||
@@ -270,11 +314,9 @@ public final class SearchParameters {
|
|||||||
return this.savingsId;
|
return this.savingsId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isOrphansOnly(){
|
public Boolean isOrphansOnly() {
|
||||||
if(this.orphansOnly != null){
|
if (this.orphansOnly != null) { return this.orphansOnly; }
|
||||||
return this.orphansOnly;
|
return false;
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user