2014年10月13日 星期一

iDempiere Callout ERP 規則引擎實作 groovy:讀稅別表取得稅率

import org.compiere.model.MTable
import org.compiere.util.DB
import org.compiere.util.Msg
import java.math.BigDecimal
import java.math.RoundingMode
import java.sql.PreparedStatement
import java.sql.ResultSet


// A_WindowNo    A_Tab    A_Field    A_Value    A_OldValue    A_Ctx   BOMQty
if (A_Value!=null)   // A_OldValue!=A_Value)
{
    Integer  ID= (Integer)A_Value;
    BigDecimal Rate = (BigDecimal)A_Tab.getValue("稅率");
    if  (Rate != null) Rate = Rate.divide(new BigDecimal(100));
    BigDecimal Qty= (BigDecimal)A_Tab.getValue("訂單數量");
    BigDecimal Price= (BigDecimal)A_Tab.getValue("單價");
    BigDecimal Amt= (BigDecimal)A_Tab.getValue("訂單金額");
    BigDecimal Amt1= new BigDecimal(0);
    BigDecimal Tax= (BigDecimal)A_Tab.getValue("稅額");
    BigDecimal Prepay= (BigDecimal)A_Tab.getValue("銷貨訂金");
    BigDecimal Total= (BigDecimal)A_Tab.getValue("合計");
   // Integer Tax_ID = (Integer)A_Tab.getValue("稅別_ID");
    String sql = "SELECT 稅率, 編號 FROM 稅別 WHERE 稅別_ID=?";
    PreparedStatement pstmt = DB.prepareStatement(sql, null);
    pstmt.setInt(1, ID.intValue());
    ResultSet rs = pstmt.executeQuery();
    while (rs.next()) {
    String type = rs.getString("編號"); // 02 -> 應稅 (內含)
    Rate =  rs.getBigDecimal("稅率");
    A_Tab.setValue("稅率", Rate);
    if  (Rate != null) Rate = Rate.divide(new BigDecimal(100));
    if (type.equals("02"))
    {
    Amt1= Qty.multiply(Price);//含稅金額
    Amt = Amt1.divide(Rate.add(new BigDecimal(1) ) , 0, RoundingMode.CEILING );
    Tax = Amt1.subtract(Amt);
    Total = Amt1.subtract(Prepay);
    } else {  
    Amt= Qty.multiply(Price).divide(new BigDecimal(1) , 0, RoundingMode.CEILING );
    Tax = Amt.multiply(Rate);
    Total = Amt.add(Tax).subtract(Prepay);
    }
    A_Tab.setValue("訂單金額", Amt);
    A_Tab.setValue("稅額", Tax);
    A_Tab.setValue("合計", Total);
   }
}
result=""

沒有留言:

張貼留言