1:支出合同确认单添加费用项目过滤和费用项目清空时的避免报错;2:费用报销单:费用项目过滤和科目属性赋值过滤逻辑添加
This commit is contained in:
		
							parent
							
								
									95dce05fef
								
							
						
					
					
						commit
						56ffe5eba6
					
				| 
						 | 
				
			
			@ -0,0 +1,198 @@
 | 
			
		|||
package zcgj.zcdev.zcdev.fs.plugin.form;
 | 
			
		||||
 | 
			
		||||
import kd.bos.bill.AbstractBillPlugIn;
 | 
			
		||||
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.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.bos.servicehelper.QueryServiceHelper;
 | 
			
		||||
import kd.sdk.plugin.Plugin;
 | 
			
		||||
import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.EventObject;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 费用报销单:费用项目过滤和科目属性赋值过滤逻辑
 | 
			
		||||
 */
 | 
			
		||||
public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerListener(EventObject e) {
 | 
			
		||||
        super.registerListener(e);
 | 
			
		||||
        BasedataEdit expenseItem = this.getControl("expenseitem"); //费用项目
 | 
			
		||||
        if (expenseItem != null) {
 | 
			
		||||
            expenseItem.addBeforeF7SelectListener(this);
 | 
			
		||||
        }
 | 
			
		||||
        BasedataEdit accountType = this.getControl("zcgj_accounttype"); //科目属性
 | 
			
		||||
        if (accountType != null) {
 | 
			
		||||
            accountType.addBeforeF7SelectListener(this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void propertyChanged(PropertyChangedArgs e) {
 | 
			
		||||
        String name = e.getProperty().getName();
 | 
			
		||||
        if (name.equals("expenseitem")) {
 | 
			
		||||
            //费用项目
 | 
			
		||||
            DynamicObject costCompany = (DynamicObject) this.getModel().getValue("costcompany");//费用承担公司
 | 
			
		||||
            long costCompanyId = costCompany.getLong("id");//费用承担公司id
 | 
			
		||||
            if (!OrgCheckUtils.isKS(costCompanyId)) {
 | 
			
		||||
                //不是矿山不进入下面逻辑
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            ChangeData changeData = e.getChangeSet()[0];
 | 
			
		||||
            DynamicObject expenseItem = (DynamicObject) changeData.getNewValue();//费用项目新值
 | 
			
		||||
            int rowIndex = changeData.getRowIndex();//所选行
 | 
			
		||||
            if (expenseItem == null) {
 | 
			
		||||
                this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            long expenseItemId = expenseItem.getLong("id");//费用项目id
 | 
			
		||||
 | 
			
		||||
            QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItemId);
 | 
			
		||||
            DynamicObjectCollection AccountFeeCollection = QueryServiceHelper.query("zcgj_accountfee",
 | 
			
		||||
                    "zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter});//费用与科目分类
 | 
			
		||||
 | 
			
		||||
            if (AccountFeeCollection != null && AccountFeeCollection.size() == 1) {
 | 
			
		||||
                //费用与科目分类中费用项目与科目分类为一对一的关系,直接获取科目分类赋值
 | 
			
		||||
                long id = AccountFeeCollection.get(0).getLong("zcgj_entryentity.zcgj_accounttype");
 | 
			
		||||
                this.getModel().setValue("zcgj_accounttype", id, rowIndex);
 | 
			
		||||
            } else if (AccountFeeCollection != null && AccountFeeCollection.size() > 1) {
 | 
			
		||||
                /*
 | 
			
		||||
                费用与科目分类中费用项目与科目分类为一对多的关系,先查询默认科目分类,存在默认科目分类数据时,如若通过费用承担公司与公司科目分类规则中查询到对应数据,便直接赋值
 | 
			
		||||
                如若没有,则通过费用承担公司在组织分类中查询对应默认分类,再通过组织分类配置表确认默认科目分类
 | 
			
		||||
                 */
 | 
			
		||||
                QFilter filter1 = new QFilter("zcgj_entryexpense.zcgj_expenseitem", QCP.equals, expenseItemId);
 | 
			
		||||
                DynamicObjectCollection orgTypeDefaultCollection = QueryServiceHelper.query("zcgj_orgtypedefault",
 | 
			
		||||
                        "zcgj_entryexpense.zcgj_yanzhou,zcgj_entryexpense.zcgj_xian,zcgj_entryexpense.zcgj_nanjing,zcgj_entryexpense.zcgj_tianjin",
 | 
			
		||||
                        new QFilter[]{filter1});//默认科目分类
 | 
			
		||||
 | 
			
		||||
                if (orgTypeDefaultCollection != null && orgTypeDefaultCollection.size() == 1) {
 | 
			
		||||
                    DynamicObject companyRule = BusinessDataServiceHelper.loadSingle("zcgj_companyrule",
 | 
			
		||||
                            new QFilter("zcgj_costcompany.id", QCP.equals, costCompanyId).toArray());//公司科目分类规则
 | 
			
		||||
                    if (companyRule != null) {
 | 
			
		||||
                        DynamicObjectCollection entryRuleCollection = companyRule.getDynamicObjectCollection("zcgj_entryrule");//公司费用分类规则分录
 | 
			
		||||
                        for (DynamicObject entryRule : entryRuleCollection) {
 | 
			
		||||
                            DynamicObject entryRuleExpenseItem = entryRule.getDynamicObject("zcgj_expenseitem");//费用项目
 | 
			
		||||
                            String entryRuleRuleType = entryRule.getString("zcgj_ruletype");//分类规则
 | 
			
		||||
                            if (entryRuleRuleType.equals("公司") && entryRuleExpenseItem.getLong("id") == expenseItemId) {
 | 
			
		||||
                                DynamicObject entryRuleCompanyType = entryRule.getDynamicObject("zcgj_companytype");//公司默认分类(科目分类)
 | 
			
		||||
                                this.getModel().setValue("zcgj_accounttype", entryRuleCompanyType, rowIndex);
 | 
			
		||||
                                return;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    QFilter filter3 = new QFilter("entryentity.orgid", QCP.equals, costCompanyId);
 | 
			
		||||
                    DynamicObjectCollection wf_orgTyp = QueryServiceHelper.query("wf_orgtype",
 | 
			
		||||
                            "number", new QFilter[]{filter3});//组织分类
 | 
			
		||||
 | 
			
		||||
                    if (wf_orgTyp != null && wf_orgTyp.size() == 1) {
 | 
			
		||||
                        String wf_orgTypeNumber = (String) wf_orgTyp.get(0).get("number");//组织分类编号
 | 
			
		||||
                        DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig",
 | 
			
		||||
                                new QFilter("number", QCP.equals, wf_orgTypeNumber).toArray());//组织分类配置表
 | 
			
		||||
 | 
			
		||||
                        String accountType = null;//默认科目分类中的科目分类
 | 
			
		||||
                        if (orgCateGoryConfig != null) {
 | 
			
		||||
                            String defaultSubjectCode = orgCateGoryConfig.getString("zcgj_defaultsubjectcode");//默认科目分类编码
 | 
			
		||||
                            switch (defaultSubjectCode) {
 | 
			
		||||
                                case "ZCKS_NJXMBM":
 | 
			
		||||
                                    //南京项目
 | 
			
		||||
                                    accountType = "zcgj_nanjing";
 | 
			
		||||
                                    break;
 | 
			
		||||
                                case "ZCKS_TJXMBM":
 | 
			
		||||
                                    //天津项目
 | 
			
		||||
                                    accountType = "zcgj_tianjin";
 | 
			
		||||
                                    break;
 | 
			
		||||
                                case "ZCKS_XAXMBM":
 | 
			
		||||
                                    //西安项目
 | 
			
		||||
                                    accountType = "zcgj_xian";
 | 
			
		||||
                                    break;
 | 
			
		||||
                                case "ZCKS_YZ_XMBM":
 | 
			
		||||
                                    //兖州项目
 | 
			
		||||
                                    accountType = "zcgj_yanzhou";
 | 
			
		||||
                                    break;
 | 
			
		||||
                            }
 | 
			
		||||
                            long id = orgTypeDefaultCollection.get(0).getLong("zcgj_entryexpense." + accountType);
 | 
			
		||||
                            this.getModel().setValue("zcgj_accounttype", id, rowIndex);//科目属性
 | 
			
		||||
                        } else {
 | 
			
		||||
                            //组织分类配置表中未查询到对应数据,说明组织分类中编码有所改变,需维护对应的组织分类配置表
 | 
			
		||||
                            this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
 | 
			
		||||
                            this.getView().showErrorNotification("组织分类中编码有所改变,请维护对应的组织分类配置表!");
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
 | 
			
		||||
        DynamicObject costCompany = this.getView().getModel().getDataEntity(true).getDynamicObject("costcompany");
 | 
			
		||||
        long costCompanyId = costCompany.getLong("id");
 | 
			
		||||
        if (!OrgCheckUtils.isKS(costCompanyId)) {
 | 
			
		||||
            //不是矿山不进入下面逻辑
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        String name = beforeF7SelectEvent.getProperty().getName();
 | 
			
		||||
        ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
 | 
			
		||||
        if (name.equals("expenseitem")) {
 | 
			
		||||
            //费用项目
 | 
			
		||||
            DynamicObject zcgj_accountfee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee",
 | 
			
		||||
                    new QFilter("zcgj_biztype", QCP.equals, "10").toArray());//费用与科目分类表
 | 
			
		||||
            List<String> feeNumbers = new ArrayList<>();
 | 
			
		||||
            if (zcgj_accountfee != null) {
 | 
			
		||||
                DynamicObjectCollection entryEntityCollection = zcgj_accountfee.getDynamicObjectCollection("zcgj_entryentity");//分录
 | 
			
		||||
                for (DynamicObject entryEntity : entryEntityCollection) {
 | 
			
		||||
                    DynamicObject fee = entryEntity.getDynamicObject("zcgj_fee");//费用项目
 | 
			
		||||
                    String feeNumber = fee.getString("number");
 | 
			
		||||
                    feeNumbers.add(feeNumber);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            QFilter qFilter = new QFilter("number", QCP.in, feeNumbers);
 | 
			
		||||
            formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
            formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
        } else if (name.equals("zcgj_accounttype")) {
 | 
			
		||||
            //科目属性
 | 
			
		||||
            int row = beforeF7SelectEvent.getRow();
 | 
			
		||||
            DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录
 | 
			
		||||
            if (dynamicObjectCollection != null) {
 | 
			
		||||
                DynamicObject expenseItem = dynamicObjectCollection.get(row).getDynamicObject("expenseitem");//费用项目
 | 
			
		||||
                if (expenseItem != null) {
 | 
			
		||||
                    QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItem.getLong("id"));
 | 
			
		||||
                    DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee",
 | 
			
		||||
                            "zcgj_entryentity.zcgj_accounttype.number", new QFilter[]{filter});//费用与科目分类
 | 
			
		||||
                    List<String> numbers = new ArrayList<>();
 | 
			
		||||
                    if (accountfeeEntries != null) {
 | 
			
		||||
                        for (DynamicObject dynamicObject : accountfeeEntries) {
 | 
			
		||||
                            String zcgjAccounttypeNumber = dynamicObject.getString("zcgj_entryentity.zcgj_accounttype.number");
 | 
			
		||||
                            if (zcgjAccounttypeNumber != null) {
 | 
			
		||||
                                numbers.add(zcgjAccounttypeNumber);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    QFilter qFilter = new QFilter("number", QCP.in, numbers);
 | 
			
		||||
                    formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
                } else {
 | 
			
		||||
                    this.getView().showErrorNotification("请选择费用项目!");
 | 
			
		||||
                    beforeF7SelectEvent.setCancel(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ import kd.bos.form.field.RefBillEdit;
 | 
			
		|||
import kd.bos.form.field.events.BeforeF7SelectEvent;
 | 
			
		||||
import kd.bos.form.field.events.BeforeF7SelectListener;
 | 
			
		||||
import kd.bos.list.ListShowParameter;
 | 
			
		||||
import kd.bos.org.utils.OrgTreeUtils;
 | 
			
		||||
import kd.bos.orm.query.QCP;
 | 
			
		||||
import kd.bos.orm.query.QFilter;
 | 
			
		||||
import kd.bos.permission.api.HasPermOrgResult;
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +124,11 @@ public class OutContractFinaceConfirmePlugin  extends AbstractBillPlugIn impleme
 | 
			
		|||
            DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_expenseitementry");
 | 
			
		||||
            if(dynamicObjectCollection!=null){
 | 
			
		||||
                DynamicObject zcgjExpenseitem = dynamicObjectCollection.get(rowIndex).getDynamicObject("zcgj_expenseitem");
 | 
			
		||||
                QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee",QCP.equals,zcgjExpenseitem.getLong("id"));
 | 
			
		||||
                if (zcgjExpenseitem == null) {
 | 
			
		||||
                    this.getModel().setValue("zcgj_accounttype", null, rowIndex);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, zcgjExpenseitem.getLong("id"));
 | 
			
		||||
                //分录过滤
 | 
			
		||||
                //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据
 | 
			
		||||
                //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据
 | 
			
		||||
| 
						 | 
				
			
			@ -201,6 +206,11 @@ public class OutContractFinaceConfirmePlugin  extends AbstractBillPlugIn impleme
 | 
			
		|||
        if(accounttype != null) {
 | 
			
		||||
            accounttype.addBeforeF7SelectListener(this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        BasedataEdit zcgj_expenseitem = this.getControl("zcgj_expenseitem"); //费用项目
 | 
			
		||||
        if (zcgj_expenseitem != null) {
 | 
			
		||||
            zcgj_expenseitem.addBeforeF7SelectListener(this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			@ -274,8 +284,6 @@ public class OutContractFinaceConfirmePlugin  extends AbstractBillPlugIn impleme
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
 | 
			
		||||
        String name = beforeF7SelectEvent.getProperty().getName();
 | 
			
		||||
| 
						 | 
				
			
			@ -346,10 +354,23 @@ public class OutContractFinaceConfirmePlugin  extends AbstractBillPlugIn impleme
 | 
			
		|||
                    this.getView().showErrorNotification("请选择费用项目!");
 | 
			
		||||
                    beforeF7SelectEvent.setCancel(true);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } else if (name.equals("zcgj_expenseitem")) {
 | 
			
		||||
            //费用项目
 | 
			
		||||
            ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
 | 
			
		||||
            DynamicObject zcgj_accountfee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee", new QFilter("zcgj_biztype", QCP.equals, "10").toArray());//获取费用与科目分类表
 | 
			
		||||
            List<String> numbers = new ArrayList<>();
 | 
			
		||||
            if (zcgj_accountfee != null) {
 | 
			
		||||
                DynamicObjectCollection zcgj_entryentity = zcgj_accountfee.getDynamicObjectCollection("zcgj_entryentity");//分录
 | 
			
		||||
                for (DynamicObject dynamicObject : zcgj_entryentity) {
 | 
			
		||||
                    DynamicObject zcgj_fee = dynamicObject.getDynamicObject("zcgj_fee");//费用项目
 | 
			
		||||
                    String number = zcgj_fee.getString("number");
 | 
			
		||||
                    numbers.add(number);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            QFilter qFilter = new QFilter("number", QCP.in, numbers);
 | 
			
		||||
            formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
            formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue