1.重写合同看板拉去合同结算数据逻辑

This commit is contained in:
zhangzhiguo 2025-06-19 09:15:17 +08:00
parent c342e7ca0a
commit 0aabbc73de
1 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,101 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.ec.basedata.common.enums.DirectionEnum;
import kd.ec.contract.common.enums.BillStatusEnum;
import kd.ec.contract.common.enums.PayDirectionEnum;
import kd.ec.contract.formplugin.DynamicContractViewUI;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class DynamicContractViewUIExt extends DynamicContractViewUI {
/**
* 重写合同看板拉去合同结算数据逻辑
* @param contractId
* @param payDirection
*/
@Override
protected void updateSettle(Long contractId, String payDirection) {
this.getModel().deleteEntryData("settleEntry");
String settleBillId;
String finalSettleBillId;
if (PayDirectionEnum.IN.getValue().equals(payDirection)) {
settleBillId = "ec_in_contract_settle";
finalSettleBillId = "ec_in_finalsettle";
} else {
settleBillId = "ec_out_contract_settle";
finalSettleBillId = "ec_out_finalsettle";
}
QFilter finalSettleFilter = new QFilter("billstatus", "=", BillStatusEnum.AUDIT.getValue());
finalSettleFilter.and("contract", "=", contractId);
DynamicObject[] finalSettles = BusinessDataServiceHelper.load(finalSettleBillId, "id", new QFilter[]{finalSettleFilter});
if (finalSettles != null && finalSettles.length > 0) {
int index = this.getModel().createNewEntryRow("settleEntry");
DynamicObject finalSettleBill = BusinessDataServiceHelper.loadSingle(finalSettles[0].getPkValue(), finalSettleBillId);
DynamicObjectCollection settleDetailEntries = finalSettleBill.getDynamicObjectCollection("settledetailentry");
BigDecimal thisSettleAmount = BigDecimal.ZERO;
BigDecimal thisSettleOfTax = BigDecimal.ZERO;
for(DynamicObject settleDetailEntry : settleDetailEntries) {
DynamicObject payItem = settleDetailEntry.getDynamicObject("payitem");
BigDecimal coe = BigDecimal.ONE;
if (payItem != null) {
String direction = payItem.getString("direction");
if (StringUtils.equals(direction, DirectionEnum.NON.getValue())) {
coe = BigDecimal.ZERO;
} else if (StringUtils.equals(direction, DirectionEnum.SUB.getValue())) {
coe = coe.negate();
}
}
BigDecimal finalSettleAmount = settleDetailEntry.getBigDecimal("payitemfinalsettleamt");
BigDecimal finalSettleOfTax = settleDetailEntry.getBigDecimal("payitemsettleoftax");
BigDecimal settleAmount = settleDetailEntry.getBigDecimal("payitemsettleamt");
BigDecimal settleOfTax = settleDetailEntry.getBigDecimal("itemsettleoftax");
thisSettleAmount = thisSettleAmount.add(finalSettleAmount.subtract(settleAmount).multiply(coe));
thisSettleOfTax = thisSettleOfTax.add(finalSettleOfTax.subtract(settleOfTax).multiply(coe));
}
this.getModel().setValue("settleperiod", ResManager.loadKDString("合同决算", "DynamicContractViewUI_21", "ec-contract-formplugin", new Object[0]), index);
this.getModel().setValue("settlenum", finalSettleBill.get("billno"), index);
this.getModel().setValue("settlename", finalSettleBill.get("name"), index);
this.getModel().setValue("settleamount", thisSettleAmount, index);
this.getModel().setValue("settletax", thisSettleOfTax.subtract(thisSettleAmount), index);
this.getModel().setValue("oftaxsettleamount", thisSettleOfTax, index);
this.getModel().setValue("settlecreator", finalSettleBill.get("creator"), index);
this.getModel().setValue("settlecreatdate", finalSettleBill.get("createtime"), index);
this.getModel().setValue("isfinalsettle", true, index);
}
QFilter filter = new QFilter("contract.id", "=", contractId);
List<String> billstatusList = new ArrayList<>();
billstatusList.add("C");
billstatusList.add("D");
filter.and(new QFilter("billstatus", QCP.in,billstatusList));
DynamicObject[] settleContractCols = BusinessDataServiceHelper.load(settleBillId, "period.number,billno,billname,settleamount,taxamount,settleoftaxamount,creator,createtime", new QFilter[]{filter});
for(int i = 0; i < settleContractCols.length; ++i) {
int index = this.getModel().createNewEntryRow("settleEntry");
DynamicObject settleInfo = settleContractCols[i];
this.getModel().setValue("settleperiod", settleInfo.get("period.number"), index);
this.getModel().setValue("settlenum", settleInfo.get("billno"), index);
this.getModel().setValue("settlename", settleInfo.get("billname"), index);
this.getModel().setValue("settleamount", settleInfo.get("settleamount"), index);
this.getModel().setValue("settletax", settleInfo.get("taxamount"), index);
this.getModel().setValue("oftaxsettleamount", settleInfo.get("settleoftaxamount"), index);
this.getModel().setValue("settlecreator", settleInfo.get("creator"), index);
this.getModel().setValue("settlecreatdate", settleInfo.get("createtime"), index);
}
}
}