📄 tax.java
字号:
pstmt.setInt(1, M_Product_ID);
rs = pstmt.executeQuery();
found = false;
if (rs.next())
{
C_TaxCategory_ID = rs.getInt(1);
found = true;
}
rs.close();
pstmt.close();
if (C_TaxCategory_ID == 0)
{
log.saveError("TaxCriteriaNotFound", Msg.translate(ctx, variable)
+ (found ? "" : " (Product=" + M_Product_ID + " not found)"));
return 0;
}
log.fine("getProduct - C_TaxCategory_ID=" + C_TaxCategory_ID);
// AD_Org_ID -> billFromC_Location_ID
sql = "SELECT C_Location_ID FROM AD_OrgInfo "
+ "WHERE AD_Org_ID=?";
variable = "AD_Org_ID";
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Org_ID);
rs = pstmt.executeQuery();
found = false;
if (rs.next())
{
billFromC_Location_ID = rs.getInt (1);
found = true;
}
rs.close();
pstmt.close();
if (billFromC_Location_ID == 0)
{
log.saveError("TaxCriteriaNotFound", Msg.translate(Env.getAD_Language(ctx), variable)
+ (found ? "" : " (Info/Org=" + AD_Org_ID + " not found)"));
return 0;
}
// billC_BPartner_Location_ID -> billToC_Location_ID
sql = "SELECT l.C_Location_ID, b.IsTaxExempt "
+ "FROM C_BPartner_Location l INNER JOIN C_BPartner b ON (l.C_BPartner_ID=b.C_BPartner_ID) "
+ "WHERE C_BPartner_Location_ID=?";
variable = "BillTo_ID";
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, billC_BPartner_Location_ID);
rs = pstmt.executeQuery();
found = false;
if (rs.next())
{
billToC_Location_ID = rs.getInt(1);
IsTaxExempt = rs.getString(2);
found = true;
}
rs.close();
pstmt.close();
if (billToC_Location_ID == 0)
{
log.saveError("TaxCriteriaNotFound", Msg.translate(Env.getAD_Language(ctx), variable)
+ (found ? "" : " (BPLocation=" + billC_BPartner_Location_ID + " not found)"));
return 0;
}
if ("Y".equals(IsTaxExempt))
return getExemptTax(ctx, AD_Org_ID);
// Reverse for PO
if (!IsSOTrx)
{
int temp = billFromC_Location_ID;
billFromC_Location_ID = billToC_Location_ID;
billToC_Location_ID = temp;
}
log.fine("getProduct - billFromC_Location_ID = " + billFromC_Location_ID);
log.fine("getProduct - billToC_Location_ID = " + billToC_Location_ID);
//-----------------------------------------------------------------
// M_Warehouse_ID -> shipFromC_Location_ID
sql = "SELECT C_Location_ID FROM M_Warehouse "
+ "WHERE M_Warehouse_ID=?";
variable = "M_Warehouse_ID";
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, M_Warehouse_ID);
rs = pstmt.executeQuery();
found = false;
if (rs.next())
{
shipFromC_Location_ID = rs.getInt (1);
found = true;
}
rs.close();
pstmt.close();
if (shipFromC_Location_ID == 0)
{
log.saveError("TaxCriteriaNotFound", Msg.translate(Env.getAD_Language(ctx), variable)
+ (found ? "" : " (Warehouse=" + M_Warehouse_ID + " not found)"));
return 0;
}
// shipC_BPartner_Location_ID -> shipToC_Location_ID
sql = "SELECT C_Location_ID FROM C_BPartner_Location "
+ "WHERE C_BPartner_Location_ID=?";
variable = "C_BPartner_Location_ID";
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, shipC_BPartner_Location_ID);
rs = pstmt.executeQuery();
found = false;
if (rs.next())
{
shipToC_Location_ID = rs.getInt (1);
found = true;
}
rs.close();
pstmt.close();
if (shipToC_Location_ID == 0)
{
log.saveError("TaxCriteriaNotFound", Msg.translate(Env.getAD_Language(ctx), variable)
+ (found ? "" : " (BPLocation=" + shipC_BPartner_Location_ID + " not found)"));
return 0;
}
// Reverse for PO
if (!IsSOTrx)
{
int temp = shipFromC_Location_ID;
shipFromC_Location_ID = shipToC_Location_ID;
shipToC_Location_ID = temp;
}
log.fine("getProduct - shipFromC_Location_ID = " + shipFromC_Location_ID);
log.fine("getProduct - shipToC_Location_ID = " + shipToC_Location_ID);
}
catch (SQLException e)
{
log.log(Level.SEVERE, "getProduct (" + variable + ")", e);
}
return get (ctx, C_TaxCategory_ID, IsSOTrx,
shipDate, shipFromC_Location_ID, shipToC_Location_ID,
billDate, billFromC_Location_ID, billToC_Location_ID);
} // getProduct
/**
* Get Exempt Tax Code
* @param ctx context
* @param AD_Org_ID org to find client
* @return C_Tax_ID
*/
private static int getExemptTax (Properties ctx, int AD_Org_ID)
{
int C_Tax_ID = 0;
String sql = "SELECT t.C_Tax_ID "
+ "FROM C_Tax t"
+ " INNER JOIN AD_Org o ON (t.AD_Client_ID=o.AD_Client_ID) "
+ "WHERE t.IsTaxExempt='Y' AND o.AD_Org_ID=? "
+ "ORDER BY t.Rate DESC";
boolean found = false;
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Org_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
C_Tax_ID = rs.getInt (1);
found = true;
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "getExemptTax", e);
}
log.fine("getExemptTax - TaxExempt=Y - C_Tax_ID=" + C_Tax_ID);
if (C_Tax_ID == 0)
log.saveError("TaxCriteriaNotFound", Msg.getMsg(ctx, "TaxNoExemptFound")
+ (found ? "" : " (Tax/Org=" + AD_Org_ID + " not found)"));
return C_Tax_ID;
} // getExemptTax
/**************************************************************************
* Get Tax ID (Detail).
* If error return 0 and set error log (TaxNotFound)
* @param C_TaxCategory_ID tax category
* @param IsSOTrx Sales Order Trx
* @param shipDate ship date (ignored)
* @param shipFromC_Locction_ID ship from (ignored)
* @param shipToC_Location_ID ship to (ignored)
* @param billDate invoice date
* @param billFromC_Location_ID invoice from
* @param billToC_Location_ID invoice to
* @return C_Tax_ID
*/
protected static int get (Properties ctx,
int C_TaxCategory_ID, boolean IsSOTrx,
Timestamp shipDate, int shipFromC_Locction_ID, int shipToC_Location_ID,
Timestamp billDate, int billFromC_Location_ID, int billToC_Location_ID)
{
// C_TaxCategory contains CommodityCode
// API to Tax Vendor comes here
if (CLogMgt.isLevelFine())
{
log.info("get(Detail) - Category=" + C_TaxCategory_ID
+ ", SOTrx=" + IsSOTrx);
log.config("get(Detail) - BillFrom=" + billFromC_Location_ID
+ ", BillTo=" + billToC_Location_ID + ", BillDate=" + billDate);
}
MTax[] taxes = MTax.getAll (ctx);
MLocation lFrom = new MLocation (ctx, billFromC_Location_ID, null);
MLocation lTo = new MLocation (ctx, billToC_Location_ID, null);
log.finer("From=" + lFrom);
log.finer("To=" + lTo);
for (int i = 0; i < taxes.length; i++)
{
MTax tax = taxes[i];
log.finest(tax.toString());
//
if (tax.getC_TaxCategory_ID() != C_TaxCategory_ID
|| !tax.isActive()
|| tax.getParent_Tax_ID() != 0) // user parent tax
continue;
if (IsSOTrx && MTax.SOPOTYPE_PurchaseTax.equals(tax.getSOPOType()))
continue;
if (!IsSOTrx && MTax.SOPOTYPE_SalesTax.equals(tax.getSOPOType()))
continue;
log.finest("From Country - " + (tax.getC_Country_ID() == lFrom.getC_Country_ID()
|| tax.getC_Country_ID() == 0));
log.finest("From Region - " + (tax.getC_Region_ID() == lFrom.getC_Region_ID()
|| tax.getC_Region_ID() == 0));
log.finest("To Country - " + (tax.getTo_Country_ID() == lTo.getC_Country_ID()
|| tax.getTo_Country_ID() == 0));
log.finest("To Region - " + (tax.getTo_Region_ID() == lTo.getC_Region_ID()
|| tax.getTo_Region_ID() == 0));
log.finest("Date valid - " + (!tax.getValidFrom().after(billDate)));
// From Country
if ((tax.getC_Country_ID() == lFrom.getC_Country_ID()
|| tax.getC_Country_ID() == 0)
// From Region
&& (tax.getC_Region_ID() == lFrom.getC_Region_ID()
|| tax.getC_Region_ID() == 0)
// To Country
&& (tax.getTo_Country_ID() == lTo.getC_Country_ID()
|| tax.getTo_Country_ID() == 0)
// To Region
&& (tax.getTo_Region_ID() == lTo.getC_Region_ID()
|| tax.getTo_Region_ID() == 0)
// Date
&& !tax.getValidFrom().after(billDate)
)
{
if (!tax.isPostal())
return tax.getC_Tax_ID();
//
MTaxPostal[] postals = tax.getPostals(false);
for (int j = 0; j < postals.length; j++)
{
MTaxPostal postal = postals[j];
if (postal.isActive()
// Postal From is mandatory
&& postal.getPostal().startsWith(lFrom.getPostal())
// Postal To is optional
&& (postal.getPostal_To() == null
|| postal.getPostal_To().startsWith(lTo.getPostal()))
)
return tax.getC_Tax_ID();
} // for all postals
}
} // for all taxes
// Default Tax
for (int i = 0; i < taxes.length; i++)
{
MTax tax = taxes[i];
if (!tax.isDefault() || !tax.isActive()
|| tax.getParent_Tax_ID() != 0) // user parent tax
continue;
if (IsSOTrx && MTax.SOPOTYPE_PurchaseTax.equals(tax.getSOPOType()))
continue;
if (!IsSOTrx && MTax.SOPOTYPE_SalesTax.equals(tax.getSOPOType()))
continue;
log.fine("get (default) - " + tax);
return tax.getC_Tax_ID();
} // for all taxes
log.saveError("TaxNotFound", "");
return 0;
} // get
} // Tax
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -