Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
		
						commit
						13844f37c3
					
				| 
						 | 
				
			
			@ -53,5 +53,4 @@ public class ContractProcessRevisionFilterPlugin extends AbstractBillPlugIn impl
 | 
			
		|||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
//    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
package zcgj.zcdev.zcdev.pr.plugin.form;
 | 
			
		||||
 | 
			
		||||
import kd.bos.bill.AbstractBillPlugIn;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.form.field.BasedataEdit;
 | 
			
		||||
import kd.bos.form.field.events.BeforeF7SelectEvent;
 | 
			
		||||
import kd.bos.form.field.events.BeforeF7SelectListener;
 | 
			
		||||
import kd.bos.list.ListShowParameter;
 | 
			
		||||
import kd.bos.orm.query.QCP;
 | 
			
		||||
import kd.bos.orm.query.QFilter;
 | 
			
		||||
import kd.sdk.plugin.Plugin;
 | 
			
		||||
 | 
			
		||||
import java.util.EventObject;
 | 
			
		||||
 | 
			
		||||
public class OutContractSettleProcessFilterPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerListener(EventObject e) {
 | 
			
		||||
        super.registerListener(e);
 | 
			
		||||
        BasedataEdit contractprocess = this.getControl("zcgj_pa_process");
 | 
			
		||||
        if(contractprocess != null) {
 | 
			
		||||
            contractprocess.addBeforeF7SelectListener(this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
 | 
			
		||||
        String name1 = beforeF7SelectEvent.getProperty().getName();
 | 
			
		||||
        if(name1.equals("zcgj_pa_process")) {
 | 
			
		||||
            String name = this.getModel().getDataEntity().getDataEntityType().getName();
 | 
			
		||||
            Object projectObj = this.getModel().getValue("project");
 | 
			
		||||
            if(projectObj instanceof DynamicObject) {
 | 
			
		||||
                DynamicObject project = (DynamicObject) projectObj;
 | 
			
		||||
                QFilter qFilter = new QFilter("project.id", QCP.equals, project.getLong("id"));
 | 
			
		||||
                QFilter treeFilter = new QFilter("number", QCP.equals, project.getString("number"));
 | 
			
		||||
                ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
 | 
			
		||||
                showParameter.getListFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
                showParameter.getTreeFilterParameter().getQFilters().add(treeFilter);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
package zcgj.zcdev.zcdev.pr.plugin.form;
 | 
			
		||||
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
			
		||||
import kd.bos.entity.datamodel.events.ChangeData;
 | 
			
		||||
import kd.bos.entity.datamodel.events.LoadDataEventArgs;
 | 
			
		||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
			
		||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
 | 
			
		||||
import kd.ec.contract.formplugin.PaymentApplyEditUI;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.EventObject;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public class PaymentApplyEditUIExtPlugin extends PaymentApplyEditUI {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void thisApplyOfTaxChanged(ChangeData changeData) {
 | 
			
		||||
        this.sumApplyOfTax();
 | 
			
		||||
        //this.setRealPayAmt();
 | 
			
		||||
        if (this.getPageCache().get("thisApplyAmountCache") != null) {
 | 
			
		||||
            this.getPageCache().remove("thisApplyAmountCache");
 | 
			
		||||
        } else {
 | 
			
		||||
            int rowIndex = changeData.getRowIndex();
 | 
			
		||||
            if (!this.hasInvoice(rowIndex)) {
 | 
			
		||||
                this.setShouldPayOfTax(rowIndex);
 | 
			
		||||
                BigDecimal applyOfTaxAmount = (BigDecimal)changeData.getNewValue();
 | 
			
		||||
                BigDecimal taxRate = (BigDecimal)this.getModel().getValue("conttaxrate", rowIndex);
 | 
			
		||||
                BigDecimal applyAmount = applyOfTaxAmount.divide(BigDecimal.ONE.add(taxRate.divide(BigDecimal.valueOf(100L), 4)), 10, 5);
 | 
			
		||||
                this.getPageCache().put("thisApplyOfTaxCache", "1");
 | 
			
		||||
                this.getModel().setValue("thisapplyamount", applyAmount, rowIndex);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setRealPayAmt() {
 | 
			
		||||
        DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity().getDynamicObjectCollection("entryentity");
 | 
			
		||||
        BigDecimal totalAmount = BigDecimal.ZERO;
 | 
			
		||||
        Set<String> contractNo = new HashSet<>();
 | 
			
		||||
        for (DynamicObject dynamicObject : dynamicObjectCollection) {
 | 
			
		||||
            DynamicObject contract = dynamicObject.getDynamicObject("contract");
 | 
			
		||||
            if(contract != null) {
 | 
			
		||||
                String billno = contract.getString("id");
 | 
			
		||||
                if(!contractNo.contains(billno)) {
 | 
			
		||||
                    totalAmount = dynamicObject.getBigDecimal("thisrealpayamt");
 | 
			
		||||
                    contractNo.add(billno);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        this.getModel().setValue("realpayamt", totalAmount);
 | 
			
		||||
        //Object id = this.getModel().getValue("id");
 | 
			
		||||
        //DynamicObject paymentapply = BusinessDataServiceHelper.loadSingle(id, "ec_paymentapply", "realpayamt");
 | 
			
		||||
        //paymentapply.set("realpayamt", 99999);
 | 
			
		||||
        //SaveServiceHelper.update(new DynamicObject[]{paymentapply});
 | 
			
		||||
        this.getView().updateView("realpayamt");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void afterLoadData(EventObject e) {
 | 
			
		||||
        this.setRealPayAmt();
 | 
			
		||||
        super.afterLoadData(e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,15 @@ public class PaymentapplyCopyPlugin  extends AbstractBillPlugIn implements Plugi
 | 
			
		|||
            this.getModel().setValue("totalshouldpay", this.getSum("entryentity", "applyoftaxamount"));
 | 
			
		||||
            this.getView().updateView(ENTITY_KEY);
 | 
			
		||||
            this.getView().updateView("totalshouldpay");
 | 
			
		||||
 | 
			
		||||
            //判断是否有发票,有发票则锁定本次申请金额
 | 
			
		||||
            for (int i = 0; i < entity.size(); i++) {
 | 
			
		||||
                DynamicObject dynamicObject = entity.get(i);
 | 
			
		||||
                DynamicObjectCollection dynamicObjectCollection = dynamicObject.getDynamicObjectCollection("subentryentity");
 | 
			
		||||
                if(dynamicObjectCollection == null || dynamicObjectCollection.isEmpty()){
 | 
			
		||||
                    this.getView().setEnable(false,i,"thisapplyoftax");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,346 @@
 | 
			
		|||
package zcgj.zcdev.zcdev.pr.plugin.operate;
 | 
			
		||||
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
			
		||||
import kd.bos.entity.EntityMetadataCache;
 | 
			
		||||
import kd.bos.orm.query.QFilter;
 | 
			
		||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
			
		||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
 | 
			
		||||
import kd.ec.basedata.common.enums.PayDirectionEnum;
 | 
			
		||||
import kd.ec.basedata.common.enums.ecma.OrderSourceEnum;
 | 
			
		||||
import kd.ec.contract.common.utils.EcNumberHelper;
 | 
			
		||||
import kd.ec.contract.common.utils.TypeUtils;
 | 
			
		||||
import kd.ec.contract.opplugin.OutContractRevisionBillOp;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import java.util.stream.Stream;
 | 
			
		||||
 | 
			
		||||
public class OutContractRevisionBillOpExt extends OutContractRevisionBillOp {
 | 
			
		||||
 | 
			
		||||
    private static String selector = (String) Stream.of("totalrevisionamount", "totalrevisionoftaxamount", "totalamount", "totaloftaxamount", "ismultirate", "taxrate", "originalamount", "avgtaxrate", "originaloftaxamount", "taxamount").collect(Collectors.joining(","));
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void reverseWritingToContract(String operationKey, DynamicObject source) {
 | 
			
		||||
        boolean isFromDB = source.getDataEntityState().getFromDatabase();
 | 
			
		||||
        if (isFromDB) {
 | 
			
		||||
            source = BusinessDataServiceHelper.loadSingle(source.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outrevision"));
 | 
			
		||||
            DynamicObject contract = BusinessDataServiceHelper.loadSingle(source.getDynamicObject("contract").getPkValue(), "ec_out_contract", selector);
 | 
			
		||||
            BigDecimal totalRevisionAmount = contract.getBigDecimal("totalrevisionamount");
 | 
			
		||||
            BigDecimal totalRevisionOfTaxAmount = contract.getBigDecimal("totalrevisionoftaxamount");
 | 
			
		||||
            BigDecimal totalAmount = contract.getBigDecimal("totalamount");
 | 
			
		||||
            BigDecimal totalOfTaxAmount = contract.getBigDecimal("totaloftaxamount");
 | 
			
		||||
            BigDecimal revisionAmount = source.getBigDecimal("revisionamount");
 | 
			
		||||
            BigDecimal revisionOfTaxAmount = source.getBigDecimal("revisionoftaxamount");
 | 
			
		||||
            DynamicObject currency = source.getDynamicObject("currency");
 | 
			
		||||
            int pricePrecision = currency == null ? 10 : currency.getInt("priceprecision");
 | 
			
		||||
            if (operationKey.equals("audit")) {
 | 
			
		||||
                this.doHandlerTaxRateChange(contract, source);
 | 
			
		||||
                contract.set("totalrevisionamount", totalRevisionAmount.add(revisionAmount));
 | 
			
		||||
                contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.add(revisionOfTaxAmount));
 | 
			
		||||
                contract.set("totalamount", totalAmount.add(revisionAmount));
 | 
			
		||||
                contract.set("totaloftaxamount", totalOfTaxAmount.add(revisionOfTaxAmount));
 | 
			
		||||
                DynamicObjectCollection kapianEntry = (DynamicObjectCollection)source.get("kapianentry");
 | 
			
		||||
                List<DynamicObject> listUpdateList = new ArrayList();
 | 
			
		||||
                List<DynamicObject> listaddList = new ArrayList();
 | 
			
		||||
                Map<Long, BigDecimal> entryId_biangengsl = new HashMap();
 | 
			
		||||
                boolean isSingleRateChangeMultyRate = false;//单税率改为多税率
 | 
			
		||||
                boolean isMultyRateChangeSingleRate = false;//多税率改为单税率
 | 
			
		||||
                for(int i = 0; i < kapianEntry.size(); ++i) {
 | 
			
		||||
                    DynamicObjectCollection subentrys = (DynamicObjectCollection)((DynamicObject)kapianEntry.get(i)).get("entryentity");
 | 
			
		||||
                    HashMap<String, DynamicObject> newListingMap = new HashMap();
 | 
			
		||||
                    ArrayList<DynamicObject> updateLevelList = new ArrayList();
 | 
			
		||||
 | 
			
		||||
                    for(int k = 0; k < subentrys.size(); ++k) {
 | 
			
		||||
                        DynamicObject subEntry = (DynamicObject)subentrys.get(k);
 | 
			
		||||
                        int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
 | 
			
		||||
                        if (changeType == 3) {
 | 
			
		||||
                            DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
 | 
			
		||||
                            listing.set("id", subEntry.get("newlistingid"));
 | 
			
		||||
                            listing.set("isaddnew", true);
 | 
			
		||||
                            listing.set("listparentid", subEntry.get("superlistingid"));
 | 
			
		||||
                            listing.set("parent", subEntry.get("superlistingid"));
 | 
			
		||||
                            if (subEntry.getDynamicObject("parentgroup") != null) {
 | 
			
		||||
                                listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
 | 
			
		||||
                            } else {
 | 
			
		||||
                                updateLevelList.add(listing);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing.set("paydirection", PayDirectionEnum.OUT.getValue());
 | 
			
		||||
                            listing.set("number", subEntry.get("listnumber"));
 | 
			
		||||
                            listing.set("name", subEntry.get("listname"));
 | 
			
		||||
                            listing.set("sysnumber", subEntry.get("sysnum"));
 | 
			
		||||
                            listing.set("desc", subEntry.get("remark"));
 | 
			
		||||
                            if (subEntry.get("boqnumber") != null) {
 | 
			
		||||
                                listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            DynamicObject parentnode = (DynamicObject)subEntry.getParent();
 | 
			
		||||
                            listing.set("listingmodel", parentnode.get("listmodelid"));
 | 
			
		||||
                            listing.set("contractid", contract.getPkValue().toString());
 | 
			
		||||
                            listing.set("enable", 1);
 | 
			
		||||
                            listing.set("status", "C");
 | 
			
		||||
                            listing.set("isleaf", false);
 | 
			
		||||
                            listing.set("currency", source.getDynamicObject("currency").getPkValue());
 | 
			
		||||
                            listaddList.add(listing);
 | 
			
		||||
                            newListingMap.put(subEntry.get("newlistingid").toString(), listing);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    for(DynamicObject listing : updateLevelList) {
 | 
			
		||||
                        if (listing.get("listparentid") != null && listing.getLong("listparentid") != 0L) {
 | 
			
		||||
                            DynamicObject parent = (DynamicObject)newListingMap.get(String.valueOf(listing.getLong("listparentid")));
 | 
			
		||||
                            listing.set("level", parent.getInt("level") + 1);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            listing.set("level", 1);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    for(int k = 0; k < subentrys.size(); ++k) {
 | 
			
		||||
                        DynamicObject subEntry = (DynamicObject)subentrys.get(k);
 | 
			
		||||
                        int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
 | 
			
		||||
                        if (changeType == 0) {
 | 
			
		||||
                            DynamicObject listing = (DynamicObject)subEntry.get("listid");
 | 
			
		||||
                            if (listing == null) {
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
 | 
			
		||||
                            listing.set("ischanged", true);
 | 
			
		||||
                            listing.set("enable", 1);
 | 
			
		||||
                            BigDecimal changeQty = listing.getBigDecimal("changeqty");
 | 
			
		||||
                            BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
 | 
			
		||||
                            entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
 | 
			
		||||
                            changeQty = changeQty.add(addQty);
 | 
			
		||||
                            listing.set("changeqty", changeQty);
 | 
			
		||||
                            BigDecimal changedTaxAmount = (BigDecimal)subEntry.get("hsbgje");
 | 
			
		||||
                            BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
 | 
			
		||||
                            listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
 | 
			
		||||
                            BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
 | 
			
		||||
                            listing.set("totalqty", totalQty);
 | 
			
		||||
                            BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
 | 
			
		||||
                            BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
 | 
			
		||||
                            listing.set("lstoftaxamount", totalChangedTaxAmount);
 | 
			
		||||
                            listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
 | 
			
		||||
                            if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
 | 
			
		||||
                                BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
 | 
			
		||||
                                listing.set("avgtaxprice", avgTaxPrice);
 | 
			
		||||
                                BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
 | 
			
		||||
                                listing.set("avgprice", avgPrice);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listUpdateList.add(listing);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (changeType == 1 || changeType == 4 || changeType == 5) {
 | 
			
		||||
                            DynamicObject listing = (DynamicObject)subEntry.get("listid");
 | 
			
		||||
                            if (listing == null) {
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
 | 
			
		||||
                            if (this.isSingleRateChange(contract, source)) {
 | 
			
		||||
                                //如果是单税率变更为多税率的情况下,需要判断综合税率是不是为空,如果当前税率为空,则有可能是单改多
 | 
			
		||||
                                Object curtaxrate = source.get("curtaxrate");
 | 
			
		||||
                                if (curtaxrate != null) {
 | 
			
		||||
                                    listing.set("rateobj", source.get("curtaxrate"));
 | 
			
		||||
                                    listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
 | 
			
		||||
                                }else{
 | 
			
		||||
                                    Object rateobj = subEntry.get("rateobj");
 | 
			
		||||
                                    listing.set("rateobj", rateobj);
 | 
			
		||||
                                    listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
 | 
			
		||||
                                    listing.set("taxprice", subEntry.get("biangenghouhsdj"));       //含税单价
 | 
			
		||||
                                    listing.set("oftax", subEntry.get("bghhszje"));        //价税合计
 | 
			
		||||
                                    listing.set("tax", subEntry.get("bghse"));    //税额
 | 
			
		||||
                                    listing.set("desc", subEntry.get("remark"));    //备注
 | 
			
		||||
                                    isSingleRateChangeMultyRate = true;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (this.isMultyRateChange(contract, source)) {
 | 
			
		||||
                                boolean ismultirate = source.getBoolean("ismultirate");
 | 
			
		||||
                                Object rateobj = subEntry.get("rateobj");
 | 
			
		||||
                                if(rateobj!=null){
 | 
			
		||||
                                    listing.set("rateobj", rateobj);
 | 
			
		||||
                                    listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
 | 
			
		||||
                                }
 | 
			
		||||
                                if(!ismultirate){
 | 
			
		||||
                                    Object curtaxrate = source.get("curtaxrate");
 | 
			
		||||
                                    listing.set("rateobj", curtaxrate);
 | 
			
		||||
                                    listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
 | 
			
		||||
                                    listing.set("taxprice", subEntry.get("biangenghouhsdj"));       //含税单价
 | 
			
		||||
                                    listing.set("oftax", subEntry.get("bghhszje"));        //价税合计
 | 
			
		||||
                                    listing.set("tax", subEntry.get("bghse"));    //税额
 | 
			
		||||
                                    listing.set("desc", subEntry.get("remark"));    //备注
 | 
			
		||||
                                    isMultyRateChangeSingleRate = true;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing.set("ischanged", true);
 | 
			
		||||
                            listing.set("enable", 1);
 | 
			
		||||
                            BigDecimal effectQty = subEntry.getBigDecimal("shouyingxsl");
 | 
			
		||||
                            BigDecimal lastChangedEffectQty = listing.getBigDecimal("chgeffectqty");
 | 
			
		||||
                            listing.set("chgeffectqty", effectQty.add(lastChangedEffectQty));
 | 
			
		||||
                            listing.set("curtaxprice", subEntry.getBigDecimal("biangenghouhsdj"));
 | 
			
		||||
                            BigDecimal changedTaxAmount = subEntry.getBigDecimal("hsbgje");
 | 
			
		||||
                            BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
 | 
			
		||||
                            listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
 | 
			
		||||
                            BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
 | 
			
		||||
                            BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
 | 
			
		||||
                            listing.set("lstoftaxamount", totalChangedTaxAmount);
 | 
			
		||||
                            listing.set("currentprice", subEntry.getBigDecimal("biangenghoudj"));
 | 
			
		||||
                            listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
 | 
			
		||||
                            BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
 | 
			
		||||
                            entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
 | 
			
		||||
                            BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
 | 
			
		||||
                            listing.set("totalqty", totalQty);
 | 
			
		||||
                            if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
 | 
			
		||||
                                BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
 | 
			
		||||
                                listing.set("avgtaxprice", avgTaxPrice);
 | 
			
		||||
                                BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
 | 
			
		||||
                                listing.set("avgprice", avgPrice);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listUpdateList.add(listing);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (changeType == 2) {
 | 
			
		||||
                            DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
 | 
			
		||||
                            listing.set("id", subEntry.get("newlistingid"));
 | 
			
		||||
                            listing.set("isaddnew", true);
 | 
			
		||||
                            listing.set("paydirection", PayDirectionEnum.OUT.getValue());
 | 
			
		||||
                            listing.set("listparentid", subEntry.getString("superlistingid"));
 | 
			
		||||
                            listing.set("number", subEntry.get("listnumber"));
 | 
			
		||||
                            listing.set("name", subEntry.get("listname"));
 | 
			
		||||
                            listing.set("sysnumber", subEntry.get("sysnum"));
 | 
			
		||||
                            if (subEntry.get("measureunit") != null) {
 | 
			
		||||
                                listing.set("measureunit", subEntry.getDynamicObject("measureunit").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing.set("qty", subEntry.get("qty"));
 | 
			
		||||
                            listing.set("totalqty", subEntry.get("qty"));
 | 
			
		||||
                            listing.set("price", subEntry.get("price"));
 | 
			
		||||
                            listing.set("avgprice", subEntry.get("price"));
 | 
			
		||||
                            listing.set("currentprice", subEntry.get("price"));
 | 
			
		||||
                            listing.set("cbsnumber", subEntry.get("cbsnumber"));
 | 
			
		||||
                            listing.set("amount", subEntry.get("amount"));
 | 
			
		||||
                            listing.set("lasttotalamt", subEntry.get("amount"));
 | 
			
		||||
                            listing.set("taxrate", subEntry.get("taxrate1"));
 | 
			
		||||
                            listing.set("tax", subEntry.get("tax"));
 | 
			
		||||
                            listing.set("taxprice", subEntry.get("hanshuidanj"));
 | 
			
		||||
                            listing.set("avgtaxprice", subEntry.get("hanshuidanj"));
 | 
			
		||||
                            listing.set("curtaxprice", subEntry.get("hanshuidanj"));
 | 
			
		||||
                            listing.set("oftax", subEntry.get("oftax"));
 | 
			
		||||
                            listing.set("lstoftaxamount", subEntry.get("oftax"));
 | 
			
		||||
                            listing.set("desc", subEntry.get("remark"));
 | 
			
		||||
                            DynamicObject parentnode = (DynamicObject)subEntry.getParent();
 | 
			
		||||
                            listing.set("listingmodel", parentnode.get("listmodelid"));
 | 
			
		||||
                            listing.set("contractid", contract.getPkValue().toString());
 | 
			
		||||
                            if (subEntry.get("resourceitem") != null) {
 | 
			
		||||
                                listing.set("resourceitem", subEntry.getDynamicObject("resourceitem").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (subEntry.get("materiel") != null) {
 | 
			
		||||
                                listing.set("material", subEntry.getDynamicObject("materiel").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (subEntry.get("boqnumber") != null) {
 | 
			
		||||
                                listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (subEntry.get("contlistnumber") != null) {
 | 
			
		||||
                                listing.set("contlistnumber", subEntry.getDynamicObject("contlistnumber").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (subEntry.get("listunitproject") != null) {
 | 
			
		||||
                                listing.set("listunitproject", subEntry.getDynamicObject("listunitproject").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (subEntry.get("rateobj") != null) {
 | 
			
		||||
                                listing.set("rateobj", subEntry.getDynamicObject("rateobj").getPkValue());
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing.set("directfee", subEntry.get("directfee"));
 | 
			
		||||
                            listing.set("equfee", subEntry.get("equfee"));
 | 
			
		||||
                            listing.set("manequfee", subEntry.get("manequfee"));
 | 
			
		||||
                            listing.set("manfee", subEntry.get("manfee"));
 | 
			
		||||
                            listing.set("tmpfee", subEntry.get("tmpfee"));
 | 
			
		||||
                            listing.set("enable", 1);
 | 
			
		||||
                            listing.set("status", "C");
 | 
			
		||||
                            listing.set("currency", source.getDynamicObject("currency").getPkValue());
 | 
			
		||||
                            listing.set("isleaf", true);
 | 
			
		||||
                            if (subEntry.getDynamicObject("parentgroup") != null) {
 | 
			
		||||
                                listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
 | 
			
		||||
                                listing.set("parent", subEntry.getDynamicObject("parentgroup").getPkValue());
 | 
			
		||||
                            } else if (subEntry.get("superlistingid") != null && subEntry.getLong("superlistingid") != 0L) {
 | 
			
		||||
                                DynamicObject superListing = (DynamicObject)newListingMap.get(String.valueOf(subEntry.getLong("superlistingid")));
 | 
			
		||||
                                listing.set("level", superListing.getInt("level") + 1);
 | 
			
		||||
                                listing.set("parent", subEntry.getLong("superlistingid"));
 | 
			
		||||
                            } else {
 | 
			
		||||
                                listing.set("level", 1);
 | 
			
		||||
                                listing.set("parent", (Object)null);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            listing.set("leaseunit", subEntry.get("leaseunit"));
 | 
			
		||||
                            listing.set("leaseqty", subEntry.get("leaseqty"));
 | 
			
		||||
                            listing.set("leasebegintime", subEntry.get("leasebegintime"));
 | 
			
		||||
                            listing.set("leaseendtime", subEntry.get("leaseendtime"));
 | 
			
		||||
                            listing.set("leasedayqty", subEntry.get("leasedayqty"));
 | 
			
		||||
                            listing.set("arrivaldate", subEntry.get("arrivaldate"));
 | 
			
		||||
                            listaddList.add(listing);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                this.writeBackPurchaseOrder(entryId_biangengsl, contract);
 | 
			
		||||
                if (!listUpdateList.isEmpty()) {
 | 
			
		||||
                    SaveServiceHelper.save(((DynamicObject)listUpdateList.get(0)).getDataEntityType(), listUpdateList.toArray());
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!listaddList.isEmpty()) {
 | 
			
		||||
                    SaveServiceHelper.save(((DynamicObject)listaddList.get(0)).getDataEntityType(), listaddList.toArray());
 | 
			
		||||
                }
 | 
			
		||||
                boolean ismultirate = source.getBoolean("ismultirate");
 | 
			
		||||
                if(isSingleRateChangeMultyRate && ismultirate){
 | 
			
		||||
                    contract.set("ismultirate", true);//多税率
 | 
			
		||||
                }
 | 
			
		||||
                if(isMultyRateChangeSingleRate && !ismultirate){
 | 
			
		||||
                    contract.set("ismultirate", false);//单税率
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            } else if (operationKey.equals("unaudit")) {
 | 
			
		||||
                contract.set("totalrevisionamount", totalRevisionAmount.subtract(revisionAmount));
 | 
			
		||||
                contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.subtract(revisionOfTaxAmount));
 | 
			
		||||
                contract.set("totalamount", totalAmount.subtract(revisionAmount));
 | 
			
		||||
                contract.set("totaloftaxamount", totalOfTaxAmount.subtract(revisionOfTaxAmount));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            SaveServiceHelper.save(new DynamicObject[]{contract});
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private void writeBackPurchaseOrder(Map<Long, BigDecimal> entryId_biangengsl, DynamicObject contract) {
 | 
			
		||||
        QFilter contractFilter = new QFilter("contract", "=", contract.getPkValue());
 | 
			
		||||
        QFilter sourceFilter = new QFilter("source", "=", OrderSourceEnum.PUR_CONT.getValue());
 | 
			
		||||
        DynamicObject[] orderBillArr = BusinessDataServiceHelper.load("ecma_purchaseorderbill", "billno,billname,orderentry,orderentry.sourceqty,orderentry.restqty,orderentry.listingid", new QFilter[]{contractFilter, sourceFilter});
 | 
			
		||||
 | 
			
		||||
        for(DynamicObject item : orderBillArr) {
 | 
			
		||||
            for(DynamicObject entry : item.getDynamicObjectCollection("orderentry")) {
 | 
			
		||||
                Long listingId = entry.getLong("listingid");
 | 
			
		||||
                BigDecimal biangengsl = (BigDecimal)entryId_biangengsl.get(listingId);
 | 
			
		||||
                BigDecimal sourceQty = entry.getBigDecimal("sourceqty");
 | 
			
		||||
                BigDecimal restQty = entry.getBigDecimal("restqty");
 | 
			
		||||
                if (biangengsl != null) {
 | 
			
		||||
                    entry.set("sourceqty", sourceQty.add(biangengsl));
 | 
			
		||||
                    entry.set("restqty", restQty.add(biangengsl));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SaveServiceHelper.save(orderBillArr);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
package zcgj.zcdev.zcdev.pr.plugin.operate;
 | 
			
		||||
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObject;
 | 
			
		||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
			
		||||
import kd.bos.entity.ExtendedDataEntity;
 | 
			
		||||
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 | 
			
		||||
import kd.bos.entity.plugin.AddValidatorsEventArgs;
 | 
			
		||||
import kd.bos.entity.plugin.PreparePropertysEventArgs;
 | 
			
		||||
import kd.bos.entity.validate.AbstractValidator;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 工序分摊金额校验
 | 
			
		||||
 */
 | 
			
		||||
public class OutContractSettleProcessCheckOp  extends AbstractOperationServicePlugIn {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onPreparePropertys(PreparePropertysEventArgs e) {
 | 
			
		||||
        super.onPreparePropertys(e);
 | 
			
		||||
        e.getFieldKeys().add("itementry");
 | 
			
		||||
        e.getFieldKeys().add("zcgj_processallocatentity");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onAddValidators(AddValidatorsEventArgs e) {
 | 
			
		||||
        super.onAddValidators(e);
 | 
			
		||||
        //当前所在的组织是属于矿山下的
 | 
			
		||||
        e.getValidators().add(new ValidatorExt());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class ValidatorExt extends AbstractValidator {
 | 
			
		||||
        @Override
 | 
			
		||||
        public void validate() {
 | 
			
		||||
            ExtendedDataEntity[] extendedDataEntities = this.getDataEntities();
 | 
			
		||||
            for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
 | 
			
		||||
                DynamicObject dataEntity = extendedDataEntity.getDataEntity();
 | 
			
		||||
                DynamicObjectCollection itementryCollection = dataEntity.getDynamicObjectCollection("itementry");
 | 
			
		||||
                int i=1;
 | 
			
		||||
                for (DynamicObject itementry : itementryCollection) {
 | 
			
		||||
                    BigDecimal oftaxamount = itementry.getBigDecimal("oftaxamount");
 | 
			
		||||
                    DynamicObjectCollection processallocatentityCollection = itementry.getDynamicObjectCollection("zcgj_processallocatentity");
 | 
			
		||||
                    BigDecimal totalPaAmount = BigDecimal.ZERO;
 | 
			
		||||
                    for (DynamicObject dynamicObject : processallocatentityCollection) {
 | 
			
		||||
                        totalPaAmount = totalPaAmount.add(dynamicObject.getBigDecimal("zcgj_pa_amount"));
 | 
			
		||||
                    }
 | 
			
		||||
                    if(totalPaAmount.compareTo(oftaxamount)!=0){
 | 
			
		||||
                        this.addFatalErrorMessage(extendedDataEntity, "合同支付项第"+i+"条,价税合计金额与工序分摊金额不一致,请重新核对并调整分摊金额,以确保两者相等。");
 | 
			
		||||
                    }
 | 
			
		||||
                    i++;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue