diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractProcessRevisionFilterPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractProcessRevisionFilterPlugin.java index ecf2bf3..f390357 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractProcessRevisionFilterPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractProcessRevisionFilterPlugin.java @@ -53,5 +53,4 @@ public class ContractProcessRevisionFilterPlugin extends AbstractBillPlugIn impl } } -// } } \ No newline at end of file diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleProcessFilterPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleProcessFilterPlugin.java new file mode 100644 index 0000000..33133bb --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/OutContractSettleProcessFilterPlugin.java @@ -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); + } + + } + } + +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplyEditUIExtPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplyEditUIExtPlugin.java new file mode 100644 index 0000000..4bf9c6d --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplyEditUIExtPlugin.java @@ -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 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); + } + +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java index 636f920..7dfbcc0 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java @@ -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"); + } + } } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractRevisionBillOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractRevisionBillOpExt.java new file mode 100644 index 0000000..37c15eb --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractRevisionBillOpExt.java @@ -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 listUpdateList = new ArrayList(); + List listaddList = new ArrayList(); + Map 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 newListingMap = new HashMap(); + ArrayList 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 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); + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettleProcessCheckOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettleProcessCheckOp.java new file mode 100644 index 0000000..bb73c0d --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettleProcessCheckOp.java @@ -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++; + } + } + } + } +}