use of org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ in project mod-invoice by folio-org.
the class InvoicesApiTest method verifyTransitionToApproved.
private void verifyTransitionToApproved(Voucher voucherCreated, List<InvoiceLine> invoiceLines, Invoice invoice, int createdVoucherLines) {
List<JsonObject> invoiceLinesSearches = serverRqRs.get(INVOICE_LINES, HttpMethod.GET);
List<JsonObject> invoiceLinesUpdates = serverRqRs.get(INVOICE_LINES, HttpMethod.PUT);
List<JsonObject> voucherLinesCreated = serverRqRs.get(VOUCHER_LINES, HttpMethod.POST);
List<JsonObject> fundsSearches = serverRqRs.get(FUNDS, HttpMethod.GET);
List<JsonObject> invoiceUpdates = serverRqRs.get(INVOICES, HttpMethod.PUT);
List<JsonObject> transactionSummariesCreated = serverRqRs.get(INVOICE_TRANSACTION_SUMMARIES, HttpMethod.POST);
List<JsonObject> pendingPaymentCreated = Optional.ofNullable(serverRqRs.get(FINANCE_PENDING_PAYMENTS, HttpMethod.POST)).orElse(emptyList());
assertThat(invoiceLinesSearches, notNullValue());
assertThat(invoiceLinesUpdates, notNullValue());
assertThat(fundsSearches, notNullValue());
assertThat(voucherLinesCreated, notNullValue());
assertThat(invoiceUpdates, notNullValue());
assertThat(transactionSummariesCreated, notNullValue());
assertThat(invoiceLinesSearches, hasSize(invoiceLines.size() / MAX_IDS_FOR_GET_RQ + 1));
List<InvoiceLine> linesWithUpdatedStatus = invoiceLinesUpdates.stream().map(entries -> entries.mapTo(InvoiceLine.class)).filter(invoiceLine -> invoiceLine.getInvoiceLineStatus() == InvoiceLine.InvoiceLineStatus.APPROVED).collect(toList());
assertThat(linesWithUpdatedStatus, hasSize(invoiceLines.size()));
assertThat(voucherLinesCreated, hasSize(createdVoucherLines));
InvoiceTransactionSummary transactionSummary = transactionSummariesCreated.get(0).mapTo(InvoiceTransactionSummary.class);
Invoice invoiceUpdate = invoiceUpdates.get(0).mapTo(Invoice.class);
List<VoucherLine> voucherLines = voucherLinesCreated.stream().map(json -> json.mapTo(VoucherLine.class)).collect(Collectors.toList());
assertThat(Invoice.Status.APPROVED, equalTo(invoiceUpdate.getStatus()));
assertThat(invoiceUpdate.getVoucherNumber(), equalTo(voucherCreated.getVoucherNumber()));
assertThat(invoiceUpdate.getId(), equalTo(voucherCreated.getInvoiceId()));
assertThat(invoiceUpdate.getCurrency(), equalTo(voucherCreated.getInvoiceCurrency()));
// assertThat(HelperUtils.getInvoiceExchangeRateProvider().getExchangeRate(voucherCreated.getInvoiceCurrency(), voucherCreated.getSystemCurrency()).getFactor().doubleValue(), equalTo(voucherCreated.getExchangeRate()));
assertThat(voucherCreated.getAccountingCode(), equalTo(invoiceUpdate.getAccountingCode()));
assertThat(voucherCreated.getExportToAccounting(), is(false));
assertThat(Voucher.Status.AWAITING_PAYMENT, equalTo(voucherCreated.getStatus()));
assertThat(Voucher.Type.VOUCHER, equalTo(voucherCreated.getType()));
int paymentCreditNumber = invoiceLines.stream().filter(invoiceLine -> invoiceLine.getTotal() >= 0).mapToInt(line -> line.getFundDistributions().size()).sum();
paymentCreditNumber += invoice.getAdjustments().stream().mapToInt(adj -> adj.getFundDistributions().size()).sum();
assertThat(pendingPaymentCreated, hasSize(paymentCreditNumber));
List<Transaction> pendingPayments = pendingPaymentCreated.stream().map(entries -> entries.mapTo(Transaction.class)).collect(toList());
assertThat(pendingPayments, Every.everyItem(hasProperty("sourceInvoiceId", is(invoice.getId()))));
assertThat(transactionSummary.getNumPendingPayments(), is(paymentCreditNumber));
assertThat(transactionSummary.getNumPaymentsCredits(), is(paymentCreditNumber));
assertThat(calculateVoucherAmount(voucherCreated, voucherLines), equalTo(voucherCreated.getAmount()));
assertThat(createdVoucherLines, equalTo(voucherLinesCreated.size()));
invoiceLines.forEach(invoiceLine -> calculateInvoiceLineTotals(invoiceLine, invoiceUpdate));
voucherLines.forEach(voucherLine -> {
assertThat(voucherCreated.getId(), equalTo(voucherLine.getVoucherId()));
assertThat(voucherLine.getFundDistributions(), allOf(Every.everyItem(hasProperty("distributionType", is(AMOUNT))), Every.everyItem(hasProperty("code"))));
assertThat(calculateVoucherLineAmount(voucherLine.getFundDistributions(), voucherCreated), equalTo(voucherLine.getAmount()));
assertThat(voucherLine.getFundDistributions().stream().filter(fundDistribution -> Objects.nonNull(fundDistribution.getInvoiceLineId())).map(FundDistribution::getInvoiceLineId).distinct().collect(Collectors.toList()), hasSize(voucherLine.getSourceIds().size()));
});
}
use of org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ in project mod-orders by folio-org.
the class FundService method getAllFundsByIds.
private CompletableFuture<List<Fund>> getAllFundsByIds(Collection<String> ids, RequestContext requestContext) {
String query = convertIdsToCqlQuery(ids);
RequestEntry requestEntry = new RequestEntry(ENDPOINT).withQuery(query).withLimit(MAX_IDS_FOR_GET_RQ).withOffset(0);
return restClient.get(requestEntry, requestContext, FundCollection.class).thenApply(FundCollection::getFunds).thenApply(funds -> {
if (funds.size() == ids.size()) {
return funds;
}
List<Parameter> parameters = ids.stream().filter(id -> funds.stream().noneMatch(fund -> fund.getId().equals(id))).map(id -> new Parameter().withValue(id).withKey("funds")).collect(Collectors.toList());
throw new HttpException(404, FUNDS_NOT_FOUND.toError().withParameters(parameters));
});
}
use of org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ in project mod-orders by folio-org.
the class TransactionService method getTransactionsByIds.
public CompletableFuture<List<Transaction>> getTransactionsByIds(List<String> trIds, RequestContext requestContext) {
return collectResultsOnSuccess(ofSubLists(new ArrayList<>(trIds), MAX_IDS_FOR_GET_RQ).map(ids -> getTransactionsChunksByIds(ids, requestContext)).toList()).thenApply(lists -> lists.stream().flatMap(Collection::stream).collect(Collectors.toList())).thenApply(trList -> {
if (trList.size() != trIds.size()) {
List<Parameter> parameters = new ArrayList<>();
parameters.add(new Parameter().withKey("trIds").withValue(trIds.toString()));
throw new HttpException(500, ERROR_RETRIEVING_TRANSACTION.toError().withParameters(parameters));
}
return trList;
});
}
use of org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ in project mod-orders by folio-org.
the class InventoryManager method fetchHoldingsByFundIds.
private CompletableFuture<List<JsonObject>> fetchHoldingsByFundIds(List<String> holdingIds, RequestContext requestContext) {
String query = convertIdsToCqlQuery(holdingIds);
RequestEntry requestEntry = new RequestEntry(INVENTORY_LOOKUP_ENDPOINTS.get(HOLDINGS_RECORDS)).withQuery(query).withOffset(0).withLimit(MAX_IDS_FOR_GET_RQ);
return restClient.getAsJsonObject(requestEntry, requestContext).thenApply(jsonHoldings -> jsonHoldings.getJsonArray(HOLDINGS_RECORDS).stream().map(o -> ((JsonObject) o)).collect(toList())).thenApply(holdings -> {
if (holdings.size() == holdingIds.size()) {
return holdings;
}
List<Parameter> parameters = holdingIds.stream().filter(id -> holdings.stream().noneMatch(holding -> holding.getString(ID).equals(id))).map(id -> new Parameter().withValue(id).withKey("holdings")).collect(Collectors.toList());
throw new HttpException(404, PARTIALLY_RETURNED_COLLECTION.toError().withParameters(parameters));
});
}
Aggregations