Search in sources :

Example 6 with CompositePoLine

use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.

the class MockServer method handleGetPoLineById.

private void handleGetPoLineById(RoutingContext ctx) {
    logger.info("got: " + ctx.request().path());
    String id = ctx.request().getParam(AbstractHelper.ID);
    logger.info("id: " + id);
    addServerRqRsData(HttpMethod.GET, ResourcePathResolver.ORDER_LINES, new JsonObject().put(AbstractHelper.ID, id));
    if (ID_FOR_INTERNAL_SERVER_ERROR.equals(id)) {
        serverResponse(ctx, 500, APPLICATION_JSON, INTERNAL_SERVER_ERROR.getReasonPhrase());
    } else if (ID_FOR_INTERNAL_SERVER_ERROR_PUT.equals(id)) {
        CompositePoLine poLine = new CompositePoLine();
        poLine.setId(ID_FOR_INTERNAL_SERVER_ERROR_PUT);
        serverResponse(ctx, 200, APPLICATION_JSON, JsonObject.mapFrom(poLine).encodePrettily());
    } else {
        Supplier<JsonObject> getFromFile = () -> {
            String filePath = String.format(MOCK_DATA_PATH_PATTERN, PO_LINES_MOCK_DATA_PATH, id);
            try {
                return new JsonObject(getMockData(filePath));
            } catch (IOException e) {
                return null;
            }
        };
        // Attempt to find POLine in mock server memory
        JsonObject poLine = getMockEntry(ResourcePathResolver.ORDER_LINES, id).orElseGet(getFromFile);
        if (poLine == null) {
            ctx.response().setStatusCode(404).end(id);
        } else {
            // validate content against schema
            CompositePoLine poLineSchema = poLine.mapTo(CompositePoLine.class);
            poLineSchema.setId(id);
            poLine = JsonObject.mapFrom(poLineSchema);
            serverResponse(ctx, 200, APPLICATION_JSON, poLine.encodePrettily());
        }
    }
}
Also used : JsonObject(io.vertx.core.json.JsonObject) CompositePoLine(org.folio.rest.acq.model.orders.CompositePoLine) Supplier(java.util.function.Supplier) IOException(java.io.IOException)

Example 7 with CompositePoLine

use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.

the class InvoicesApiTest method validatePoLinesPaymentStatus.

private void validatePoLinesPaymentStatus() {
    final List<CompositePoLine> updatedPoLines = getRqRsEntries(HttpMethod.PUT, ORDER_LINES).stream().map(poLine -> poLine.mapTo(CompositePoLine.class)).collect(Collectors.toList());
    assertThat(updatedPoLines, not(empty()));
    Map<String, List<InvoiceLine>> invoiceLines = getRqRsEntries(HttpMethod.GET, INVOICE_LINES).get(0).mapTo(InvoiceLineCollection.class).getInvoiceLines().stream().collect(groupingBy(InvoiceLine::getPoLineId));
    assertThat(invoiceLines.size(), equalTo(updatedPoLines.size()));
    for (Map.Entry<String, List<InvoiceLine>> poLineIdWithInvoiceLines : invoiceLines.entrySet()) {
        CompositePoLine poLine = updatedPoLines.stream().filter(compositePoLine -> compositePoLine.getId().equals(poLineIdWithInvoiceLines.getKey())).findFirst().orElseThrow(NullPointerException::new);
        CompositePoLine.PaymentStatus expectedStatus = poLineIdWithInvoiceLines.getValue().stream().anyMatch(InvoiceLine::getReleaseEncumbrance) ? CompositePoLine.PaymentStatus.FULLY_PAID : CompositePoLine.PaymentStatus.PARTIALLY_PAID;
        assertThat(expectedStatus, is(poLine.getPaymentStatus()));
    }
}
Also used : ORDER_LINES(org.folio.invoices.utils.ResourcePathResolver.ORDER_LINES) Arrays(java.util.Arrays) HelperUtils.getNoAcqUnitCQL(org.folio.invoices.utils.HelperUtils.getNoAcqUnitCQL) VOUCHERS_STORAGE(org.folio.invoices.utils.ResourcePathResolver.VOUCHERS_STORAGE) PROTECTED_AND_MODIFIED_FIELDS(org.folio.rest.impl.InvoicesImpl.PROTECTED_AND_MODIFIED_FIELDS) Disabled(org.junit.jupiter.api.Disabled) StringUtils(org.apache.commons.lang3.StringUtils) INVOICE_LINE_WITH_APPROVED_INVOICE_SAMPLE_PATH(org.folio.rest.impl.InvoiceLinesApiTest.INVOICE_LINE_WITH_APPROVED_INVOICE_SAMPLE_PATH) MockServer.getInvoiceLineSearches(org.folio.rest.impl.MockServer.getInvoiceLineSearches) BigDecimal(java.math.BigDecimal) Voucher(org.folio.rest.jaxrs.model.Voucher) Matchers.nullValue(org.hamcrest.Matchers.nullValue) Map(java.util.Map) InvoiceTransactionSummary(org.folio.rest.acq.model.finance.InvoiceTransactionSummary) Is.is(org.hamcrest.core.Is.is) JsonObject(io.vertx.core.json.JsonObject) VOUCHERS_LIST_PATH(org.folio.rest.impl.VouchersApiTest.VOUCHERS_LIST_PATH) Errors(org.folio.rest.jaxrs.model.Errors) Budget(org.folio.rest.acq.model.finance.Budget) Awaitility.await(org.awaitility.Awaitility.await) Status(org.folio.rest.jaxrs.model.Invoice.Status) Matchers.notNullValue(org.hamcrest.Matchers.notNullValue) Matchers.allOf(org.hamcrest.Matchers.allOf) CompositePoLine(org.folio.rest.acq.model.orders.CompositePoLine) ACQUISITIONS_UNIT_IDS(org.folio.rest.impl.ProtectionHelper.ACQUISITIONS_UNIT_IDS) FOLIO_INVOICE_NUMBER(org.folio.invoices.utils.ResourcePathResolver.FOLIO_INVOICE_NUMBER) Ledger(org.folio.rest.acq.model.finance.Ledger) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) Fund(org.folio.rest.acq.model.finance.Fund) FUND_DISTRIBUTIONS_NOT_PRESENT(org.folio.invoices.utils.ErrorCodes.FUND_DISTRIBUTIONS_NOT_PRESENT) VOUCHER_UPDATE_FAILURE(org.folio.invoices.utils.ErrorCodes.VOUCHER_UPDATE_FAILURE) FINANCE_TRANSACTIONS(org.folio.invoices.utils.ResourcePathResolver.FINANCE_TRANSACTIONS) Stream(java.util.stream.Stream) Logger(org.apache.logging.log4j.Logger) ADJUSTMENT_FUND_DISTRIBUTIONS_SUMMARY_MISMATCH(org.folio.invoices.utils.ErrorCodes.ADJUSTMENT_FUND_DISTRIBUTIONS_SUMMARY_MISMATCH) HelperUtils.calculateVoucherAmount(org.folio.invoices.utils.HelperUtils.calculateVoucherAmount) MockServer.addMockEntry(org.folio.rest.impl.MockServer.addMockEntry) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Adjustment(org.folio.rest.jaxrs.model.Adjustment) PREFIX_CONFIG_WITH_NON_EXISTING_VALUE_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.PREFIX_CONFIG_WITH_NON_EXISTING_VALUE_X_OKAPI_TENANT) TEXT_PLAIN(javax.ws.rs.core.MediaType.TEXT_PLAIN) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.endsWith(org.hamcrest.Matchers.endsWith) FISCAL_YEAR_ID(org.folio.rest.impl.MockServer.FISCAL_YEAR_ID) Invoice(org.folio.rest.jaxrs.model.Invoice) BUDGETS(org.folio.invoices.utils.ResourcePathResolver.BUDGETS) HelperUtils.convertToDoubleWithRounding(org.folio.invoices.utils.HelperUtils.convertToDoubleWithRounding) Collectors.groupingBy(java.util.stream.Collectors.groupingBy) BUDGET_NOT_FOUND(org.folio.invoices.utils.ErrorCodes.BUDGET_NOT_FOUND) Transaction(org.folio.rest.acq.model.finance.Transaction) CollectionUtils(org.apache.commons.collections4.CollectionUtils) ArrayList(java.util.ArrayList) Every(org.hamcrest.core.Every) Headers(io.restassured.http.Headers) HelperUtils.getAdjustmentFundDistributionAmount(org.folio.invoices.utils.HelperUtils.getAdjustmentFundDistributionAmount) MAX_IDS_FOR_GET_RQ(org.folio.rest.RestConstants.MAX_IDS_FOR_GET_RQ) MockServer.getQueryParams(org.folio.rest.impl.MockServer.getQueryParams) Matchers.hasProperty(org.hamcrest.Matchers.hasProperty) InvoiceLineCollection(org.folio.rest.jaxrs.model.InvoiceLineCollection) HelperUtils.calculateInvoiceLineTotals(org.folio.invoices.utils.HelperUtils.calculateInvoiceLineTotals) MockServer.getInvoiceRetrievals(org.folio.rest.impl.MockServer.getInvoiceRetrievals) FINANCE_CREDITS(org.folio.invoices.utils.ResourcePathResolver.FINANCE_CREDITS) InvoiceProtectedFields(org.folio.invoices.utils.InvoiceProtectedFields) Matchers.hasSize(org.hamcrest.Matchers.hasSize) FieldUtils(org.apache.commons.lang3.reflect.FieldUtils) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) Monetary(javax.money.Monetary) FUND_CANNOT_BE_PAID(org.folio.invoices.utils.ErrorCodes.FUND_CANNOT_BE_PAID) NO_INVOICE_LINES_ERROR_MSG(org.folio.services.validator.InvoiceValidator.NO_INVOICE_LINES_ERROR_MSG) Matchers.greaterThanOrEqualTo(org.hamcrest.Matchers.greaterThanOrEqualTo) VoucherLineCollection(org.folio.rest.acq.model.VoucherLineCollection) HasProperty(org.hamcrest.beans.HasProperty) CURRENT_FISCAL_YEAR(org.folio.rest.impl.MockServer.CURRENT_FISCAL_YEAR) AMOUNT(org.folio.rest.jaxrs.model.FundDistribution.DistributionType.AMOUNT) VOUCHER_NUMBER_PREFIX_NOT_ALPHA(org.folio.invoices.utils.ErrorCodes.VOUCHER_NUMBER_PREFIX_NOT_ALPHA) MockServer.getInvoiceSearches(org.folio.rest.impl.MockServer.getInvoiceSearches) Vertx(io.vertx.core.Vertx) IOException(java.io.IOException) ACCOUNTING_CODE_NOT_PRESENT(org.folio.invoices.utils.ErrorCodes.ACCOUNTING_CODE_NOT_PRESENT) MockServer.serverRqRs(org.folio.rest.impl.MockServer.serverRqRs) VoucherLine(org.folio.rest.jaxrs.model.VoucherLine) FUNDS_NOT_FOUND(org.folio.invoices.utils.ErrorCodes.FUNDS_NOT_FOUND) LINE_FUND_DISTRIBUTIONS_SUMMARY_MISMATCH(org.folio.invoices.utils.ErrorCodes.LINE_FUND_DISTRIBUTIONS_SUMMARY_MISMATCH) GENERIC_ERROR_CODE(org.folio.invoices.utils.ErrorCodes.GENERIC_ERROR_CODE) INVALID_PREFIX_CONFIG_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.INVALID_PREFIX_CONFIG_X_OKAPI_TENANT) FINANCE_PAYMENTS(org.folio.invoices.utils.ResourcePathResolver.FINANCE_PAYMENTS) ConversionQueryBuilder(javax.money.convert.ConversionQueryBuilder) INVOICES(org.folio.invoices.utils.ResourcePathResolver.INVOICES) VOUCHER_NOT_FOUND(org.folio.invoices.utils.ErrorCodes.VOUCHER_NOT_FOUND) TEST_PREFIX(org.folio.rest.impl.MockServer.TEST_PREFIX) PO_LINE_UPDATE_FAILURE(org.folio.invoices.utils.ErrorCodes.PO_LINE_UPDATE_FAILURE) Date(java.util.Date) CurrencyUnit(javax.money.CurrencyUnit) IsEqual.equalTo(org.hamcrest.core.IsEqual.equalTo) HttpStatus(org.apache.http.HttpStatus) INVOICE_TRANSACTION_SUMMARIES(org.folio.invoices.utils.ResourcePathResolver.INVOICE_TRANSACTION_SUMMARIES) ExchangeRateProviderResolver(org.folio.services.exchange.ExchangeRateProviderResolver) ERROR_CONFIG_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.ERROR_CONFIG_X_OKAPI_TENANT) Collectors.toMap(java.util.stream.Collectors.toMap) Matchers.everyItem(org.hamcrest.Matchers.everyItem) LEDGERS(org.folio.invoices.utils.ResourcePathResolver.LEDGERS) INVOICE_NUMBER_ERROR_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.INVOICE_NUMBER_ERROR_X_OKAPI_TENANT) APPLICATION_JSON(javax.ws.rs.core.MediaType.APPLICATION_JSON) IsNot.not(org.hamcrest.core.IsNot.not) RoundingMode(java.math.RoundingMode) NON_EXIST_CONFIG_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.NON_EXIST_CONFIG_X_OKAPI_TENANT) InvoiceCollection(org.folio.rest.jaxrs.model.InvoiceCollection) InvoiceLine(org.folio.rest.jaxrs.model.InvoiceLine) Collections.emptyList(java.util.Collections.emptyList) INVOICE_LINES(org.folio.invoices.utils.ResourcePathResolver.INVOICE_LINES) Prorate(org.folio.rest.jaxrs.model.Adjustment.Prorate) Money(org.javamoney.moneta.Money) PERCENTAGE(org.folio.rest.jaxrs.model.FundDistribution.DistributionType.PERCENTAGE) ConversionQuery(javax.money.convert.ConversionQuery) BudgetStatus(org.folio.rest.acq.model.finance.Budget.BudgetStatus) UUID(java.util.UUID) FundDistribution(org.folio.rest.jaxrs.model.FundDistribution) HasPropertyWithValue(org.hamcrest.beans.HasPropertyWithValue) CANNOT_PAY_INVOICE_WITHOUT_APPROVAL(org.folio.invoices.utils.ErrorCodes.CANNOT_PAY_INVOICE_WITHOUT_APPROVAL) Collectors(java.util.stream.Collectors) LOCK_AND_CALCULATED_TOTAL_MISMATCH(org.folio.invoices.utils.ErrorCodes.LOCK_AND_CALCULATED_TOTAL_MISMATCH) PREFIX_CONFIG_WITHOUT_VALUE_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.PREFIX_CONFIG_WITHOUT_VALUE_X_OKAPI_TENANT) INVOICE_LINES_LIST_PATH(org.folio.rest.impl.InvoiceLinesApiTest.INVOICE_LINES_LIST_PATH) Objects(java.util.Objects) Test(org.junit.jupiter.api.Test) DEFAULT_SYSTEM_CURRENCY(org.folio.rest.impl.AbstractHelper.DEFAULT_SYSTEM_CURRENCY) HelperUtils.getFundDistributionAmount(org.folio.invoices.utils.HelperUtils.getFundDistributionAmount) List(java.util.List) FUNDS(org.folio.invoices.utils.ResourcePathResolver.FUNDS) MockServer.getRqRsEntries(org.folio.rest.impl.MockServer.getRqRsEntries) AcquisitionsUnitMembershipCollection(org.folio.rest.acq.model.units.AcquisitionsUnitMembershipCollection) FINANCE_PENDING_PAYMENTS(org.folio.invoices.utils.ResourcePathResolver.FINANCE_PENDING_PAYMENTS) ExchangeRateProvider(javax.money.convert.ExchangeRateProvider) Optional(java.util.Optional) ADJUSTMENT_FUND_DISTRIBUTIONS_NOT_PRESENT(org.folio.invoices.utils.ErrorCodes.ADJUSTMENT_FUND_DISTRIBUTIONS_NOT_PRESENT) MonetaryAmount(javax.money.MonetaryAmount) CurrencyConversion(javax.money.convert.CurrencyConversion) MockServer.getAcqUnitsSearches(org.folio.rest.impl.MockServer.getAcqUnitsSearches) HashMap(java.util.HashMap) VoucherCollection(org.folio.rest.jaxrs.model.VoucherCollection) Function(java.util.function.Function) PROHIBITED_FIELD_CHANGING(org.folio.invoices.utils.ErrorCodes.PROHIBITED_FIELD_CHANGING) Type(org.folio.rest.jaxrs.model.Adjustment.Type) VOUCHER_LINES(org.folio.invoices.utils.ResourcePathResolver.VOUCHER_LINES) RATE_KEY(org.folio.services.exchange.ExchangeRateProviderResolver.RATE_KEY) RequestContext(org.folio.rest.core.models.RequestContext) INVOICE(org.folio.invoices.utils.HelperUtils.INVOICE) MockServer.getAcqMembershipsSearches(org.folio.rest.impl.MockServer.getAcqMembershipsSearches) PENDING_PAYMENT_ERROR(org.folio.invoices.utils.ErrorCodes.PENDING_PAYMENT_ERROR) PO_LINE_NOT_FOUND(org.folio.invoices.utils.ErrorCodes.PO_LINE_NOT_FOUND) Matchers.empty(org.hamcrest.Matchers.empty) Matchers(org.hamcrest.Matchers) MockServer.getInvoiceCreations(org.folio.rest.impl.MockServer.getInvoiceCreations) ERROR_X_OKAPI_TENANT(org.folio.rest.impl.MockServer.ERROR_X_OKAPI_TENANT) Error(org.folio.rest.jaxrs.model.Error) UUID.randomUUID(java.util.UUID.randomUUID) Collectors.toList(java.util.stream.Collectors.toList) INVALID_INVOICE_TRANSITION_ON_PAID_STATUS(org.folio.invoices.utils.ErrorCodes.INVALID_INVOICE_TRANSITION_ON_PAID_STATUS) MockServer.getInvoiceUpdates(org.folio.rest.impl.MockServer.getInvoiceUpdates) VOUCHER_NUMBER_STORAGE(org.folio.invoices.utils.ResourcePathResolver.VOUCHER_NUMBER_STORAGE) Response(io.restassured.response.Response) HttpMethod(io.vertx.core.http.HttpMethod) FundCollection(org.folio.rest.acq.model.finance.FundCollection) EXTERNAL_ACCOUNT_NUMBER_IS_MISSING(org.folio.invoices.utils.ErrorCodes.EXTERNAL_ACCOUNT_NUMBER_IS_MISSING) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) SECONDS(java.util.concurrent.TimeUnit.SECONDS) CompositePoLine(org.folio.rest.acq.model.orders.CompositePoLine) ArrayList(java.util.ArrayList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) Matchers.containsString(org.hamcrest.Matchers.containsString) InvoiceLineCollection(org.folio.rest.jaxrs.model.InvoiceLineCollection) Map(java.util.Map) Collectors.toMap(java.util.stream.Collectors.toMap) HashMap(java.util.HashMap)

Example 8 with CompositePoLine

use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.

the class InvoiceHelperTest method shouldReturnTrueWhenCompositeCheckingForUpdatePoLinePaymentStatusIsDifferentValues.

@Test
@DisplayName("decide to update status of POLines with different statuses")
void shouldReturnTrueWhenCompositeCheckingForUpdatePoLinePaymentStatusIsDifferentValues() {
    InvoiceHelper invoiceHelper = new InvoiceHelper(okapiHeaders, context, "en");
    CompositePoLine ongoingCompositePoLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTING_PO_LINE_ID)).mapTo(CompositePoLine.class).withPaymentStatus(CompositePoLine.PaymentStatus.ONGOING);
    CompositePoLine fullyPaidCompositePoLine = getMockAsJson(String.format("%s%s.json", PO_LINE_MOCK_DATA_PATH, EXISTING_PO_LINE_ID)).mapTo(CompositePoLine.class).withPaymentStatus(CompositePoLine.PaymentStatus.FULLY_PAID);
    Map<CompositePoLine, CompositePoLine.PaymentStatus> compositePoLinesWithStatus = new HashMap<>() {

        {
            put(ongoingCompositePoLine, CompositePoLine.PaymentStatus.ONGOING);
            put(fullyPaidCompositePoLine, CompositePoLine.PaymentStatus.PENDING);
        }
    };
    assertTrue(invoiceHelper.isPaymentStatusUpdateRequired(compositePoLinesWithStatus, fullyPaidCompositePoLine));
}
Also used : HashMap(java.util.HashMap) CompositePoLine(org.folio.rest.acq.model.orders.CompositePoLine) Test(org.junit.jupiter.api.Test) DisplayName(org.junit.jupiter.api.DisplayName)

Example 9 with CompositePoLine

use of org.folio.rest.acq.model.orders.CompositePoLine in project mod-invoice by folio-org.

the class OrderServiceTest method shouldSkipDeletionOrderInvoiceRelationshipByInvoiceIdAndLineIdIfRelationNotExist.

@Test
void shouldSkipDeletionOrderInvoiceRelationshipByInvoiceIdAndLineIdIfRelationNotExist() {
    String invoiceId = UUID.randomUUID().toString();
    String poLineId = UUID.randomUUID().toString();
    String orderId = UUID.randomUUID().toString();
    CompositePoLine poLine = new CompositePoLine().withId(poLineId).withPurchaseOrderId(orderId);
    OrderInvoiceRelationshipCollection relationships = new OrderInvoiceRelationshipCollection().withOrderInvoiceRelationships(Collections.EMPTY_LIST).withTotalRecords(0);
    doReturn(completedFuture(poLine)).when(restClient).get(any(RequestEntry.class), eq(requestContextMock), eq(CompositePoLine.class));
    doReturn(completedFuture(relationships)).when(restClient).get(any(RequestEntry.class), eq(requestContextMock), eq(OrderInvoiceRelationshipCollection.class));
    doReturn(completedFuture(poLine)).when(orderLineService).getPoLine(poLineId, requestContextMock);
    orderService.deleteOrderInvoiceRelationshipByInvoiceIdAndLineId(invoiceId, poLineId, requestContextMock).join();
    verify(restClient, times(0)).delete(any(RequestEntry.class), eq(requestContextMock));
}
Also used : OrderInvoiceRelationshipCollection(org.folio.rest.acq.model.orders.OrderInvoiceRelationshipCollection) CompositePoLine(org.folio.rest.acq.model.orders.CompositePoLine) RequestEntry(org.folio.rest.core.models.RequestEntry) Test(org.junit.jupiter.api.Test)

Aggregations

CompositePoLine (org.folio.rest.acq.model.orders.CompositePoLine)9 Test (org.junit.jupiter.api.Test)8 HashMap (java.util.HashMap)6 JsonObject (io.vertx.core.json.JsonObject)5 IOException (java.io.IOException)5 Headers (io.restassured.http.Headers)4 Response (io.restassured.response.Response)4 Vertx (io.vertx.core.Vertx)4 HttpMethod (io.vertx.core.http.HttpMethod)4 BigDecimal (java.math.BigDecimal)4 RoundingMode (java.math.RoundingMode)4 ArrayList (java.util.ArrayList)4 Arrays (java.util.Arrays)4 Collections (java.util.Collections)4 Collections.emptyList (java.util.Collections.emptyList)4 Date (java.util.Date)4 List (java.util.List)4 Map (java.util.Map)4 Objects (java.util.Objects)4 Optional (java.util.Optional)4