采购订单分录计算逻辑
This commit is contained in:
		
							parent
							
								
									7137f27cea
								
							
						
					
					
						commit
						0b87fa9d49
					
				| 
						 | 
				
			
			@ -0,0 +1,173 @@
 | 
			
		|||
package shkd.repc.repe.formplugin;
 | 
			
		||||
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
			
		||||
import kd.bos.dataentity.utils.StringUtils;
 | 
			
		||||
import kd.bos.form.control.events.BeforeItemClickEvent;
 | 
			
		||||
import kd.bos.form.plugin.AbstractFormPlugin;
 | 
			
		||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
			
		||||
import kd.sdk.plugin.Plugin;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.math.RoundingMode;
 | 
			
		||||
import java.util.EventObject;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 动态表单插件
 | 
			
		||||
 */
 | 
			
		||||
public class SumEntryAmountPlugin extends AbstractFormPlugin implements Plugin {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerListener(EventObject e) {
 | 
			
		||||
        super.registerListener(e);
 | 
			
		||||
        //工具栏控件
 | 
			
		||||
        this.addItemClickListeners("tbmain");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void beforeItemClick(BeforeItemClickEvent evt) {
 | 
			
		||||
        super.beforeItemClick(evt);
 | 
			
		||||
        if (StringUtils.equals("save", evt.getItemKey())||StringUtils.equals("submit", evt.getItemKey())) {
 | 
			
		||||
            boolean util = util(this.getModel().getDataEntity());
 | 
			
		||||
            if(!util){
 | 
			
		||||
                this.getView().showTipNotification("分录数量必填");
 | 
			
		||||
                evt.setCancel(true);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean util(DynamicObject dynamicObject){
 | 
			
		||||
        DynamicObjectCollection qeug_orderformentry = dynamicObject.getDynamicObjectCollection("orderformentry");
 | 
			
		||||
        for (int i = 0; qeug_orderformentry!=null&&i < qeug_orderformentry.size(); i++) {
 | 
			
		||||
            DynamicObject dynamicObject1 = qeug_orderformentry.get(i);
 | 
			
		||||
            /**
 | 
			
		||||
             * 填写字段:数量,不含税,含税,税率,税额
 | 
			
		||||
             */
 | 
			
		||||
            BigDecimal qty = dynamicObject1.getBigDecimal("ordercount");//数量
 | 
			
		||||
            BigDecimal qeug_exclusiveprice = dynamicObject1.getBigDecimal("totalprice");//不含税
 | 
			
		||||
            BigDecimal qeug_taxprice = dynamicObject1.getBigDecimal("taxprice");//含税
 | 
			
		||||
            BigDecimal qeug_taxrate = BigDecimal.ZERO;//税率
 | 
			
		||||
            BigDecimal qeug_taxamount = dynamicObject1.getBigDecimal("taxamount");//税额
 | 
			
		||||
            Object qeug_taxrate1 = dynamicObject1.get("taxrate");
 | 
			
		||||
            if(qeug_taxrate1!=null){
 | 
			
		||||
                qeug_taxrate = returnRate(dynamicObject1.getBigDecimal("taxrate.taxrate"));
 | 
			
		||||
            }
 | 
			
		||||
            boolean qty1 = returnComperZero(qty);//数量
 | 
			
		||||
            if(!qty1){
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            boolean noTaxPrice = returnComperZero(qeug_exclusiveprice);//不含税
 | 
			
		||||
            boolean TaxPrice = returnComperZero(qeug_taxprice);//含税
 | 
			
		||||
            boolean taxRate = returnComperZero(qeug_taxrate);//税率
 | 
			
		||||
            boolean Tax = returnComperZero(qeug_taxamount);//税额
 | 
			
		||||
            /**
 | 
			
		||||
             * 计算字段:不含税,含税,不含税总价,含税总价,税额
 | 
			
		||||
             */
 | 
			
		||||
            BigDecimal qeug_notaxtotalprice = BigDecimal.ZERO;//不含税总价
 | 
			
		||||
            BigDecimal qeug_taxtotalprice = BigDecimal.ZERO;//含税总价
 | 
			
		||||
            if(!noTaxPrice && !TaxPrice){
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(!noTaxPrice && TaxPrice && !taxRate && !Tax){
 | 
			
		||||
                qeug_exclusiveprice = qeug_taxprice;
 | 
			
		||||
                dynamicObject1.set("totalprice",qeug_exclusiveprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(!noTaxPrice && TaxPrice && !taxRate && Tax){
 | 
			
		||||
                qeug_exclusiveprice = qeug_taxprice.subtract(qeug_taxamount.divide(qty, 2, RoundingMode.HALF_UP));
 | 
			
		||||
                dynamicObject1.set("totalprice",qeug_exclusiveprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(!noTaxPrice && TaxPrice && taxRate && !Tax){
 | 
			
		||||
                qeug_exclusiveprice = qeug_taxprice.divide(BigDecimal.ONE.add(qeug_taxrate), 2, RoundingMode.HALF_UP);
 | 
			
		||||
                dynamicObject1.set("totalprice",qeug_exclusiveprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
                dynamicObject1.set("taxamount",qeug_taxtotalprice.subtract(qeug_notaxtotalprice));
 | 
			
		||||
            }else if(!noTaxPrice && TaxPrice && taxRate && Tax){
 | 
			
		||||
                qeug_exclusiveprice = qeug_taxprice.subtract(qeug_taxamount.divide(qty, 2, RoundingMode.HALF_UP));
 | 
			
		||||
                dynamicObject1.set("totalprice",qeug_exclusiveprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(noTaxPrice && !TaxPrice && !taxRate && !Tax){
 | 
			
		||||
                qeug_taxprice = qeug_exclusiveprice;
 | 
			
		||||
                dynamicObject1.set("taxprice",qeug_taxprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(noTaxPrice && !TaxPrice && !taxRate && Tax){
 | 
			
		||||
                qeug_taxprice = qeug_exclusiveprice.add(qeug_taxamount.divide(qty, 2, RoundingMode.HALF_UP));
 | 
			
		||||
                dynamicObject1.set("taxprice",qeug_taxprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(noTaxPrice && !TaxPrice && taxRate && !Tax){
 | 
			
		||||
                qeug_taxprice = qeug_exclusiveprice.multiply(BigDecimal.ONE.add(qeug_taxrate));
 | 
			
		||||
                dynamicObject1.set("taxprice",qeug_taxprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
                dynamicObject1.set("taxamount",qeug_taxtotalprice.subtract(qeug_notaxtotalprice));
 | 
			
		||||
            }else if(noTaxPrice && !TaxPrice && taxRate && Tax){
 | 
			
		||||
                qeug_taxprice = qeug_exclusiveprice.add(qeug_taxamount.divide(qty, 2, RoundingMode.HALF_UP));
 | 
			
		||||
                dynamicObject1.set("taxprice",qeug_taxprice);
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(noTaxPrice && TaxPrice && !taxRate && !Tax){
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
                dynamicObject1.set("taxamount",qeug_taxtotalprice.subtract(qeug_notaxtotalprice));
 | 
			
		||||
            }else if(noTaxPrice && TaxPrice && !taxRate && Tax){
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }else if(noTaxPrice && TaxPrice && taxRate && !Tax){
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
                dynamicObject1.set("taxamount",qeug_taxtotalprice.subtract(qeug_notaxtotalprice));
 | 
			
		||||
            }else if(noTaxPrice && TaxPrice && taxRate && Tax){
 | 
			
		||||
                qeug_notaxtotalprice = qty.multiply(qeug_exclusiveprice);
 | 
			
		||||
                dynamicObject1.set("notaxtotalprice", qeug_notaxtotalprice);
 | 
			
		||||
                qeug_taxtotalprice = qty.multiply(qeug_taxprice);
 | 
			
		||||
                dynamicObject1.set("taxtotalprice", qeug_taxtotalprice);
 | 
			
		||||
            }
 | 
			
		||||
            qeug_orderformentry.set(i, dynamicObject1);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean returnComperZero(BigDecimal bigDecimal){
 | 
			
		||||
        return BigDecimal.ZERO.compareTo(bigDecimal) == -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private BigDecimal returnRate(BigDecimal bigDecimal){
 | 
			
		||||
        if(bigDecimal==null){
 | 
			
		||||
            return BigDecimal.ZERO;
 | 
			
		||||
        }
 | 
			
		||||
        if(BigDecimal.ONE.compareTo(bigDecimal) <= 0){
 | 
			
		||||
            return bigDecimal.divide(new BigDecimal(100));
 | 
			
		||||
        }else{
 | 
			
		||||
            return bigDecimal;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue