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.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)
{      
    BigDecimal Qty = new BigDecimal (0);
    BigDecimal Price = new BigDecimal (0);
    BigDecimal Prepay = new BigDecimal (0);
    BigDecimal Amt  = new BigDecimal (0);
    BigDecimal Amt1  = new BigDecimal (0);
    String fname = A_Field.getColumnName();
   // Integer  ID= (Integer)A_Value;
    BigDecimal Rate = (BigDecimal)A_Tab.getValue("稅率");
    if  (Rate != null) Rate = Rate.divide(new BigDecimal(100));

    if (fname.equals("訂單數量")) {
    Qty = (BigDecimal) A_Value;
    Price= (BigDecimal)A_Tab.getValue("單價");
    Prepay= (BigDecimal)A_Tab.getValue("銷貨訂金");

    }else if (fname.equals("單價")) {
    Price = (BigDecimal) A_Value;
    Qty = (BigDecimal)A_Tab.getValue("訂單數量");
    Prepay= (BigDecimal)A_Tab.getValue("銷貨訂金");

    }else if (fname.equals("銷貨訂金")) {
    Prepay = (BigDecimal) A_Value;
    Qty = (BigDecimal)A_Tab.getValue("訂單數量");
    Price = (BigDecimal)A_Tab.getValue("單價");
    }

    Integer Tax_ID = (Integer)A_Tab.getValue("稅別_ID");
    String type = DB.getSQLValueString(null,"SELECT 編號 FROM 稅別 WHERE 稅別_ID=?", Tax_ID );
    if (type.equals("02")) {
    Amt1= Qty.multiply(Price);
    Amt = Amt1.divide(Rate.add(new BigDecimal(1) ) , 0, RoundingMode.CEILING );
    Tax = Amt1.subtract(Amt);
    Total = Amt.add(Tax).subtract(Prepay);
    }else{
    Amt = Qty.multiply(Price);
    Tax = Amt.multiply(Rate);
    Total = Amt.add(Tax).subtract(Prepay);
    }

    if (Qty == null || Price==null || Rate == null)
    {A_Tab.setValue("訂單金額", null );
     A_Tab.setValue("稅額", null );
     A_Tab.setValue("合計", null );
    }else{
     //Amt = Qty.multiply(Price);
     //Tax = Amt.multiply(Rate);
     //Total = Amt.add(Tax).subtract(Prepay);
      A_Tab.setValue("訂單金額", Amt );
      A_Tab.setValue("稅額", Tax);
      A_Tab.setValue("合計", Total);
     }
}
result=""

沒有留言:

張貼留言