对公报销冲销计算更新

This commit is contained in:
zengweihai 2024-08-27 16:03:33 +08:00
parent 7222181761
commit 38efdbd6ad
1 changed files with 36 additions and 24 deletions

View File

@ -19,6 +19,7 @@ import java.math.BigDecimal;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 单据界面插件
@ -89,6 +90,10 @@ public class GenerateSKClickPlugln extends AbstractBillPlugIn implements Plugin
}
}
/**
*计算冲销后金额 = 报销金额费用明细 - 借款金额冲预付 ps:根据成本中心+费用项目匹配
* @param args
*/
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
@ -97,38 +102,45 @@ public class GenerateSKClickPlugln extends AbstractBillPlugIn implements Plugin
if ("save".equals(operateKey) || "submit".equals(operateKey)){
DynamicObject shkd_billtypefield = this.getModel().getDataEntity().getDynamicObject("shkd_billtypefield");
if (!"er_publicreimbursebill_BT_03".equals(shkd_billtypefield.getString("number"))){
DynamicObjectCollection writeoffmoney = this.getModel().getEntryEntity("writeoffmoney");
if (writeoffmoney.size() > 0){
DynamicObject dynamicObject = writeoffmoney.get(0);
BigDecimal accloanamount = dynamicObject.getBigDecimal("accloanamount");//获取冲销金额
if (accloanamount != null){
DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");
if (expenseentryentity.size() > 0){
DynamicObject dynamicObject1 = expenseentryentity.get(0);
BigDecimal expenseamount = dynamicObject1.getBigDecimal("expenseamount");//获取报销金额
if (expenseamount != null){
dynamicObject1.set("shkd_verification",expenseamount.subtract(accloanamount));
DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");//获取费用明细分录
for (DynamicObject expenseentry : expenseentryentity) {//费用明细分录遍历获取成本中心和费用项目匹配后计算对应的冲销后金额
DynamicObject std_entrycostcenter = expenseentry.getDynamicObject("std_entrycostcenter");//获取成本中心
DynamicObject expenseitem = expenseentry.getDynamicObject("expenseitem");//获取费用项目
BigDecimal expenseamount = expenseentry.getBigDecimal("expenseamount");//获取报销金额
if (std_entrycostcenter != null && expenseitem != null){//当费用项目和成本中心不为空时
long ex_centerId = std_entrycostcenter.getLong("id");//成本中心id
long ex_itemId = expenseitem.getLong("id");//费用项目id
boolean isSelf = true;//判断该明细是否不存在匹配预付
DynamicObjectCollection writeoffmoney = this.getModel().getEntryEntity("writeoffmoney");//获取冲借款分录
for (DynamicObject prepay : writeoffmoney) {//冲借款分录遍历
long wr_centerId = prepay.getDynamicObject("std_srcentrycostcenter").getLong("id");
long wr_itemId = prepay.getDynamicObject("sourceexpenseitem").getLong("id");
if (Objects.equals(wr_centerId,ex_centerId) && Objects.equals(wr_itemId,ex_itemId)){//当成本中心和费用项目一致时计算冲销后金额
BigDecimal loanamount = prepay.getBigDecimal("loanamount");//获取冲销金额
if (loanamount != null){
int i = loanamount.compareTo(expenseamount);
if (i > 0){//若预付明细的借款余额大于报销金额则冲销后金额为0
expenseentry.set("shkd_verification",BigDecimal.ZERO);
}else {//冲销后金额 = 报销金额 - 借款金额
BigDecimal subtract = expenseamount.subtract(loanamount);
expenseentry.set("shkd_verification",subtract);
}
}else {//若预付明细的借款余额为空则冲销后金额为费用明细报销金额本身
expenseentry.set("shkd_verification",expenseamount);
}
isSelf = false;//找到匹配预付
break;
}
}
if (isSelf){//找不到匹配预付则冲销后金额为费用明细报销金额本身
expenseentry.set("shkd_verification",expenseamount);
}
}
}
this.getView().updateView("expenseentryentity");
}
}
}
}else {
DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity");
if (expenseentryentity.size() > 0){
DynamicObject dynamicObject1 = expenseentryentity.get(0);
BigDecimal expenseamount = dynamicObject1.getBigDecimal("expenseamount");//获取报销金额
if (expenseamount != null){
dynamicObject1.set("shkd_verification",expenseamount);
this.getView().updateView("expenseentryentity");
}
}
}
}
}
}
@Override
public void click(EventObject evt) {