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);
    }
    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=""

沒有留言:

張貼留言