diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java new file mode 100644 index 0000000..06c67c6 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/ReimbursementAccountTypePlugin.java @@ -0,0 +1,153 @@ +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.dataentity.utils.StringUtils; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.control.EntryGrid; +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.list.ListShowParameter; +import kd.bos.mvc.bill.BillView; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +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; + +/** + * 1、费用报销单;2、差旅报销单;3、对公报销单;4、预付单 + * 科目分类通用插件 + */ +public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { + + /** + * 发票分录超链接跳转到详情 + */ + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) + if(company!=null){ + //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 + DynamicObject companyObj = (DynamicObject)company; + Long companyId = companyObj.getLong("id"); + if(OrgCheckUtils.isKS(companyId)){ + //仅针对矿山下组织下的逻辑 + BasedataEdit accounttype = this.getControl("zcgj_accounttype"); //科目分类 + if(accounttype != null) { + accounttype.addBeforeF7SelectListener(this); + } + } + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) + String name = beforeF7SelectEvent.getProperty().getName(); + String billFormId = ((BillView) this.getView()).getFormId();//单据标识 + if(company!=null){ + //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 + DynamicObject companyObj = (DynamicObject)company; + Long companyId = companyObj.getLong("id"); + if(OrgCheckUtils.isKS(companyId)){ + //仅针对矿山下组织下的逻辑 + 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")); + String typeKey = "20"; //差旅报销单 + if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单 + typeKey = "30"; //差旅报销单 + }else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单 + typeKey = "40"; //差旅报销单 + }else if("er_prepaybill".equals(billFormId)){ //预付单 + typeKey = "50"; //差旅报销单 + } + QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单 + //分录过滤 + //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 + //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 + DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype.number", new QFilter[]{filter,biztypefilter}); + List 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); + ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + showParameter.getListFilterParameter().getQFilters().add(qFilter); + }else{ + this.getView().showErrorNotification("请选择费用项目!"); + beforeF7SelectEvent.setCancel(true); + } + + } + + } + } + } + + } + + + public void propertyChanged(PropertyChangedArgs e) { + String name = e.getProperty().getName(); + ChangeData changeData = e.getChangeSet()[0]; + String billFormId = ((BillView) this.getView()).getFormId();//单据标识 + Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司) + if(company!=null){ + //String yzCompanyNumber ="10006475"; //兖州中材建设有限公司 + DynamicObject companyObj = (DynamicObject)company; + Long companyId = companyObj.getLong("id"); + if(OrgCheckUtils.isKS(companyId)){ + //仅针对矿山下组织下的逻辑 + if(StringUtils.equals(name, "expenseitem")){ //费用项目发生改变时,清空科目分类 + int rowIndex = changeData.getRowIndex(); + DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity"); + if(dynamicObjectCollection!=null){ + DynamicObject zcgjExpenseitem = dynamicObjectCollection.get(rowIndex).getDynamicObject("expenseitem"); + QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee",QCP.equals,zcgjExpenseitem.getLong("id")); + String typeKey = "20"; //差旅报销单 + if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单 + typeKey = "30"; //差旅报销单 + }else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单 + typeKey = "40"; //差旅报销单 + }else if("er_prepaybill".equals(billFormId)){ //预付单 + typeKey = "50"; //差旅报销单 + } + QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单 + //分录过滤 + //使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据 + //使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据 + DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter,biztypefilter}); + if(accountfeeEntries!=null && accountfeeEntries.size()==1){ + long id = accountfeeEntries.get(0).getLong("zcgj_entryentity.zcgj_accounttype"); + this.getModel().setValue("zcgj_accounttype",id,rowIndex); + }else{ + this.getModel().setValue("zcgj_accounttype",null,rowIndex); + } + } + } + } + } + } +}