コード例 #1
0
  /**
   * Before Save
   *
   * @param newRecord new
   * @return true
   */
  protected boolean beforeSave(boolean newRecord) {
    if (getAD_User_ID() == -1) // 	Summary Project in Dimensions
    setAD_User_ID(0);

    //	Set Currency
    if (is_ValueChanged("M_PriceList_Version_ID") && getM_PriceList_Version_ID() != 0) {
      MPriceList pl = MPriceList.get(getCtx(), getM_PriceList_ID(), null);
      if (pl != null && pl.get_ID() != 0) setC_Currency_ID(pl.getC_Currency_ID());
    }

    return true;
  } //	beforeSave
コード例 #2
0
  /**
   * Invoice - Amount. - called from QtyInvoiced, PriceActual - calculates LineNetAmt
   *
   * @param ctx context
   * @param WindowNo window no
   * @param mTab tab
   * @param mField field
   * @param value value
   * @return null or error message
   */
  public String amt(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value) {
    if (isCalloutActive() || value == null) return "";

    //	log.log(Level.WARNING,"amt - init");
    int C_UOM_To_ID = Env.getContextAsInt(ctx, WindowNo, "C_UOM_ID");
    int M_Product_ID = Env.getContextAsInt(ctx, WindowNo, "M_Product_ID");
    int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
    int StdPrecision = MPriceList.getStandardPrecision(ctx, M_PriceList_ID);
    BigDecimal QtyEntered, QtyInvoiced, PriceEntered, PriceActual, PriceLimit, Discount, PriceList;
    //	get values
    QtyEntered = (BigDecimal) mTab.getValue("QtyEntered");
    QtyInvoiced = (BigDecimal) mTab.getValue("QtyInvoiced");
    log.fine("QtyEntered=" + QtyEntered + ", Invoiced=" + QtyInvoiced + ", UOM=" + C_UOM_To_ID);
    //
    PriceEntered = (BigDecimal) mTab.getValue("PriceEntered");
    PriceActual = (BigDecimal) mTab.getValue("PriceActual");
    //	Discount = (BigDecimal)mTab.getValue("Discount");
    PriceLimit = (BigDecimal) mTab.getValue("PriceLimit");
    PriceList = (BigDecimal) mTab.getValue("PriceList");
    log.fine("PriceList=" + PriceList + ", Limit=" + PriceLimit + ", Precision=" + StdPrecision);
    log.fine(
        "PriceEntered=" + PriceEntered + ", Actual=" + PriceActual); // + ", Discount=" + Discount);

    //		No Product
    if (M_Product_ID == 0) {
      // if price change sync price actual and entered
      // else ignore
      if (mField.getColumnName().equals("PriceActual")) {
        PriceEntered = (BigDecimal) value;
        mTab.setValue("PriceEntered", value);
      } else if (mField.getColumnName().equals("PriceEntered")) {
        PriceActual = (BigDecimal) value;
        mTab.setValue("PriceActual", value);
      }
    }
    //	Product Qty changed - recalc price
    else if ((mField.getColumnName().equals("QtyInvoiced")
            || mField.getColumnName().equals("QtyEntered")
            || mField.getColumnName().equals("C_UOM_ID")
            || mField.getColumnName().equals("M_Product_ID"))
        && !"N".equals(Env.getContext(ctx, WindowNo, "DiscountSchema"))) {
      int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
      if (mField.getColumnName().equals("QtyEntered"))
        QtyInvoiced = MUOMConversion.convertProductFrom(ctx, M_Product_ID, C_UOM_To_ID, QtyEntered);
      if (QtyInvoiced == null) QtyInvoiced = QtyEntered;
      boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
      MProductPricing pp = new MProductPricing(M_Product_ID, C_BPartner_ID, QtyInvoiced, IsSOTrx);
      pp.setM_PriceList_ID(M_PriceList_ID);
      int M_PriceList_Version_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_Version_ID");
      pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
      Timestamp date = (Timestamp) mTab.getValue("DateInvoiced");
      pp.setPriceDate(date);
      //
      PriceEntered =
          MUOMConversion.convertProductFrom(ctx, M_Product_ID, C_UOM_To_ID, pp.getPriceStd());
      if (PriceEntered == null) PriceEntered = pp.getPriceStd();
      //
      log.fine(
          "amt - QtyChanged -> PriceActual="
              + pp.getPriceStd()
              + ", PriceEntered="
              + PriceEntered
              + ", Discount="
              + pp.getDiscount());

      PriceActual = pp.getPriceStd();
      mTab.setValue("PriceActual", pp.getPriceStd());
      //	mTab.setValue("Discount", pp.getDiscount());
      mTab.setValue("PriceEntered", PriceEntered);
      Env.setContext(ctx, WindowNo, "DiscountSchema", pp.isDiscountSchema() ? "Y" : "N");
    } else if (mField.getColumnName().equals("PriceActual")) {
      PriceActual = (BigDecimal) value;
      PriceEntered = MUOMConversion.convertProductFrom(ctx, M_Product_ID, C_UOM_To_ID, PriceActual);
      if (PriceEntered == null) PriceEntered = PriceActual;
      //
      log.fine("amt - PriceActual=" + PriceActual + " -> PriceEntered=" + PriceEntered);
      mTab.setValue("PriceEntered", PriceEntered);
    } else if (mField.getColumnName().equals("PriceEntered")) {
      PriceEntered = (BigDecimal) value;
      PriceActual = MUOMConversion.convertProductTo(ctx, M_Product_ID, C_UOM_To_ID, PriceEntered);
      if (PriceActual == null) PriceActual = PriceEntered;
      //
      log.fine("amt - PriceEntered=" + PriceEntered + " -> PriceActual=" + PriceActual);
      mTab.setValue("PriceActual", PriceActual);
    }

    /**
     * Discount entered - Calculate Actual/Entered if (mField.getColumnName().equals("Discount")) {
     * PriceActual = new BigDecimal ((100.0 - Discount.doubleValue()) / 100.0 *
     * PriceList.doubleValue()); if (PriceActual.scale() > StdPrecision) PriceActual =
     * PriceActual.setScale(StdPrecision, BigDecimal.ROUND_HALF_UP); PriceEntered =
     * MUOMConversion.convertProductFrom (ctx, M_Product_ID, C_UOM_To_ID, PriceActual); if
     * (PriceEntered == null) PriceEntered = PriceActual; mTab.setValue("PriceActual", PriceActual);
     * mTab.setValue("PriceEntered", PriceEntered); } // calculate Discount else { if
     * (PriceList.intValue() == 0) Discount = Env.ZERO; else Discount = new BigDecimal
     * ((PriceList.doubleValue() - PriceActual.doubleValue()) / PriceList.doubleValue() * 100.0); if
     * (Discount.scale() > 2) Discount = Discount.setScale(2, BigDecimal.ROUND_HALF_UP);
     * mTab.setValue("Discount", Discount); } log.fine("amt = PriceEntered=" + PriceEntered + ",
     * Actual" + PriceActual + ", Discount=" + Discount); /*
     */

    //	Check PriceLimit
    String epl = Env.getContext(ctx, WindowNo, "EnforcePriceLimit");
    boolean enforce = Env.isSOTrx(ctx, WindowNo) && epl != null && epl.equals("Y");
    if (enforce && MRole.getDefault().isOverwritePriceLimit()) enforce = false;
    //	Check Price Limit?
    if (enforce && PriceLimit.doubleValue() != 0.0 && PriceActual.compareTo(PriceLimit) < 0) {
      PriceActual = PriceLimit;
      PriceEntered = MUOMConversion.convertProductFrom(ctx, M_Product_ID, C_UOM_To_ID, PriceLimit);
      if (PriceEntered == null) PriceEntered = PriceLimit;
      log.fine("amt =(under) PriceEntered=" + PriceEntered + ", Actual" + PriceLimit);
      mTab.setValue("PriceActual", PriceLimit);
      mTab.setValue("PriceEntered", PriceEntered);
      mTab.fireDataStatusEEvent("UnderLimitPrice", "", false);
      //	Repeat Discount calc
      if (PriceList.intValue() != 0) {
        Discount =
            new BigDecimal(
                (PriceList.doubleValue() - PriceActual.doubleValue())
                    / PriceList.doubleValue()
                    * 100.0);
        if (Discount.scale() > 2) Discount = Discount.setScale(2, BigDecimal.ROUND_HALF_UP);
        //	mTab.setValue ("Discount", Discount);
      }
    }

    //	Line Net Amt
    BigDecimal LineNetAmt = QtyInvoiced.multiply(PriceActual);
    if (LineNetAmt.scale() > StdPrecision)
      LineNetAmt = LineNetAmt.setScale(StdPrecision, BigDecimal.ROUND_HALF_UP);
    log.info("amt = LineNetAmt=" + LineNetAmt);
    mTab.setValue("LineNetAmt", LineNetAmt);

    //	Calculate Tax Amount for PO
    boolean IsSOTrx = "Y".equals(Env.getContext(Env.getCtx(), WindowNo, "IsSOTrx"));
    if (!IsSOTrx) {
      BigDecimal TaxAmt =
          Env
              .ZERO; // teo_sarca: [ 1656829 ] Problem when there is not tax selected in vendor
                     // invoice
      if (mField.getColumnName().equals("TaxAmt")) {
        TaxAmt = (BigDecimal) mTab.getValue("TaxAmt");
      } else {
        Integer taxID = (Integer) mTab.getValue("C_Tax_ID");
        if (taxID != null) {
          int C_Tax_ID = taxID.intValue();
          MTax tax = new MTax(ctx, C_Tax_ID, null);
          TaxAmt = tax.calculateTax(LineNetAmt, isTaxIncluded(WindowNo), StdPrecision);
          mTab.setValue("TaxAmt", TaxAmt);
        }
      }
      //	Add it up
      mTab.setValue("LineTotalAmt", LineNetAmt.add(TaxAmt));
    }

    return "";
  } //	amt