dobe_comic8/main/java/shkd/repc/recon/formplugin/ConNoTextBillFromPlugin.java

81 lines
3.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package shkd.repc.recon.formplugin;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.form.field.BasedataEdit;
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.*;
/**
* 动态表单插件
* 【费用登记】-采购计划F7过滤
*/
public class ConNoTextBillFromPlugin extends AbstractFormPlugin implements Plugin, BeforeF7SelectListener {
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
RefBillEdit bEdit = this.getView().getControl("qeug_refbillfield");
bEdit.addBeforeF7SelectListener(this);
}
@Override
public void beforeF7Select(BeforeF7SelectEvent evt) {
ListShowParameter formShowParameter = (ListShowParameter) evt.getFormShowParameter();
List<Long> 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");
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);
}
}
// 仅当有可用数据时,才设置过滤条件
if (!canSeeDataId.isEmpty()) {
List<QFilter> qFilters = Collections.singletonList(new QFilter("id", QCP.in, canSeeDataId));
formShowParameter.getListFilterParameter().setQFilters(qFilters);
}
}
}