📄 morderline.java
字号:
super.setM_AttributeSetInstance_ID (M_AttributeSetInstance_ID);
} // setM_AttributeSetInstance_ID
/**
* Set Warehouse
* @param M_Warehouse_ID warehouse
*/
public void setM_Warehouse_ID (int M_Warehouse_ID)
{
if (getM_Warehouse_ID() > 0
&& getM_Warehouse_ID() != M_Warehouse_ID
&& !canChangeWarehouse())
log.severe("Ignored - Already Delivered/Invoiced/Reserved");
else
super.setM_Warehouse_ID (M_Warehouse_ID);
} // setM_Warehouse_ID
/**
* Can Change Warehouse
* @return true if warehouse can be changed
*/
public boolean canChangeWarehouse()
{
if (getQtyDelivered().signum() != 0)
{
log.saveError("Error", Msg.translate(getCtx(), "QtyDelivered") + "=" + getQtyDelivered());
return false;
}
if (getQtyInvoiced().signum() != 0)
{
log.saveError("Error", Msg.translate(getCtx(), "QtyInvoiced") + "=" + getQtyInvoiced());
return false;
}
if (getQtyReserved().signum() != 0)
{
log.saveError("Error", Msg.translate(getCtx(), "QtyReserved") + "=" + getQtyReserved());
return false;
}
// We can change
return true;
} // canChangeWarehouse
/**
* Get C_Project_ID
* @return project
*/
public int getC_Project_ID()
{
int ii = super.getC_Project_ID ();
if (ii == 0)
ii = getParent().getC_Project_ID();
return ii;
} // getC_Project_ID
/**
* Get C_Activity_ID
* @return Activity
*/
public int getC_Activity_ID()
{
int ii = 0; // super.getC_Activity_ID ();
if (ii == 0)
ii = getParent().getC_Activity_ID();
return ii;
} // getC_Activity_ID
/**
* Get C_Campaign_ID
* @return Campaign
*/
public int getC_Campaign_ID()
{
int ii = 0; // super.getC_Campaign_ID ();
if (ii == 0)
ii = getParent().getC_Campaign_ID();
return ii;
} // getC_Campaign_ID
/**
* Get User2_ID
* @return User2
*/
public int getUser1_ID ()
{
int ii = 0; // super.getUser1_ID ();
if (ii == 0)
ii = getParent().getUser1_ID();
return ii;
} // getUser1_ID
/**
* Get User2_ID
* @return User2
*/
public int getUser2_ID ()
{
int ii = 0; // super.getUser2_ID ();
if (ii == 0)
ii = getParent().getUser2_ID();
return ii;
} // getUser2_ID
/**************************************************************************
* String Representation
* @return info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MOrderLine[")
.append(get_ID()).append(",Line=").append(getLine())
.append(",Ordered=").append(getQtyOrdered())
.append(",Delivered=").append(getQtyDelivered())
.append(",Invoiced=").append(getQtyInvoiced())
.append(",Reserved=").append(getQtyReserved())
.append ("]");
return sb.toString ();
} // toString
/**
* Add to Description
* @param description text
*/
public void addDescription (String description)
{
String desc = getDescription();
if (desc == null)
setDescription(description);
else
setDescription(desc + " | " + description);
} // addDescription
/**
* Get Description Text.
* For jsp access (vs. isDescription)
* @return description
*/
public String getDescriptionText()
{
return super.getDescription();
} // getDescriptionText
/**
* Get Name
* @return get the name of the line (from Product)
*/
public String getName()
{
getProduct();
if (m_product != null)
return m_product.getName();
if (getC_Charge_ID() != 0)
{
MCharge charge = MCharge.get(getCtx(), getC_Charge_ID());
return charge.getName();
}
return "";
} // getName
/**
* Set C_Charge_ID
* @param C_Charge_ID charge
*/
public void setC_Charge_ID (int C_Charge_ID)
{
super.setC_Charge_ID (C_Charge_ID);
if (C_Charge_ID > 0)
set_ValueNoCheck ("C_UOM_ID", null);
} // setC_Charge_ID
/**
* Set Discount
*/
public void setDiscount()
{
BigDecimal list = getPriceList();
// No List Price
if (Env.ZERO.compareTo(list) == 0)
return;
BigDecimal discount = list.subtract(getPriceActual())
.multiply(new BigDecimal(100))
.divide(list, getPrecision(), BigDecimal.ROUND_HALF_UP);
setDiscount(discount);
} // setDiscount
/**
* Is Tax Included in Amount
*/
public boolean isTaxIncluded()
{
if (m_M_PriceList_ID == 0)
{
m_M_PriceList_ID = DB.getSQLValue(get_TrxName(),
"SELECT M_PriceList_ID FROM C_Order WHERE C_Order_ID=?",
getC_Order_ID());
}
MPriceList pl = MPriceList.get(getCtx(), m_M_PriceList_ID, get_TrxName());
return pl.isTaxIncluded();
} // isTaxIncluded
/**
* Set Qty Entered/Ordered.
* Use this Method if the Line UOM is the Product UOM
* @param Qty QtyOrdered/Entered
*/
public void setQty (BigDecimal Qty)
{
super.setQtyEntered (Qty);
super.setQtyOrdered (Qty);
} // setQty
/**************************************************************************
* Before Save
* @param newRecord
* @return true if it can be sabed
*/
protected boolean beforeSave (boolean newRecord)
{
// Get Defaults from Parent
if (getC_BPartner_ID() == 0 || getC_BPartner_Location_ID() == 0
|| getM_Warehouse_ID() == 0
|| getC_Currency_ID() == 0)
setOrder (getParent());
if (m_M_PriceList_ID == 0)
setHeaderInfo(getParent());
// R/O Check - Product/Warehouse Change
if (!newRecord
&& (is_ValueChanged("M_Product_ID") || is_ValueChanged("M_Warehouse_ID")))
{
if (!canChangeWarehouse())
return false;
} // Product Changed
// Charge
if (getC_Charge_ID() != 0 && getM_Product_ID() != 0)
setM_Product_ID(0);
// No Product
if (getM_Product_ID() == 0)
setM_AttributeSetInstance_ID(0);
// Product
else // Set/check Product Price
{
// Set Price if Actual = 0
if (m_productPrice == null
&& Env.ZERO.compareTo(getPriceActual()) == 0
&& Env.ZERO.compareTo(getPriceList()) == 0)
setPrice();
// Check if on Price list
if (m_productPrice == null)
getProductPricing(m_M_PriceList_ID);
if (!m_productPrice.isCalculated())
{
log.saveError("Error", Msg.getMsg(getCtx(), "ProductNotOnPriceList"));
return false;
}
}
// UOM
if (getC_UOM_ID() == 0
&& (getM_Product_ID() != 0
|| getPriceEntered().compareTo(Env.ZERO) != 0
|| getC_Charge_ID() != 0))
{
int C_UOM_ID = MUOM.getDefault_UOM_ID(getCtx());
if (C_UOM_ID > 0)
setC_UOM_ID (C_UOM_ID);
}
// Qty on instance ASI for SO
if (m_IsSOTrx
&& getM_AttributeSetInstance_ID() != 0
&& (newRecord || is_ValueChanged("M_Product_ID")
|| is_ValueChanged("M_AttributeSetInstance_ID")
|| is_ValueChanged("M_Warehouse_ID")))
{
MProduct product = getProduct();
int M_AttributeSet_ID = product.getM_AttributeSet_ID();
boolean isInstance = M_AttributeSet_ID != 0;
if (isInstance)
{
MAttributeSet mas = MAttributeSet.get(getCtx(), M_AttributeSet_ID);
isInstance = mas.isInstanceAttribute();
}
// Max
if (isInstance)
{
MStorage[] storages = MStorage.getWarehouse(getCtx(),
getM_Warehouse_ID(), getM_Product_ID(), getM_AttributeSetInstance_ID(),
M_AttributeSet_ID, false, null, true, get_TrxName());
BigDecimal qty = Env.ZERO;
for (int i = 0; i < storages.length; i++)
{
if (storages[i].getM_AttributeSetInstance_ID() == getM_AttributeSetInstance_ID())
qty = qty.add(storages[i].getQtyOnHand());
}
if (getQtyOrdered().compareTo(qty) > 0)
{
log.warning("Qty - Stock=" + qty + ", Ordered=" + getQtyOrdered());
log.saveError("QtyInsufficient", "=" + qty);
return false;
}
}
}
// FreightAmt Not used
if (Env.ZERO.compareTo(getFreightAmt()) != 0)
setFreightAmt(Env.ZERO);
// Set Tax
if (getC_Tax_ID() == 0)
setTax();
// Get Line No
if (getLine() == 0)
{
String sql = "SELECT COALESCE(MAX(Line),0)+10 FROM C_OrderLine WHERE C_Order_ID=?";
int ii = DB.getSQLValue (get_TrxName(), sql, getC_Order_ID());
setLine (ii);
}
// Calculations & Rounding
setLineNetAmt(); // extended Amount with or without tax
setDiscount();
return true;
} // beforeSave
/**
* Before Delete
* @return true if it can be deleted
*/
protected boolean beforeDelete ()
{
// R/O Check - Something delivered. etc.
if (Env.ZERO.compareTo(getQtyDelivered()) != 0)
{
log.saveError("DeleteError", Msg.translate(getCtx(), "QtyDelivered") + "=" + getQtyDelivered());
return false;
}
if (Env.ZERO.compareTo(getQtyInvoiced()) != 0)
{
log.saveError("DeleteError", Msg.translate(getCtx(), "QtyInvoiced") + "=" + getQtyInvoiced());
return false;
}
if (Env.ZERO.compareTo(getQtyReserved()) != 0)
{
// For PO should be On Order
log.saveError("DeleteError", Msg.translate(getCtx(), "QtyReserved") + "=" + getQtyReserved());
return false;
}
return true;
} // beforeDelete
/**
* After Save
* @param newRecord new
* @param success success
* @return saved
*/
protected boolean afterSave (boolean newRecord, boolean success)
{
if (!success)
return success;
if (!newRecord && is_ValueChanged("C_Tax_ID"))
{
// Recalculate Tax for old Tax
MOrderTax tax = MOrderTax.get (this, getPrecision(),
true, get_TrxName()); // old Tax
if (tax != null)
{
if (!tax.calculateTaxFromLines())
return false;
if (!tax.save(get_TrxName()))
return false;
}
}
return updateHeaderTax();
} // afterSave
/**
* After Delete
* @param success success
* @return deleted
*/
protected boolean afterDelete (boolean success)
{
if (!success)
return success;
if (getS_ResourceAssignment_ID() != 0)
{
MResourceAssignment ra = new MResourceAssignment(getCtx(), getS_ResourceAssignment_ID(), get_TrxName());
ra.delete(true);
}
return updateHeaderTax();
} // afterDelete
/**
* Update Tax & Header
*/
private boolean updateHeaderTax()
{
// Recalculate Tax for this Tax
MOrderTax tax = MOrderTax.get (this, getPrecision(),
false, get_TrxName()); // current Tax
if (!tax.calculateTaxFromLines())
return false;
if (!tax.save(get_TrxName()))
return false;
// Update Order Header
String sql = "UPDATE C_Order i"
+ " SET TotalLines="
+ "(SELECT COALESCE(SUM(LineNetAmt),0) FROM C_OrderLine il WHERE i.C_Order_ID=il.C_Order_ID) "
+ "WHERE C_Order_ID=" + getC_Order_ID();
int no = DB.executeUpdate(sql, get_TrxName());
if (no != 1)
log.warning("(1) #" + no);
if (isTaxIncluded())
sql = "UPDATE C_Order i "
+ " SET GrandTotal=TotalLines "
+ "WHERE C_Order_ID=" + getC_Order_ID();
else
sql = "UPDATE C_Order i "
+ " SET GrandTotal=TotalLines+"
+ "(SELECT COALESCE(SUM(TaxAmt),0) FROM C_OrderTax it WHERE i.C_Order_ID=it.C_Order_ID) "
+ "WHERE C_Order_ID=" + getC_Order_ID();
no = DB.executeUpdate(sql, get_TrxName());
if (no != 1)
log.warning("(2) #" + no);
m_parent = null;
return no == 1;
} // updateHeaderTax
} // MOrderLine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -