📄 calloutorder.java
字号:
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
return e.getLocalizedMessage();
}
//
return tax (ctx, WindowNo, mTab, mField, value);
} // charge
/**
* Order Line - Tax.
* - basis: Product, Charge, BPartner Location
* - sets C_Tax_ID
* Calles Amount
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String tax (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
String column = mField.getColumnName();
if (value == null)
return "";
if (steps) log.warning("init");
// Check Product
int M_Product_ID = 0;
if (column.equals("M_Product_ID"))
M_Product_ID = ((Integer)value).intValue();
else
M_Product_ID = Env.getContextAsInt(ctx, WindowNo, "M_Product_ID");
int C_Charge_ID = 0;
if (column.equals("C_Charge_ID"))
C_Charge_ID = ((Integer)value).intValue();
else
C_Charge_ID = Env.getContextAsInt(ctx, WindowNo, "C_Charge_ID");
log.fine("Product=" + M_Product_ID + ", C_Charge_ID=" + C_Charge_ID);
if (M_Product_ID == 0 && C_Charge_ID == 0)
return amt(ctx, WindowNo, mTab, mField, value); //
// Check Partner Location
int shipC_BPartner_Location_ID = 0;
if (column.equals("C_BPartner_Location_ID"))
shipC_BPartner_Location_ID = ((Integer)value).intValue();
else
shipC_BPartner_Location_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_Location_ID");
if (shipC_BPartner_Location_ID == 0)
return amt(ctx, WindowNo, mTab, mField, value); //
log.fine("Ship BP_Location=" + shipC_BPartner_Location_ID);
//
Timestamp billDate = Env.getContextAsDate(ctx, WindowNo, "DateOrdered");
log.fine("Bill Date=" + billDate);
Timestamp shipDate = Env.getContextAsDate(ctx, WindowNo, "DatePromised");
log.fine("Ship Date=" + shipDate);
int AD_Org_ID = Env.getContextAsInt(ctx, WindowNo, "AD_Org_ID");
log.fine("Org=" + AD_Org_ID);
int M_Warehouse_ID = Env.getContextAsInt(ctx, WindowNo, "M_Warehouse_ID");
log.fine("Warehouse=" + M_Warehouse_ID);
int billC_BPartner_Location_ID = Env.getContextAsInt(ctx, WindowNo, "Bill_Location_ID");
if (billC_BPartner_Location_ID == 0)
billC_BPartner_Location_ID = shipC_BPartner_Location_ID;
log.fine("Bill BP_Location=" + billC_BPartner_Location_ID);
//
int C_Tax_ID = Tax.get (ctx, M_Product_ID, C_Charge_ID, billDate, shipDate,
AD_Org_ID, M_Warehouse_ID, billC_BPartner_Location_ID, shipC_BPartner_Location_ID,
"Y".equals(Env.getContext(ctx, WindowNo, "IsSOTrx")));
log.info("Tax ID=" + C_Tax_ID);
//
if (C_Tax_ID == 0)
mTab.fireDataStatusEEvent(CLogger.retrieveError());
else
mTab.setValue("C_Tax_ID", new Integer(C_Tax_ID));
//
if (steps) log.warning("fini");
return amt(ctx, WindowNo, mTab, mField, value);
} // tax
/**
* Order Line - Amount.
* - called from QtyOrdered, Discount and PriceActual
* - calculates Discount or Actual Amount
* - calculates LineNetAmt
* - enforces PriceLimit
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String amt (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
if (isCalloutActive() || value == null)
return "";
setCalloutActive(true);
if (steps) log.warning("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, QtyOrdered, PriceEntered, PriceActual, PriceLimit, Discount, PriceList;
// get values
QtyEntered = (BigDecimal)mTab.getValue("QtyEntered");
QtyOrdered = (BigDecimal)mTab.getValue("QtyOrdered");
log.fine("QtyEntered=" + QtyEntered + ", Ordered=" + QtyOrdered + ", 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);
// Qty changed - recalc price
if ((mField.getColumnName().equals("QtyOrdered")
|| mField.getColumnName().equals("QtyEntered")
|| 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"))
QtyOrdered = MUOMConversion.convertProductTo (ctx, M_Product_ID,
C_UOM_To_ID, QtyEntered);
if (QtyOrdered == null)
QtyOrdered = QtyEntered;
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
MProductPricing pp = new MProductPricing (M_Product_ID, C_BPartner_ID, QtyOrdered, 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("DateOrdered");
pp.setPriceDate(date);
//
PriceEntered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
C_UOM_To_ID, pp.getPriceStd());
if (PriceEntered == null)
PriceEntered = pp.getPriceStd();
//
log.fine("QtyChanged -> PriceActual=" + pp.getPriceStd()
+ ", PriceEntered=" + PriceEntered + ", Discount=" + pp.getDiscount());
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("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("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("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("(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 = QtyOrdered.multiply(PriceActual);
if (LineNetAmt.scale() > StdPrecision)
LineNetAmt = LineNetAmt.setScale(StdPrecision, BigDecimal.ROUND_HALF_UP);
log.info("LineNetAmt=" + LineNetAmt);
mTab.setValue("LineNetAmt", LineNetAmt);
//
setCalloutActive(false);
return "";
} // amt
/**
* Order Line - Quantity.
* - called from C_UOM_ID, QtyEntered, QtyOrdered
* - enforces qty UOM relationship
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String qty (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
if (isCalloutActive() || value == null)
return "";
setCalloutActive(true);
int M_Product_ID = Env.getContextAsInt(ctx, WindowNo, "M_Product_ID");
if (steps) log.warning("init - M_Product_ID=" + M_Product_ID + " - " );
BigDecimal QtyOrdered = Env.ZERO;
BigDecimal QtyEntered, PriceActual, PriceEntered;
// No Product
if (M_Product_ID == 0)
{
QtyEntered = (BigDecimal)mTab.getValue("QtyEntered");
QtyOrdered = QtyEntered;
mTab.setValue("QtyOrdered", QtyOrdered);
}
// UOM Changed - convert from Entered -> Product
else if (mField.getColumnName().equals("C_UOM_ID"))
{
int C_UOM_To_ID = ((Integer)value).intValue();
QtyEntered = (BigDecimal)mTab.getValue("QtyEntered");
QtyOrdered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
C_UOM_To_ID, QtyEntered);
if (QtyOrdered == null)
QtyOrdered = QtyEntered;
boolean conversion = QtyEntered.compareTo(QtyOrdered) != 0;
PriceActual = (BigDecimal)mTab.getValue("PriceActual");
PriceEntered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
C_UOM_To_ID, PriceActual);
if (PriceEntered == null)
PriceEntered = PriceActual;
log.fine("UOM=" + C_UOM_To_ID
+ ", QtyEntered/PriceActual=" + QtyEntered + "/" + PriceActual
+ " -> " + conversion
+ " QtyOrdered/PriceEntered=" + QtyOrdered + "/" + PriceEntered);
Env.setContext(ctx, WindowNo, "UOMConversion", conversion ? "Y" : "N");
mTab.setValue("QtyOrdered", QtyOrdered);
mTab.setValue("PriceEntered", PriceEntered);
}
// QtyEntered changed - calculate QtyOrdered
else if (mField.getColumnName().equals("QtyEntered"))
{
int C_UOM_To_ID = Env.getContextAsInt(ctx, WindowNo, "C_UOM_ID");
QtyEntered = (BigDecimal)value;
QtyOrdered = MUOMConversion.convertProductFrom (ctx, M_Product_ID,
C_UOM_To_ID, QtyEntered);
if (QtyOrdered == null)
QtyOrdered = QtyEntered;
boolean conversion = QtyEntered.compareTo(QtyOrdered) != 0;
log.fine("UOM=" + C_UOM_To_ID
+ ", QtyEntered=" + QtyEntered
+ " -> " + conversion
+ " QtyOrdered=" + QtyOrdered);
Env.setContext(ctx, WindowNo, "UOMConversion", conversion ? "Y" : "N");
mTab.setValue("QtyOrdered", QtyOrdered);
}
// QtyOrdered changed - calculate QtyEntered
else if (mField.getColumnName().equals("QtyOrdered"))
{
int C_UOM_To_ID = Env.getContextAsInt(ctx, WindowNo, "C_UOM_ID");
QtyOrdered = (BigDecimal)value;
QtyEntered = MUOMConversion.convertProductTo (ctx, M_Product_ID,
C_UOM_To_ID, QtyOrdered);
if (QtyEntered == null)
QtyEntered = QtyOrdered;
boolean conversion = QtyOrdered.compareTo(QtyEntered) != 0;
log.fine("UOM=" + C_UOM_To_ID
+ ", QtyOrdered=" + QtyOrdered
+ " -> " + conversion
+ " QtyEntered=" + QtyEntered);
Env.setContext(ctx, WindowNo, "UOMConversion", conversion ? "Y" : "N");
mTab.setValue("QtyEntered", QtyEntered);
}
else
{
// QtyEntered = (BigDecimal)mTab.getValue("QtyEntered");
QtyOrdered = (BigDecimal)mTab.getValue("QtyOrdered");
}
// Storage
if (M_Product_ID != 0
&& Env.isSOTrx(ctx, WindowNo)
&& QtyOrdered.signum() > 0) // no negative (returns)
{
MProduct product = MProduct.get (ctx, M_Product_ID);
if (product.isStocked())
{
int M_Warehouse_ID = Env.getContextAsInt(ctx, WindowNo, "M_Warehouse_ID");
int M_AttributeSetInstance_ID = Env.getContextAsInt(ctx, WindowNo, "M_AttributeSetInstance_ID");
BigDecimal available = MStorage.getQtyAvailable
(M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID, null);
if (available == null)
available = Env.ZERO;
if (available.signum() == 0)
mTab.fireDataStatusEEvent ("NoQtyAvailable", "0", false);
else if (available.compareTo(QtyOrdered) < 0)
mTab.fireDataStatusEEvent ("InsufficientQtyAvailable", available.toString(), false);
else
{
Integer C_OrderLine_ID = (Integer)mTab.getValue("C_OrderLine_ID");
if (C_OrderLine_ID == null)
C_OrderLine_ID = new Integer(0);
BigDecimal notReserved = MOrderLine.getNotReserved(ctx,
M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID,
C_OrderLine_ID.intValue());
if (notReserved == null)
notReserved = Env.ZERO;
BigDecimal total = available.subtract(notReserved);
if (total.compareTo(QtyOrdered) < 0)
{
String info = Msg.parseTranslation(ctx, "@QtyAvailable@=" + available
+ " - @QtyNotReserved@=" + notReserved + " = " + total);
mTab.fireDataStatusEEvent ("InsufficientQtyAvailable",
info, false);
}
}
}
}
//
setCalloutActive(false);
return "";
} // qty
} // CalloutOrder
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -