支出合同结算 微调金额/税额

This commit is contained in:
程小伟 2025-05-22 17:48:55 +08:00
parent 60f6ae61b8
commit 3e9553704a
1 changed files with 116 additions and 0 deletions

View File

@ -1,6 +1,15 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.ec.basedata.common.enums.PayDirectionEnum;
import kd.ec.contract.formplugin.settle.ContractSettleCommonEditPlugin;
import kd.ec.contract.utils.SettleUpdateAmtUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 单据界面插件
@ -12,4 +21,111 @@ public class ContractSettleBillPlugin extends ContractSettleCommonEditPlugin{
protected void setDateEditMinAndMaxDate() {
// super.setDateEditMinAndMaxDate();
}
public void propertyChanged(PropertyChangedArgs e) {
String name = e.getProperty().getName();
ChangeData changeData = e.getChangeSet()[0];
if (StringUtils.equals(name, "contract")) {
DynamicObject contract = (DynamicObject)changeData.getNewValue();
this.clearUnitproject();
this.contractChanged(contract);
} else if (StringUtils.equals(name, "period")) {
this.periodChanged(changeData);
} else if (!StringUtils.equals(name, "begindate") && !StringUtils.equals(name, "enddate")) {
if (StringUtils.equals(name, "issettlebymatin")) {
this.isSettleByMaterialInChanged(changeData);
} else if (StringUtils.equals(name, "issettlebyreconc")) {
this.isSettleByReconciliationChanged(changeData);
} else if (StringUtils.equals(name, "oftaxamount")) {
this.ofTaxAmountChanged(changeData);
} else if (StringUtils.equals(name, "amount")) {
boolean checkbox= this.getModel().getDataEntity().getBoolean("zcgj_adjustmounttax");//获取微调金额
if(checkbox){//微调打开调用子类值改变方法
this.amountChanged(changeData);
}else{//没打开调用父类的
super.amountChanged(changeData);
}
} else if (StringUtils.equals(name, "taxamt")) {
boolean checkbox= this.getModel().getDataEntity().getBoolean("zcgj_adjustmounttax");//获取微调金额
if(checkbox){//微调打开调用子类值改变方法
this.taxamtChanged(changeData);
}
} else if (StringUtils.equals(name, "rate")) {
this.rateChanged(changeData);
} else if (StringUtils.equals("unitproject", name)) {
DynamicObject contract = (DynamicObject)this.getModel().getValue("contract");
this.contractChanged(contract);
}
} else {
this.setDateEditMinAndMaxDate();
}
}
private void taxamtChanged(ChangeData changeData) {
int rowIndex = changeData.getRowIndex();
BigDecimal taxamt = (BigDecimal)changeData.getNewValue();
BigDecimal oftaxamount = (BigDecimal) this.getModel().getValue("oftaxamount",rowIndex);
BigDecimal amount = oftaxamount.subtract(taxamt);
this.getModel().setValue("amount",amount,rowIndex);
}
protected void rateChanged(ChangeData changeData) {
int rowIndex = changeData.getRowIndex();
boolean isMultiRate = (Boolean)this.getModel().getValue("ismultirate");
BigDecimal ofTaxAmount = (BigDecimal)this.getModel().getValue("oftaxamount", rowIndex);
BigDecimal amount = (BigDecimal)this.getModel().getValue("amount", rowIndex);
BigDecimal taxRate = (BigDecimal)changeData.getNewValue();
String ignoreRateChanged = this.getPageCache().get("ignoreRateChanged");
if (ignoreRateChanged != null) {
this.getPageCache().remove("ignoreRateChanged");
} else {
if (isMultiRate) {
BigDecimal rate = BigDecimal.ONE.add(taxRate.divide(BigDecimal.valueOf(100L), 10, RoundingMode.HALF_UP));
if (ofTaxAmount.compareTo(BigDecimal.ZERO) != 0) {
amount = ofTaxAmount.divide(rate, 6, 4);
BigDecimal taxAmount = ofTaxAmount.subtract(amount);
this.getModel().setValue("taxamt", taxAmount, rowIndex);
this.getModel().setValue("amount", amount, rowIndex);
} else {
ofTaxAmount = amount.multiply(rate);
BigDecimal taxAmount = ofTaxAmount.subtract(amount);
this.getModel().setValue("taxamt", taxAmount, rowIndex);
this.getModel().setValue("oftaxamount", ofTaxAmount, rowIndex);
}
}
}
}
protected void ofTaxAmountChanged(ChangeData changeData) {
int rowIndex = changeData.getRowIndex();
if (this.isNotNonDirection(rowIndex)) {
BigDecimal ofTaxAmount = (BigDecimal)this.getModel().getValue("oftaxamount", rowIndex);
BigDecimal rate = (BigDecimal)this.getModel().getValue("rate", rowIndex);
BigDecimal amount = ofTaxAmount.divide(BigDecimal.ONE.add(rate.divide(BigDecimal.valueOf(100L), 10, RoundingMode.HALF_UP)), 10, 4);
BigDecimal taxAmount = ofTaxAmount.subtract(amount);
this.getModel().setValue("taxamt", taxAmount, rowIndex);
this.getModel().setValue("amount", amount, rowIndex);
this.checkNeedReComputeItem(rowIndex);
SettleUpdateAmtUtils.setItemEntrySumAmt(this.getView());
SettleUpdateAmtUtils.calAllTypeAmount(this.getModel());
}
}
protected void amountChanged(ChangeData changeData) {
int rowIndex = changeData.getRowIndex();
BigDecimal amount = (BigDecimal)changeData.getNewValue();
BigDecimal oftaxamount = (BigDecimal) this.getModel().getValue("oftaxamount",rowIndex);
BigDecimal taxamt = oftaxamount.subtract(amount);
this.getModel().setValue("taxamt",taxamt,rowIndex);
}
private void clearUnitproject() {
if (this.getPayDirection().equals(PayDirectionEnum.IN.getValue())) {
this.getModel().setValue("unitproject", (Object)null);
}
}
}