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

81 lines
3.1 KiB
Java
Raw Normal View History

2025-03-15 03:17:34 +00:00
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;
2025-03-15 06:28:26 +00:00
import java.util.*;
2025-03-15 03:17:34 +00:00
/**
* 动态表单插件
2025-03-15 06:28:26 +00:00
* 费用登记-采购计划F7过滤
2025-03-15 03:17:34 +00:00
*/
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();
2025-03-15 06:28:26 +00:00
List<Long> canSeeDataId = new ArrayList<>();
// 获取当前组织
2025-03-15 03:17:34 +00:00
DynamicObject org = (DynamicObject) this.getModel().getValue("org");
2025-03-15 06:28:26 +00:00
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) {
2025-03-15 03:17:34 +00:00
long id = settlePlanBill.getLong("id");
BigDecimal applyAmount = settlePlanBill.getBigDecimal("qeug_applyamount");
2025-03-15 06:28:26 +00:00
// 查询当前采购需求的所有相关费用登记
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) {
2025-03-15 03:17:34 +00:00
canSeeDataId.add(id);
}
}
2025-03-15 06:28:26 +00:00
// 仅当有可用数据时,才设置过滤条件
if (!canSeeDataId.isEmpty()) {
List<QFilter> qFilters = Collections.singletonList(new QFilter("id", QCP.in, canSeeDataId));
formShowParameter.getListFilterParameter().setQFilters(qFilters);
}
2025-03-15 03:17:34 +00:00
}
2025-03-15 06:28:26 +00:00
2025-03-15 03:17:34 +00:00
}