Пример #1
0
  @Override
  public void updatePrices(final I_C_InvoiceLine invoiceLine) {
    // Product was not set yet. There is no point to calculate the prices
    if (invoiceLine.getM_Product_ID() <= 0) {
      return;
    }

    //
    // Calculate Pricing Result
    final IEditablePricingContext pricingCtx = createPricingContext(invoiceLine);
    final boolean usePriceUOM = InterfaceWrapperHelper.isNew(invoiceLine);
    pricingCtx.setConvertPriceToContextUOM(!usePriceUOM);

    pricingCtx.setManualPrice(invoiceLine.isManualPrice());

    if (pricingCtx.isManualPrice()) {
      // Task 08908: do not calculate the prices in case the price is manually set
      return;
    }

    final IPricingResult pricingResult = Services.get(IPricingBL.class).calculatePrice(pricingCtx);
    if (!pricingResult.isCalculated()) {
      throw new ProductNotOnPriceListException(pricingCtx, invoiceLine.getLine());
    }

    //
    // PriceList
    final BigDecimal priceList = pricingResult.getPriceList();
    invoiceLine.setPriceList(priceList);

    invoiceLine.setPriceLimit(pricingResult.getPriceLimit());
    invoiceLine.setPrice_UOM_ID(pricingResult.getPrice_UOM_ID());

    invoiceLine.setPriceEntered(pricingResult.getPriceStd());
    invoiceLine.setPriceActual(pricingResult.getPriceStd());

    //
    // Discount

    invoiceLine.setDiscount(pricingResult.getDiscount());

    //
    // Calculate PriceActual from PriceEntered and Discount
    calculatePriceActual(invoiceLine, pricingResult.getPrecision());

    invoiceLine.setPrice_UOM_ID(pricingResult.getPrice_UOM_ID()); //
  }