From b4844b3dad3680fc3fbd4918c2b318b537531bb8 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 24 Dec 2025 16:46:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=88=E5=90=8C=E7=89=A9=E8=B5=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E5=90=88=E5=90=8C=E7=9C=8B=E6=9D=BF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/DynamicContractViewUIExt.java | 58 ++++++++++ .../pr/plugin/form/PurchaseAppBillPlugin.java | 107 +++++++++++++++++- 2 files changed, 161 insertions(+), 4 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/DynamicContractViewUIExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/DynamicContractViewUIExt.java index 4e415bd..764ec23 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/DynamicContractViewUIExt.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/DynamicContractViewUIExt.java @@ -16,6 +16,9 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +/** + * 合同看板二开重写系统部分代码 + */ public class DynamicContractViewUIExt extends DynamicContractViewUI { /** @@ -98,4 +101,59 @@ public class DynamicContractViewUIExt extends DynamicContractViewUI { } } + + protected void updateReceive(Long contractId, String payDirection) { + this.getModel().deleteEntryData("receiveentry"); + String formId = ""; + DynamicObject contract = BusinessDataServiceHelper.loadSingle(contractId, "ec_in_contract", "taxrate.taxRate"); + if (PayDirectionEnum.IN.getValue().equals(payDirection)) { + formId = "ec_income_register"; + } else { + formId = "ec_payment_register"; + } + + QFilter incomeFilter = new QFilter("entryentity.contract.id", "=", contractId); + incomeFilter.and(new QFilter("billStatus", "=", "C")); + DynamicObject[] incomeBillCols = BusinessDataServiceHelper.load(formId, "*", new QFilter[]{incomeFilter}); + int rowIndex = 0; + + for (int i = 0; i < incomeBillCols.length; ++i) { + DynamicObject incomeBillInfo = incomeBillCols[i]; + incomeBillInfo = BusinessDataServiceHelper.loadSingle(incomeBillInfo.get("id"), formId); + DynamicObjectCollection incomeBillEntryCols = (DynamicObjectCollection) incomeBillInfo.get("entryentity"); + + for (int j = 0; j < incomeBillEntryCols.size(); ++j) { + DynamicObject incomeBillEntry = (DynamicObject) incomeBillEntryCols.get(j); + if (incomeBillEntry.get("contract.id") != null && contractId.toString().equals(incomeBillEntry.get("contract.id").toString())) { + this.getModel().createNewEntryRow("receiveentry"); + BigDecimal ofTaxAmount = BigDecimal.ZERO; + if (PayDirectionEnum.IN.getValue().equals(payDirection)) { + ofTaxAmount = incomeBillEntry.getBigDecimal("receiptoftaxamount"); + } else { + ofTaxAmount = incomeBillEntry.getBigDecimal("thispaymentoftaxamount"); + } + + BigDecimal taxRate = BigDecimal.ZERO; + if (contract.getDynamicObject("taxrate") != null) { + taxRate = contract.getDynamicObject("taxrate").getBigDecimal("taxRate").divide(BigDecimal.valueOf(100L), 4); + } + + BigDecimal amount = ofTaxAmount.divide(BigDecimal.ONE.add(taxRate), 4); + BigDecimal tax = ofTaxAmount.subtract(amount); + this.getModel().setValue("incomebillno", incomeBillInfo.get("billno"), rowIndex); + this.getModel().setValue("incomebillname", incomeBillInfo.get("billname"), rowIndex); + this.getModel().setValue("incomeamount", amount, rowIndex); + this.getModel().setValue("incometaxamount", tax, rowIndex); + this.getModel().setValue("incomeoftaxamount", ofTaxAmount, rowIndex); + this.getModel().setValue("incomebizdate", incomeBillInfo.get("bizdate"), rowIndex); + this.getModel().setValue("incomecreator", incomeBillInfo.get("creator"), rowIndex); + this.getModel().setValue("createdate", incomeBillInfo.get("createtime"), rowIndex); + this.getModel().setValue("incomedesc", incomeBillEntry.get("description"), rowIndex); + this.getModel().setValue("zcgj_incomeapply", incomeBillEntry.get("incomeapply"), rowIndex);//请款单号--二开添加 + ++rowIndex; + } + } + } + + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PurchaseAppBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PurchaseAppBillPlugin.java index bb0c71c..b435236 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PurchaseAppBillPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PurchaseAppBillPlugin.java @@ -2,19 +2,32 @@ package zcgj.zcdev.zcdev.pr.plugin.form; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.EntityMetadataCache; +import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.CloseCallBack; +import kd.bos.form.ShowFormHelper; +import kd.bos.form.events.BeforeDoOperationEventArgs; +import kd.bos.form.events.ClosedCallBackEvent; import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.form.operate.FormOperate; import kd.bos.list.ListShowParameter; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; +import kd.ec.basedata.business.model.cont.OutTreeListingConstant; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * 采购申请单表单插件 @@ -22,6 +35,7 @@ import java.util.List; * 2:过滤项目:项目的项目组织与财务记账组织一致才显示 * 3:项目字段赋值 * 4:申请人部门过滤赋值 + * 5:添加合同物资按钮对应逻辑 */ public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener { @Override @@ -97,7 +111,7 @@ public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF DynamicObject fiaccountorg1 = (DynamicObject) fiaccountorg; qFilters.add(new QFilter("projectorg.id", QCP.in, fiaccountorg1.get("id")));//项目组织 } - } else if ("zcgj_persondepart".equals(propertyName)){ + } else if ("zcgj_persondepart".equals(propertyName)) { // 申请人部门 Object applyer = this.getModel().getValue("applyer");//申请人 if (applyer == null) { @@ -114,4 +128,89 @@ public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF } formShowParameter.getListFilterParameter().setQFilters(qFilters); } + + public void beforeDoOperation(BeforeDoOperationEventArgs args) { + FormOperate operate = (FormOperate) args.getSource(); + if ("selcontlist".equals(operate.getOperateKey())) { + //添加合同物资 + this.doSelContList(); + } + } + + private void doSelContList() { + DynamicObject contract = (DynamicObject) this.getModel().getValue("zcgj_contract");//物资采购合同 + if (contract == null) { + this.getView().showTipNotification(ResManager.loadKDString("请先选择物资采购合同。", "MaterialInBillEditPlugin_1", "ec-ecma-formplugin", new Object[0])); + } else { + ListShowParameter parameter = ShowFormHelper.createShowListForm("ec_outtreelisting", true, 3, true); + parameter.getCustomParams().put("isFromMat", "true"); + Long contId = contract.getLong("id"); + parameter.getListFilterParameter().getQFilters().add(new QFilter("contractid", "=", contId)); + parameter.getListFilterParameter().getQFilters().add(new QFilter("resourceitem", "!=", 0)); + int rowCount = this.getModel().getEntryRowCount("purchaseentry");//采购明细单据体 + List selIds = new ArrayList(); + + for (int i = 0; i < rowCount; ++i) { + String id = (String) this.getModel().getValue("zcgj_listingid", i); + if (StringUtils.isNotBlank(id)) { + selIds.add(Long.valueOf(id)); + } + } + + parameter.getListFilterParameter().getQFilters().add(new QFilter(OutTreeListingConstant.ID_ENTITY_PK, "not in", selIds.toArray())); + + CloseCallBack callBack = new CloseCallBack(this, "selcontlist"); + parameter.setCloseCallBack(callBack); + this.getView().showForm(parameter); + } + } + + public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) { + super.closedCallBack(closedCallBackEvent); + if ("selcontlist".equals(closedCallBackEvent.getActionId())) { + ListSelectedRowCollection rows = (ListSelectedRowCollection) closedCallBackEvent.getReturnData(); + if (rows != null && rows.size() > 0) { + List listIds = (List) rows.stream().map((obj) -> { + return obj.getPrimaryKeyValue(); + }).collect(Collectors.toList()); + DynamicObject[] listings = BusinessDataServiceHelper.load(listIds.toArray(new Long[listIds.size()]), EntityMetadataCache.getDataEntityType("ec_outtreelisting")); + this.fillEntryByContListing(listings); + } + } + } + + private void fillEntryByContListing(DynamicObject[] listings) { + int rowCount = this.getModel().getEntryRowCount("purchaseentry"); + Set listingIdSet = new HashSet(); + + int i; + for (i = 0; i < rowCount; ++i) { + String id = (String) this.getModel().getValue("zcgj_listingid", i); + if (id != null && id != " ") { + listingIdSet.add(id); + } + } + + for (i = 0; i < listings.length; ++i) { + if (!listingIdSet.contains(listings[i].getString("id"))) { + int curIndex = this.getModel().createNewEntryRow("purchaseentry"); + this.getModel().updateCache(); + this.getModel().setValue("zcgj_listingid", listings[i].get(OutTreeListingConstant.ID_ENTITY_PK), curIndex); + DynamicObject resourceItem = listings[i].getDynamicObject("resourceitem"); + this.getModel().setValue("material", resourceItem, curIndex);//资源编码 + this.getModel().setValue("entrytaxrate", listings[i].get("rateobj"), curIndex);//税率 + this.getModel().setValue("purchaseqty", listings[i].get("totalqty"), curIndex);//采购数量 + this.getModel().setValue("price", listings[i].get("currentprice"), curIndex);//预估单价 + Object pkValue = listings[i].getPkValue(); + QFilter filter = new QFilter("listmodelentry.sublistentry.id", QCP.equals, pkValue); + DynamicObjectCollection ec_out_contract = QueryServiceHelper.query("ec_out_contract", "listmodelentry.sublistentry.zcgj_treeresitemmodel2", new QFilter[]{filter}); + if (ec_out_contract.size() > 0) { + Object modelnum = ec_out_contract.get(0).get("listmodelentry.sublistentry.zcgj_treeresitemmodel2"); + if (modelnum != null) { + this.getModel().setValue("zcgj_model", modelnum, curIndex);//规格型号 + } + } + } + } + } }