lc/lc123/cloud/app/plugin/utils/EntryFieldRefresher.java

107 lines
4.6 KiB
Java

package tqq9.lc123.cloud.app.plugin.utils;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.IDataModel;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class EntryFieldRefresher {
/**
* 处理组织和字段的工具类
*
* @param org 组织参数
* @param entityname 字段标识
* @param dynamicObject 基础资料
* @param model 单据实体
*/
public void updateDynamicObjectByOrg(String org, String entityname, DynamicObject dynamicObject, IDataModel model) {
DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
for (int i = 0; i < entries.size(); i++) {
DynamicObject entry = entries.get(i);
DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
if (StringUtils.equals(org, entryrecorg.getString("number"))) {
model.setValue(entityname, dynamicObject, i);
}
}
}
/**
* 处理组织和字段的工具类
*
* @param org 组织参数
* @param entityname 字段标识
* @param sum_entityname 单头金额
* @param model 单据实体
*/
public void sumEntrByOrg(String org, String entityname, String sum_entityname, IDataModel model) {
DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
BigDecimal sum =BigDecimal.ZERO;
for (int i = 0; i < entries.size(); i++) {
DynamicObject entry = entries.get(i);
DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
BigDecimal qty = entry.getBigDecimal(entityname);//分录字段值
if (StringUtils.equals(org, entryrecorg.getString("number"))&&qty!=null) {
sum = sum.add(qty);
}
model.setValue(sum_entityname,sum);
}
}
/**
* 处理组织和字段的工具类
*
* @param org 组织参数
* @param entityname 字段标识
* @param amount 金额
* @param model 单据实体
*/
public void updateAmountByOrg(String org, String entityname, BigDecimal amount, IDataModel model) {
if (amount.compareTo(BigDecimal.ZERO) > 0) {
DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
if (entries != null && entries.size() > 0) {
BigDecimal remainRefundAmt = amount;//拆分后剩余的金额
List<Integer> seqs = new ArrayList<>();
BigDecimal tqq9_totalamount = BigDecimal.ZERO;
for (int i = 0; i <= entries.size() - 1; i++) {
DynamicObject entry = entries.get(i);
DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
if (StringUtils.equals(org, entryrecorg.getString("number"))) {
BigDecimal amountandtax = entry.getBigDecimal("amountandtax");//价税合计
tqq9_totalamount = tqq9_totalamount.add(amountandtax);
if (amountandtax.compareTo(BigDecimal.ZERO) > 0) {
seqs.add(i);
}
}
}
for (int i = 0; i <= seqs.size() - 1; i++) {
int seq = seqs.get(i);
if (i == seqs.size() - 1) {
//如果是最后一行
model.setValue(entityname, remainRefundAmt, seq);//明细金额
} else {
//如果不是最后一行
BigDecimal amountandtax = (BigDecimal) model.getValue("amountandtax", seq);//价税合计
if (amountandtax.compareTo(BigDecimal.ZERO) == 0) {
model.setValue(entityname, BigDecimal.ZERO, seq);//明细金额
} else {
BigDecimal tqq9_disamount = amount.multiply(amountandtax).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例
model.setValue(entityname, tqq9_disamount, seq);//明细金额
remainRefundAmt = remainRefundAmt.subtract(tqq9_disamount);
}
}
}
}
}
}
}