📄 calloutorder.java
字号:
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
setCalloutActive(false);
return e.getLocalizedMessage();
}
setCalloutActive(false);
return "";
} // bPartner
/**
* Order Header - Invoice BPartner.
* - M_PriceList_ID (+ Context)
* - Bill_Location_ID
* - Bill_User_ID
* - POReference
* - SO_Description
* - IsDiscountPrinted
* - InvoiceRule/PaymentRule
* - C_PaymentTerm_ID
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
* @return Error message or ""
*/
public String bPartnerBill (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
if (isCalloutActive())
return "";
Integer bill_BPartner_ID = (Integer)value;
if (bill_BPartner_ID == null || bill_BPartner_ID.intValue() == 0)
return "";
String sql = "SELECT p.AD_Language,p.C_PaymentTerm_ID,"
+ "p.M_PriceList_ID,p.PaymentRule,p.POReference,"
+ "p.SO_Description,p.IsDiscountPrinted,"
+ "p.InvoiceRule,p.DeliveryRule,p.FreightCostRule,DeliveryViaRule,"
+ "p.SO_CreditLimit, p.SO_CreditLimit-p.SO_CreditUsed AS CreditAvailable,"
+ "c.AD_User_ID,"
+ "p.PO_PriceList_ID, p.PaymentRulePO, p.PO_PaymentTerm_ID,"
+ "lbill.C_BPartner_Location_ID AS Bill_Location_ID "
+ "FROM C_BPartner p"
+ " LEFT OUTER JOIN C_BPartner_Location lbill ON (p.C_BPartner_ID=lbill.C_BPartner_ID AND lbill.IsBillTo='Y' AND lbill.IsActive='Y')"
+ " LEFT OUTER JOIN AD_User c ON (p.C_BPartner_ID=c.C_BPartner_ID) "
+ "WHERE p.C_BPartner_ID=? AND p.IsActive='Y'"; // #1
boolean IsSOTrx = "Y".equals(Env.getContext(ctx, WindowNo, "IsSOTrx"));
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, bill_BPartner_ID.intValue());
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// PriceList (indirect: IsTaxIncluded & Currency)
Integer ii = new Integer(rs.getInt(IsSOTrx ? "M_PriceList_ID" : "PO_PriceList_ID"));
if (!rs.wasNull())
mTab.setValue("M_PriceList_ID", ii);
else
{ // get default PriceList
int i = Env.getContextAsInt(ctx, "#M_PriceList_ID");
if (i != 0)
mTab.setValue("M_PriceList_ID", new Integer(i));
}
int bill_Location_ID = rs.getInt("Bill_Location_ID");
// overwritten by InfoBP selection - works only if InfoWindow
// was used otherwise creates error (uses last value, may belong to differnt BP)
if (bill_BPartner_ID.toString().equals(Env.getContext(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "C_BPartner_ID")))
{
String loc = Env.getContext(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "C_BPartner_Location_ID");
if (loc.length() > 0)
bill_Location_ID = Integer.parseInt(loc);
}
if (bill_Location_ID == 0)
mTab.setValue("Bill_Location_ID", null);
else
mTab.setValue("Bill_Location_ID", new Integer(bill_Location_ID));
// Contact - overwritten by InfoBP selection
int contID = rs.getInt("AD_User_ID");
if (bill_BPartner_ID.toString().equals(Env.getContext(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "C_BPartner_ID")))
{
String cont = Env.getContext(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "AD_User_ID");
if (cont.length() > 0)
contID = Integer.parseInt(cont);
}
if (contID == 0)
mTab.setValue("Bill_User_ID", null);
else
mTab.setValue("Bill_User_ID", new Integer(contID));
// CreditAvailable
if (IsSOTrx)
{
double CreditLimit = rs.getDouble("SO_CreditLimit");
if (CreditLimit != 0)
{
double CreditAvailable = rs.getDouble("CreditAvailable");
if (!rs.wasNull() && CreditAvailable < 0)
mTab.fireDataStatusEEvent("CreditLimitOver",
DisplayType.getNumberFormat(DisplayType.Amount).format(CreditAvailable),
false);
}
}
// PO Reference
String s = rs.getString("POReference");
if (s != null && s.length() != 0)
mTab.setValue("POReference", s);
else
mTab.setValue("POReference", null);
// SO Description
s = rs.getString("SO_Description");
if (s != null && s.trim().length() != 0)
mTab.setValue("Description", s);
// IsDiscountPrinted
s = rs.getString("IsDiscountPrinted");
if (s != null && s.length() != 0)
mTab.setValue("IsDiscountPrinted", s);
else
mTab.setValue("IsDiscountPrinted", "N");
// Defaults, if not Walkin Receipt or Walkin Invoice
String OrderType = Env.getContext(ctx, WindowNo, "OrderType");
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_AfterDelivery);
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_OnCredit);
if (OrderType.equals(MOrder.DocSubTypeSO_Prepay))
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_Immediate);
else if (OrderType.equals(MOrder.DocSubTypeSO_POS)) // for POS
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_Cash);
else
{
// PaymentRule
s = rs.getString(IsSOTrx ? "PaymentRule" : "PaymentRulePO");
if (s != null && s.length() != 0)
{
if (s.equals("B")) // No Cache in Non POS
s = "P";
if (IsSOTrx && (s.equals("S") || s.equals("U"))) // No Check/Transfer for SO_Trx
s = "P"; // Payment Term
mTab.setValue("PaymentRule", s);
}
// Payment Term
ii = new Integer(rs.getInt(IsSOTrx ? "C_PaymentTerm_ID" : "PO_PaymentTerm_ID"));
if (!rs.wasNull())
mTab.setValue("C_PaymentTerm_ID", ii);
// InvoiceRule
s = rs.getString("InvoiceRule");
if (s != null && s.length() != 0)
mTab.setValue("InvoiceRule", s);
}
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "bPartnerBill", e);
return e.getLocalizedMessage();
}
return "";
} // bPartnerBill
/**
* Order Header - PriceList.
* (used also in Invoice)
* - C_Currency_ID
* - IsTaxIncluded
* Window Context:
* - EnforcePriceLimit
* - StdPrecision
* - M_PriceList_Version_ID
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String priceList (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
Integer M_PriceList_ID = (Integer)value;
if (M_PriceList_ID == null || M_PriceList_ID.intValue()== 0)
return "";
if (steps) log.warning("init");
String sql = "SELECT pl.IsTaxIncluded,pl.EnforcePriceLimit,pl.C_Currency_ID,c.StdPrecision,"
+ "plv.M_PriceList_Version_ID,plv.ValidFrom "
+ "FROM M_PriceList pl,C_Currency c,M_PriceList_Version plv "
+ "WHERE pl.C_Currency_ID=c.C_Currency_ID"
+ " AND pl.M_PriceList_ID=plv.M_PriceList_ID"
+ " AND pl.M_PriceList_ID=? " // 1
+ "ORDER BY plv.ValidFrom DESC";
// Use newest price list - may not be future
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, M_PriceList_ID.intValue());
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
// Tax Included
mTab.setValue("IsTaxIncluded", new Boolean("Y".equals(rs.getString(1))));
// Price Limit Enforce
Env.setContext(ctx, WindowNo, "EnforcePriceLimit", rs.getString(2));
// Currency
Integer ii = new Integer(rs.getInt(3));
mTab.setValue("C_Currency_ID", ii);
// PriceList Version
Env.setContext(ctx, WindowNo, "M_PriceList_Version_ID", rs.getInt(5));
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
return e.getLocalizedMessage();
}
if (steps) log.warning("fini");
return "";
} // priceList
/*************************************************************************
* Order Line - Product.
* - reset C_Charge_ID / M_AttributeSetInstance_ID
* - PriceList, PriceStd, PriceLimit, C_Currency_ID, EnforcePriceLimit
* - UOM
* Calls Tax
*
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String product (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
Integer M_Product_ID = (Integer)value;
if (M_Product_ID == null || M_Product_ID.intValue() == 0)
return "";
setCalloutActive(true);
if (steps) log.warning("init");
//
mTab.setValue("C_Charge_ID", null);
// Set Attribute
if (Env.getContextAsInt(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "M_Product_ID") == M_Product_ID.intValue()
&& Env.getContextAsInt(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "M_AttributeSetInstance_ID") != 0)
mTab.setValue("M_AttributeSetInstance_ID", new Integer(Env.getContextAsInt(ctx, Env.WINDOW_INFO, Env.TAB_INFO, "M_AttributeSetInstance_ID")));
else
mTab.setValue("M_AttributeSetInstance_ID", null);
/***** Price Calculation see also qty ****/
int C_BPartner_ID = Env.getContextAsInt(ctx, WindowNo, "C_BPartner_ID");
BigDecimal Qty = (BigDecimal)mTab.getValue("QtyOrdered");
boolean IsSOTrx = Env.getContext(ctx, WindowNo, "IsSOTrx").equals("Y");
MProductPricing pp = new MProductPricing (M_Product_ID.intValue(), C_BPartner_ID, Qty, IsSOTrx);
//
int M_PriceList_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_ID");
pp.setM_PriceList_ID(M_PriceList_ID);
/** PLV is only accurate if PL selected in header */
int M_PriceList_Version_ID = Env.getContextAsInt(ctx, WindowNo, "M_PriceList_Version_ID");
pp.setM_PriceList_Version_ID(M_PriceList_Version_ID);
Timestamp orderDate = (Timestamp)mTab.getValue("DateOrdered");
pp.setPriceDate(orderDate);
//
mTab.setValue("PriceList", pp.getPriceList());
mTab.setValue("PriceLimit", pp.getPriceLimit());
mTab.setValue("PriceActual", pp.getPriceStd());
mTab.setValue("PriceEntered", pp.getPriceStd());
mTab.setValue("C_Currency_ID", new Integer(pp.getC_Currency_ID()));
mTab.setValue("Discount", pp.getDiscount());
mTab.setValue("C_UOM_ID", new Integer(pp.getC_UOM_ID()));
mTab.setValue("QtyOrdered", mTab.getValue("QtyEntered"));
Env.setContext(ctx, WindowNo, "EnforcePriceLimit", pp.isEnforcePriceLimit() ? "Y" : "N");
Env.setContext(ctx, WindowNo, "DiscountSchema", pp.isDiscountSchema() ? "Y" : "N");
// Check/Update Warehouse Setting
// int M_Warehouse_ID = Env.getContextAsInt(ctx, Env.WINDOW_INFO, "M_Warehouse_ID");
// Integer wh = (Integer)mTab.getValue("M_Warehouse_ID");
// if (wh.intValue() != M_Warehouse_ID)
// {
// mTab.setValue("M_Warehouse_ID", new Integer(M_Warehouse_ID));
// ADialog.warn(,WindowNo, "WarehouseChanged");
// }
if (Env.isSOTrx(ctx, WindowNo))
{
MProduct product = MProduct.get (ctx, M_Product_ID.intValue());
if (product.isStocked())
{
BigDecimal QtyOrdered = (BigDecimal)mTab.getValue("QtyOrdered");
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.intValue(), 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);
if (steps) log.warning("fini");
return tax (ctx, WindowNo, mTab, mField, value);
} // product
/**
* Order Line - Charge.
* - updates PriceActual from Charge
* - sets PriceLimit, PriceList to zero
* Calles tax
* @param ctx Context
* @param WindowNo current Window No
* @param mTab Model Tab
* @param mField Model Field
* @param value The new value
*/
public String charge (Properties ctx, int WindowNo, MTab mTab, MField mField, Object value)
{
Integer C_Charge_ID = (Integer)value;
if (C_Charge_ID == null || C_Charge_ID.intValue() == 0)
return "";
// No Product defined
if (mTab.getValue("M_Product_ID") != null)
{
mTab.setValue("C_Charge_ID", null);
return "ChargeExclusively";
}
mTab.setValue("M_AttributeSetInstance_ID", null);
mTab.setValue("S_ResourceAssignment_ID", null);
mTab.setValue("C_UOM_ID", new Integer(100)); // EA
Env.setContext(ctx, WindowNo, "DiscountSchema", "N");
String sql = "SELECT ChargeAmt FROM C_Charge WHERE C_Charge_ID=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, C_Charge_ID.intValue());
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
mTab.setValue ("PriceEntered", rs.getBigDecimal (1));
mTab.setValue ("PriceActual", rs.getBigDecimal (1));
mTab.setValue ("PriceLimit", Env.ZERO);
mTab.setValue ("PriceList", Env.ZERO);
mTab.setValue ("Discount", Env.ZERO);
}
rs.close();
pstmt.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -