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 })
|
||||
@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);
|
||||
}
|
||||
|
||||
+1
-1
@@ -20,6 +20,6 @@ public interface JournalEntryReadPlatformService {
|
||||
Page<JournalEntryData> 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);
|
||||
|
||||
}
|
||||
|
||||
+19
-9
@@ -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<JournalEntryData> allOpeningTransactions = populateAllTransactionsFromGLAccounts(contraId);
|
||||
final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId);
|
||||
final String contraTransactionId = retrieveContraAccountTransactionId(officeId, contraId, currencyCode);
|
||||
|
||||
List<JournalEntryData> existingOpeningBalanceTransactions = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(contraTransactionId)) {
|
||||
existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId);
|
||||
existingOpeningBalanceTransactions = retrieveOfficeBalanceTransactions(officeId, contraTransactionId, currencyCode);
|
||||
}
|
||||
final List<JournalEntryData> transactions = populateOpeningBalances(existingOpeningBalanceTransactions, allOpeningTransactions);
|
||||
final List<JournalEntryData> assetAccountOpeningBalances = new ArrayList<>();
|
||||
@@ -457,14 +465,15 @@ public class JournalEntryReadPlatformServiceImpl implements JournalEntryReadPlat
|
||||
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;
|
||||
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<JournalEntryData> contraJournalEntries = retrieveContraTransactions(officeId, contraId, transactionId);
|
||||
final Page<JournalEntryData> 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<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 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);
|
||||
|
||||
|
||||
+53
-11
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user