科目分类通用插件优化
This commit is contained in:
parent
6e210388a7
commit
85478571da
|
|
@ -21,7 +21,7 @@ import java.util.EventObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 费用报销单:费用项目过滤和科目属性赋值过滤逻辑
|
* 费用报销单:费用项目过滤和科目属性赋值过滤逻辑(废弃
|
||||||
*/
|
*/
|
||||||
public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
|
public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
|
||||||
|
|
||||||
|
|
@ -50,8 +50,10 @@ public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements P
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ChangeData changeData = e.getChangeSet()[0];
|
ChangeData changeData = e.getChangeSet()[0];
|
||||||
DynamicObject expenseItem = (DynamicObject) changeData.getNewValue();//费用项目新值
|
|
||||||
int rowIndex = changeData.getRowIndex();//所选行
|
int rowIndex = changeData.getRowIndex();//所选行
|
||||||
|
DynamicObjectCollection expenseEntryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录
|
||||||
|
if (expenseEntryEntityCollection != null) {
|
||||||
|
DynamicObject expenseItem = expenseEntryEntityCollection.get(rowIndex).getDynamicObject("expenseitem");
|
||||||
if (expenseItem == null) {
|
if (expenseItem == null) {
|
||||||
this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
|
this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
|
||||||
return;
|
return;
|
||||||
|
|
@ -144,6 +146,7 @@ public class DailyReimburseAccountPlugin extends AbstractBillPlugIn implements P
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
|
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import kd.bos.list.ListShowParameter;
|
||||||
import kd.bos.mvc.bill.BillView;
|
import kd.bos.mvc.bill.BillView;
|
||||||
import kd.bos.orm.query.QCP;
|
import kd.bos.orm.query.QCP;
|
||||||
import kd.bos.orm.query.QFilter;
|
import kd.bos.orm.query.QFilter;
|
||||||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
import kd.bos.servicehelper.QueryServiceHelper;
|
import kd.bos.servicehelper.QueryServiceHelper;
|
||||||
import kd.sdk.plugin.Plugin;
|
import kd.sdk.plugin.Plugin;
|
||||||
import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils;
|
import zcgj.zcdev.zcdev.fs.utils.OrgCheckUtils;
|
||||||
|
|
@ -42,15 +43,13 @@ public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implemen
|
||||||
Long companyId = companyObj.getLong("id");
|
Long companyId = companyObj.getLong("id");
|
||||||
if (OrgCheckUtils.isKS(companyId)) {
|
if (OrgCheckUtils.isKS(companyId)) {
|
||||||
//仅针对矿山下组织下的逻辑
|
//仅针对矿山下组织下的逻辑
|
||||||
BasedataEdit accounttype = this.getControl("zcgj_accounttype"); //科目分类
|
BasedataEdit accountType = this.getControl("zcgj_accounttype"); //科目属性
|
||||||
if(accounttype != null) {
|
if (accountType != null) {
|
||||||
accounttype.addBeforeF7SelectListener(this);
|
accountType.addBeforeF7SelectListener(this);
|
||||||
}
|
}
|
||||||
|
BasedataEdit expenseItem = this.getControl("expenseitem"); //费用项目
|
||||||
//仅针对矿山下组织下的逻辑
|
if (expenseItem != null) {
|
||||||
BasedataEdit expenseitem = this.getControl("expenseitem"); //科目分类
|
expenseItem.addBeforeF7SelectListener(this);
|
||||||
if(expenseitem != null) {
|
|
||||||
expenseitem.addBeforeF7SelectListener(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -108,85 +107,150 @@ public class ReimbursementAccountTypePlugin extends AbstractBillPlugIn implemen
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if("expenseitem".equals(name)){//费用项目增加过滤
|
} else if ("expenseitem".equals(name)) {
|
||||||
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"; //差旅报销单
|
String typeKey = "20"; //差旅报销单
|
||||||
if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单
|
if ("er_dailyreimbursebill".equals(billFormId)) {
|
||||||
typeKey = "30"; //差旅报销单
|
typeKey = "30";//费用报销单
|
||||||
}else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单
|
} else if ("er_publicreimbursebill".equals(billFormId)) {
|
||||||
typeKey = "40"; //差旅报销单
|
typeKey = "40"; //对公报销单
|
||||||
}else if("er_prepaybill".equals(billFormId)){ //预付单
|
} else if ("er_prepaybill".equals(billFormId)) {
|
||||||
typeKey = "50"; //差旅报销单
|
typeKey = "50"; //预付单
|
||||||
}
|
}
|
||||||
QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单
|
QFilter bizTypeFilter = new QFilter("zcgj_biztype", QCP.equals, typeKey); //过滤业务单据为支出财务确认单
|
||||||
//分录过滤
|
DynamicObject zcgj_accountFee = BusinessDataServiceHelper.loadSingle("zcgj_accountfee",
|
||||||
//使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据
|
"zcgj_entryentity,zcgj_entryentity.zcgj_fee", bizTypeFilter.toArray());//费用与科目分类表
|
||||||
//使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据
|
List<String> feeNumbers = new ArrayList<>();
|
||||||
DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype.number," +
|
if (zcgj_accountFee != null) {
|
||||||
"zcgj_entryentity.zcgj_fee.number", new QFilter[]{biztypefilter});
|
DynamicObjectCollection entryEntityCollection = zcgj_accountFee.getDynamicObjectCollection("zcgj_entryentity");//分录
|
||||||
List<String> numbers = new ArrayList<>();
|
for (DynamicObject entryEntity : entryEntityCollection) {
|
||||||
if(accountfeeEntries!=null){
|
DynamicObject fee = entryEntity.getDynamicObject("zcgj_fee");//费用项目
|
||||||
for (DynamicObject dynamicObject : accountfeeEntries) {
|
String feeNumber = fee.getString("number");
|
||||||
String zcgjFeeNumber = dynamicObject.getString("zcgj_entryentity.zcgj_fee.number");
|
feeNumbers.add(feeNumber);
|
||||||
if(zcgjFeeNumber!=null){
|
}
|
||||||
numbers.add(zcgjFeeNumber);
|
}
|
||||||
|
QFilter qFilter = new QFilter("number", QCP.in, feeNumbers);
|
||||||
|
ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
|
||||||
|
formShowParameter.getListFilterParameter().getQFilters().add(qFilter);
|
||||||
|
formShowParameter.getTreeFilterParameter().getQFilters().add(qFilter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QFilter qFilter = new QFilter("number", QCP.in, numbers);
|
|
||||||
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
|
|
||||||
showParameter.getListFilterParameter().getQFilters().add(qFilter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void propertyChanged(PropertyChangedArgs e) {
|
public void propertyChanged(PropertyChangedArgs e) {
|
||||||
String name = e.getProperty().getName();
|
String name = e.getProperty().getName();
|
||||||
ChangeData changeData = e.getChangeSet()[0];
|
if (StringUtils.equals(name, "expenseitem")) {
|
||||||
|
//费用项目
|
||||||
String billFormId = ((BillView) this.getView()).getFormId();//单据标识
|
String billFormId = ((BillView) this.getView()).getFormId();//单据标识
|
||||||
Object company = this.getModel().getValue("costcompany");//核算组织(费用承担公司)
|
DynamicObject costCompany = (DynamicObject) this.getModel().getValue("costcompany");//费用承担公司
|
||||||
if(company!=null){
|
long costCompanyId = costCompany.getLong("id");//费用承担公司id
|
||||||
//String yzCompanyNumber ="10006475"; //兖州中材建设有限公司
|
if (!OrgCheckUtils.isKS(costCompanyId)) {
|
||||||
DynamicObject companyObj = (DynamicObject)company;
|
//不是矿山不进入下面逻辑
|
||||||
Long companyId = companyObj.getLong("id");
|
return;
|
||||||
if(OrgCheckUtils.isKS(companyId)){
|
}
|
||||||
//仅针对矿山下组织下的逻辑
|
ChangeData changeData = e.getChangeSet()[0];
|
||||||
if(StringUtils.equals(name, "expenseitem")){ //费用项目发生改变时,清空科目分类
|
int rowIndex = changeData.getRowIndex();//所选行
|
||||||
int rowIndex = changeData.getRowIndex();
|
DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");//分录
|
||||||
DynamicObjectCollection dynamicObjectCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("expenseentryentity");
|
if (entryEntityCollection != null) {
|
||||||
if(dynamicObjectCollection!=null){
|
DynamicObject expenseItem = entryEntityCollection.get(rowIndex).getDynamicObject("expenseitem");
|
||||||
DynamicObject zcgjExpenseitem = dynamicObjectCollection.get(rowIndex).getDynamicObject("expenseitem");
|
if (expenseItem == null) {
|
||||||
QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee",QCP.equals,zcgjExpenseitem.getLong("id"));
|
this.getModel().setValue("zcgj_accounttype", null, rowIndex);//科目属性
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
long expenseItemId = expenseItem.getLong("id");//费用项目id
|
||||||
|
|
||||||
String typeKey = "20"; //差旅报销单
|
String typeKey = "20"; //差旅报销单
|
||||||
if("er_dailyreimbursebill".equals(billFormId)){ //费用报销单
|
if ("er_dailyreimbursebill".equals(billFormId)) {
|
||||||
typeKey = "30"; //差旅报销单
|
typeKey = "30";//费用报销单
|
||||||
}else if("er_publicreimbursebill".equals(billFormId)){ //对公报销单
|
} else if ("er_publicreimbursebill".equals(billFormId)) {
|
||||||
typeKey = "40"; //差旅报销单
|
typeKey = "40"; //对公报销单
|
||||||
}else if("er_prepaybill".equals(billFormId)){ //预付单
|
} else if ("er_prepaybill".equals(billFormId)) {
|
||||||
typeKey = "50"; //差旅报销单
|
typeKey = "50"; //预付单
|
||||||
}
|
}
|
||||||
QFilter biztypefilter = new QFilter("zcgj_biztype",QCP.equals,typeKey); //过滤业务单据为支出财务确认单
|
QFilter filter = new QFilter("zcgj_entryentity.zcgj_fee", QCP.equals, expenseItemId).and("zcgj_biztype", QCP.equals, typeKey);
|
||||||
//分录过滤
|
DynamicObjectCollection AccountFeeCollection = QueryServiceHelper.query("zcgj_accountfee",
|
||||||
//使用BusinessDataServiceHelper.load查出来的数据,返回的是符合条件的整单,即使只有分录中的某一行符合条件,也会返回整张单包括其他分录行的数据
|
"zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter});//费用与科目分类
|
||||||
//使用 QueryServiceHelper.query查出来的数据只会包含符合条件的分录行,不含其他行数据
|
|
||||||
DynamicObjectCollection accountfeeEntries = QueryServiceHelper.query("zcgj_accountfee", "zcgj_entryentity.zcgj_accounttype", new QFilter[]{filter,biztypefilter});
|
if (AccountFeeCollection != null && AccountFeeCollection.size() == 1) {
|
||||||
if(accountfeeEntries!=null && accountfeeEntries.size()==1){
|
//费用与科目分类中费用项目与科目分类为一对一的关系,直接获取科目分类赋值
|
||||||
long id = accountfeeEntries.get(0).getLong("zcgj_entryentity.zcgj_accounttype");
|
long id = AccountFeeCollection.get(0).getLong("zcgj_entryentity.zcgj_accounttype");
|
||||||
this.getModel().setValue("zcgj_accounttype",id,rowIndex);
|
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_orgTypCollection = QueryServiceHelper.query("wf_orgtype",
|
||||||
|
"number", new QFilter[]{filter3});//组织分类
|
||||||
|
|
||||||
|
if (wf_orgTypCollection != null && wf_orgTypCollection.size() > 0) {
|
||||||
|
List<String> numbers = new ArrayList<>();
|
||||||
|
for (DynamicObject wf_orgTyp : wf_orgTypCollection) {
|
||||||
|
String number = wf_orgTyp.getString("number");
|
||||||
|
numbers.add(number);
|
||||||
|
}
|
||||||
|
DynamicObject orgCateGoryConfig = BusinessDataServiceHelper.loadSingle("zcgj_orgcategoryconfig",
|
||||||
|
new QFilter("number", QCP.in, numbers).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 {
|
} else {
|
||||||
this.getModel().setValue("zcgj_accounttype",null,rowIndex);
|
//组织分类配置表中未查询到对应数据,说明组织分类中编码有所改变,需维护对应的组织分类配置表
|
||||||
}
|
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);//科目属性
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue