支付公司初始化及成本中心过滤通用插件

This commit is contained in:
zengweihai 2024-05-29 17:48:24 +08:00
parent 8c230a5bac
commit e9f23a4847
1 changed files with 128 additions and 0 deletions

View File

@ -0,0 +1,128 @@
package shkd.fi.er.plugin.formplugin;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.form.field.BasedataEdit;
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 kd.sdk.plugin.Plugin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EventObject;
import java.util.List;
/**
* 报销单界面插件
*/
public class CommonCostCenterBillFormPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener,Plugin {
//不同成本中心对应的单据标识
List<String> costList = new ArrayList<String>(Arrays.asList("er_repaymentbill"));//还款单
List<String> entryCostList = new ArrayList<String>(Arrays.asList("er_dailyreimbursebill","er_prepaybill","er_dailyloanbill",
"er_publicreimbursebill"));//费用报销单预付单员工借款单对公报销单
List<String> travelCostList = new ArrayList<String>(Arrays.asList("er_tripreimbursebill"));//差旅报销单
//存在支付公司的单据标识集合
List<String> payList = new ArrayList<String>(Arrays.asList("er_publicreimbursebill","er_dailyloanbill","er_prepaybill",
"er_dailyreimbursebill", "er_tripreimbursebill" ));//对公报销单员工借款单预付单费用报销单差旅报销单
//成本中心对应标识
List<String> costNameList = new ArrayList<String>(Arrays.asList("std_costcenter","std_entrycostcenter","travelcostcenter"));
String entityId;
/**
* 初始化页面标识参数
*/
@Override
public void initialize() {
super.initialize();
entityId = this.getView().getEntityId();//获取当前页面标识
}
/**
*注册实物卡片F7字段监听事件
* @param e
*/
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
//监听实物卡片F7字段点击事件
if (entryCostList.contains(entityId)){
BasedataEdit edit = this.getView().getControl("std_entrycostcenter");
edit.addBeforeF7SelectListener(this);
}else if (costList.contains(entityId)){
BasedataEdit edit = this.getView().getControl("std_costcenter");
edit.addBeforeF7SelectListener(this);
} else if (travelCostList.contains(entityId)) {
BasedataEdit edit = this.getView().getControl("travelcostcenter");
edit.addBeforeF7SelectListener(this);
}
}
/**
* 支付公司默认为人员上的劳动主体
* @param e
*/
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
DynamicObject dataEntity = this.getModel().getDataEntity();
if (payList.contains(entityId)){//当页面编码为xxxx时设置支付公司
DynamicObject applier = dataEntity.getDynamicObject("applier");//申请人
if (applier != null){
DynamicObject bos_user = BusinessDataServiceHelper.loadSingle(applier.getPkValue(), "bos_user");
DynamicObject shkd_labororg = bos_user.getDynamicObject("shkd_labororg");
this.getModel().setValue("paycompany",shkd_labororg);//设置支付公司为申请人员上的劳动主体
}
}
}
/**
* 费用明细分录的成本中心只能选择申请人员上存在的成本中心
* @param beforeF7SelectEvent
*/
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name = beforeF7SelectEvent.getProperty().getName();
DynamicObject dataEntity = this.getModel().getDataEntity();//获取单据实体
if (costNameList.contains(name)){
DynamicObject applier = dataEntity.getDynamicObject("applier");//申请人
if (applier != null){
ArrayList<Object> costIds = new ArrayList<>();
DynamicObject bos_user = BusinessDataServiceHelper.loadSingle(applier.getPkValue(), "bos_user");
DynamicObjectCollection costEntity = bos_user.getDynamicObjectCollection("shkd_costentity");
if (costEntity.size() > 0){//当人员的成本中心分录存在数据时执行设置过滤条件
for (DynamicObject dynamicObject : costEntity) {
DynamicObject shkd_e_cost = dynamicObject.getDynamicObject("shkd_e_cost");
if (shkd_e_cost != null){
costIds.add(shkd_e_cost.getPkValue());
}
}
if (costIds.size()>0){
QFilter qFilter = new QFilter("id", QCP.in,costIds);
ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
formShowParameter.getListFilterParameter().setFilter(qFilter);
}else {
beforeF7SelectEvent.setCancel(true);
this.getView().showTipNotification("用户未设置成本中心");
}
}else {
beforeF7SelectEvent.setCancel(true);
this.getView().showTipNotification("用户未设置成本中心");
}
}
}
}
}