diff --git a/main/java/shkd/repc/recon/formplugin/ContractSettlePlanF7Plugin.java b/main/java/shkd/repc/recon/formplugin/ContractSettlePlanF7Plugin.java new file mode 100644 index 0000000..a9c9b15 --- /dev/null +++ b/main/java/shkd/repc/recon/formplugin/ContractSettlePlanF7Plugin.java @@ -0,0 +1,72 @@ +package shkd.repc.recon.formplugin; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.form.field.RefBillEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 动态表单插件 + */ +public class ContractSettlePlanF7Plugin extends AbstractFormPlugin implements Plugin, BeforeF7SelectListener { + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + RefBillEdit bEdit = this.getView().getControl("qeug_settleplan"); + bEdit.addBeforeF7SelectListener(this); + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent evt) { + ListShowParameter formShowParameter = (ListShowParameter) evt.getFormShowParameter(); + List canSeeDataId = new ArrayList<>(); + + // 获取当前组织 + DynamicObject org = (DynamicObject) this.getModel().getValue("org"); + String orgName = org.getString("name"); + + // 查找所有已审核的采购需求数据(单据状态 = "C") + QFilter statusFilter = new QFilter("billstatus", QCP.equals, "C"); + QFilter orgFilter = new QFilter("org.name", QCP.equals, orgName); + DynamicObject[] settlePlanBills = BusinessDataServiceHelper.load("recon_settleplanbill", "id,bill,qeug_applyamount", statusFilter.and(orgFilter).toArray()); + + // 若无数据,直接返回 + if (settlePlanBills == null || settlePlanBills.length == 0) { + return; + } + + // 遍历所有采购需求数据 + for (DynamicObject settlePlanBill : settlePlanBills) { + long id = settlePlanBill.getLong("id"); + canSeeDataId.add(id); +// BigDecimal applyAmount = settlePlanBill.getBigDecimal("qeug_applyamount"); +// +// // 查询当前采购需求的所有相关费用登记 +// QFilter refFilter = new QFilter("qeug_refbillfield.id", QCP.equals, id); +// DynamicObject[] conNoTextBills = BusinessDataServiceHelper.load("recon_connotextbill", "id,oriamt", refFilter.toArray()); +// +// // 计算所有已使用金额 +// BigDecimal totalUsedAmount = Arrays.stream(conNoTextBills) +// .map(bill -> bill.getBigDecimal("oriamt")) +// .reduce(BigDecimal.ZERO, BigDecimal::add); +// +// // 若申请金额大于已使用金额,则允许选择 +// if (applyAmount.compareTo(totalUsedAmount) > 0) { +// canSeeDataId.add(id); +// } + } + + List qFilters = Collections.singletonList(new QFilter("id", QCP.in, canSeeDataId)); + formShowParameter.getListFilterParameter().setQFilters(qFilters); + } +} \ No newline at end of file