出库单科目属性过滤和成本分解结构必录逻辑添加

This commit is contained in:
xuhaihui 2025-08-27 16:51:05 +08:00
parent 9614b86ae4
commit e1fedec632
1 changed files with 98 additions and 9 deletions

View File

@ -5,19 +5,25 @@ 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.PropertyChangedArgs;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.TextEdit;
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.bos.servicehelper.BusinessDataServiceHelper;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
/**
* 出库单表单插件
* 说明1核算组织由项目中的财务记账组织携带而来
* 2使用设备过滤通过核算组织与使用设备中的使用组织比对而来过滤
* 3科目属性过滤和成本分解结构必录逻辑控制
*/
public class MaterialOutBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener {
@ -28,6 +34,11 @@ public class MaterialOutBillPlugin extends AbstractBillPlugIn implements BeforeF
if (zcgj_shebei != null) {
zcgj_shebei.addBeforeF7SelectListener(this);
}
BasedataEdit zcgj_accounttype = this.getControl("zcgj_accounttype"); //科目属性
if (zcgj_accounttype != null) {
zcgj_accounttype.addBeforeF7SelectListener(this);
}
this.addItemClickListeners("advcontoolbarap");//出库单明细分录工具栏
}
@Override
@ -54,21 +65,99 @@ public class MaterialOutBillPlugin extends AbstractBillPlugIn implements BeforeF
entryCollection.clear();
this.getView().updateView("entryentity");//刷新分录
}
} else if ("zcgj_accounttype".equals(key)) {
//科目属性
DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("entryentity");//出库单分录
boolean hasFL001 = false;
for (DynamicObject entryEntity : entryEntityCollection) {
DynamicObject accountType = entryEntity.getDynamicObject("zcgj_accounttype");//科目属性
if (accountType != null && "FL001".equals(accountType.getString("number"))) {
//科目属性-为生成成本时
hasFL001 = true;
break;
}
}
BasedataEdit edit = this.getView().getControl("procbs");//工作分解结构
edit.setMustInput(hasFL001);// 设置必录
this.getView().updateView("entryentity");//刷新分录
} else if ("material".equals(key)) {
//资源
ChangeData[] changeSet = e.getChangeSet();
ChangeData changeData = changeSet[0];
Object newValue = changeData.getNewValue();//新值
Object oldValue = changeData.getOldValue();//旧值
int rowIndex = changeData.getRowIndex(); //修改行所在行行号
if (newValue == null || !newValue.equals(oldValue)) {
this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
}
}
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
String itemKey = evt.getItemKey();
if (itemKey.equals("deleteentry")) {
//出库单明细删除按钮
DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("entryentity");//出库单分录
boolean hasFL001 = false;
for (DynamicObject entryEntity : entryEntityCollection) {
DynamicObject accountType = entryEntity.getDynamicObject("zcgj_accounttype");//科目属性
if (accountType != null && "FL001".equals(accountType.getString("number"))) {
//科目属性-为生成成本时
hasFL001 = true;
break;
}
}
BasedataEdit edit = this.getView().getControl("procbs");//工作分解结构
edit.setMustInput(hasFL001);// 设置必录
this.getView().updateView("entryentity");//刷新分录
}
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name = beforeF7SelectEvent.getProperty().getName();
ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
Object zcgj_fiorg = this.getModel().getValue("zcgj_fiorg");//核算组织
if (zcgj_fiorg != null) {
DynamicObject zcgj_fiorg1 = (DynamicObject) zcgj_fiorg;
QFilter qFilter = new QFilter("useorg", QCP.equals, zcgj_fiorg1.getPkValue());
formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
} else {
this.getView().showErrorNotification("请先填写核算组织!");
beforeF7SelectEvent.setCancel(true);
String name = beforeF7SelectEvent.getProperty().getName();
QFilter qFilter = null;
if ("zcgj_shebei".equals(name)) {
//使用设备
Object zcgj_fiorg = this.getModel().getValue("zcgj_fiorg");//核算组织
if (zcgj_fiorg != null) {
DynamicObject zcgj_fiorg1 = (DynamicObject) zcgj_fiorg;
qFilter = new QFilter("useorg", QCP.equals, zcgj_fiorg1.getPkValue());
} else {
this.getView().showErrorNotification("请先填写核算组织!");
beforeF7SelectEvent.setCancel(true);
}
} else if ("zcgj_accounttype".equals(name)) {
//科目属性
int row = beforeF7SelectEvent.getRow();
Object material = this.getModel().getValue("material", row);//资源
if (material != null) {
DynamicObject material1 = (DynamicObject) material;
DynamicObject resource = material1.getDynamicObject("resource");//资源-清单分类
List<Long> accountTypeIds = new ArrayList<>();
if (resource != null) {
QFilter qFilter1 = new QFilter("id", QCP.equals, resource.getPkValue());
DynamicObject ecbd_resource = BusinessDataServiceHelper.loadSingle("ecbd_resource", new QFilter[]{qFilter1});//清单分类
if (ecbd_resource != null) {
DynamicObjectCollection zcgj_accountTypeCollection = ecbd_resource.getDynamicObjectCollection("zcgj_accounttypes");//清单分类-科目属性
if (zcgj_accountTypeCollection != null && zcgj_accountTypeCollection.size() > 0) {
for (DynamicObject zcgj_accountType : zcgj_accountTypeCollection) {
DynamicObject basedataObj = (DynamicObject) zcgj_accountType.getDynamicObject("fbasedataid");
Long zcgj_accountTypeId = (Long) basedataObj.getPkValue();
accountTypeIds.add(zcgj_accountTypeId);
}
}
}
}
qFilter = new QFilter("id", QCP.in, accountTypeIds.toArray());
} else {
this.getView().showErrorNotification("请先填写资源!");
beforeF7SelectEvent.setCancel(true);
}
}
formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
}
}