diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractEeasurementBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractEeasurementBillPlugin.java index 6b5e29e..370f3b0 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractEeasurementBillPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/ContractEeasurementBillPlugin.java @@ -1,6 +1,7 @@ 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.entity.datamodel.events.ChangeData; @@ -46,6 +47,25 @@ public class ContractEeasurementBillPlugin extends ContractMeasureBillEditPlugin // } } + @Override + protected void doLockFieldWithPriceAdjustMode(PriceAdjustModeEnum mode) { + super.doLockFieldWithPriceAdjustMode(mode); + int entryRowCount = this.getModel().getEntryRowCount("listentry"); + Boolean adjustoftax = (Boolean)this.getModel().getValue("zcgj_hsjell"); + int i; + if (adjustoftax) { + for(i = 0; i < entryRowCount; ++i) { + this.getView().setEnable(false, i, new String[]{"curtaxprice", "currentprice"}); + this.getView().setEnable(true, i, new String[]{"thisoftaxmount","thisqty"}); + } + }else{ + for(i = 0; i < entryRowCount; ++i) { + this.getView().setEnable(true, i, new String[]{"curtaxprice", "currentprice"}); + this.getView().setEnable(false, i, new String[]{"thisoftaxmount"}); + } + } + } + @Override protected void doNewListEntry() { { @@ -134,57 +154,29 @@ public class ContractEeasurementBillPlugin extends ContractMeasureBillEditPlugin } else { this.onDateChanged(changeData, propName); } -// String name = e.getProperty().getName(); -// ChangeData changeData = e.getChangeSet()[0]; -// int rowIndex = changeData.getRowIndex(); -// int parentRowIndex = changeData.getParentRowIndex(); -// BigDecimal curtaxprice = BigDecimal.ZERO;//当前含税单价 -// BigDecimal currentprice = BigDecimal.ZERO;//当前单价 -// BigDecimal qty = BigDecimal.ZERO;//数量 -// BigDecimal taxrate = BigDecimal.ZERO;//税率 -//// if(name.equals("curtaxprice")||name.equals("currentprice")) { -//// if (parentRowIndex>=0&&rowIndex>=0){ -//// Object curtaxpriceobj = this.getModel().getValue("curtaxprice", rowIndex, parentRowIndex); -//// if (curtaxpriceobj != null) { -//// curtaxprice = (BigDecimal) curtaxpriceobj; -//// } -//// Object currentpriceobj = this.getModel().getValue("currentprice", rowIndex, parentRowIndex); -//// if (currentpriceobj != null) { -//// currentprice = (BigDecimal) currentpriceobj; -//// ; -//// } -//// Object totalqtyibj = this.getModel().getValue("totalqty", rowIndex, parentRowIndex); -//// if (totalqtyibj != null) { -//// qty = (BigDecimal) totalqtyibj; -//// } -//// Object entrytaxrateobj = this.getModel().getValue("entrytaxrate", rowIndex, parentRowIndex); -//// if (entrytaxrateobj != null) { -//// BigDecimal entrytaxrate = (BigDecimal) entrytaxrateobj; -//// taxrate = entrytaxrate.divide(new BigDecimal(100)).add(new BigDecimal(1)); -//// } -//// if (name.equals("curtaxprice") && curtaxprice.compareTo(new BigDecimal(0))>0) { -//// BigDecimal divide = curtaxprice.divide(taxrate,6, RoundingMode.HALF_UP);//当前单价 -//// BigDecimal multiply = divide.multiply(qty);//当前金额 -//// BigDecimal multiply1 = curtaxprice.multiply(qty);//当前价税合计 -//// BigDecimal subtract = multiply1.subtract(multiply);//当前税额 -////// this.getModel().getDataEntity().set("currentprice",divide, rowIndex, parentRowIndex); -//// this.getModel().setValue("currentprice",divide, rowIndex, parentRowIndex);//当前单价 -//// this.getModel().setValue("currentamt", multiply,rowIndex, parentRowIndex);//当前金额 -//// this.getModel().setValue("currenttaxamt", subtract,rowIndex, parentRowIndex);//当前税额 -//// this.getModel().setValue("currentoftax", multiply1,rowIndex, parentRowIndex);//当前价税合计 -//// } else if (name.equals("currentprice")&¤tprice.compareTo(new BigDecimal(0))>0) { -//// BigDecimal divide = currentprice.multiply(taxrate);//当前含税单价 -//// BigDecimal multiply = currentprice.multiply(qty);//当前金额 -//// BigDecimal multiply1 = divide.multiply(qty);//当前价税合计 -//// BigDecimal subtract = multiply1.subtract(multiply);//当前税额 -//// this.getModel().setValue("curtaxprice",divide, rowIndex, parentRowIndex);//当前含税单价 -//// this.getModel().setValue("currentamt", multiply,rowIndex, parentRowIndex);//当前金额 -//// this.getModel().setValue("currenttaxamt",multiply1, rowIndex, parentRowIndex);//当前税额 -//// this.getModel().setValue("currentoftax",subtract, rowIndex, parentRowIndex);//当前价税合计 -//// } -//// this.getView().updateView(); -//// } -//// -// } + int rowIndex = changeData.getRowIndex(); + int parentRowIndex = changeData.getParentRowIndex(); + if (StringUtils.equals(propName, "zcgj_hsjell")) { + doLockFieldWithPriceAdjustMode((PriceAdjustModeEnum)null); + } else if (StringUtils.equals(propName, "thisqty") || StringUtils.equals(propName, "thisoftaxmount")) { + BigDecimal thisqty = (BigDecimal)this.getModel().getValue("thisqty", rowIndex, parentRowIndex); + BigDecimal thisoftaxmount =(BigDecimal) this.getModel().getValue("thisoftaxmount", rowIndex, parentRowIndex); + BigDecimal totalqty =(BigDecimal) this.getModel().getValue("totalqty", rowIndex, parentRowIndex); + BigDecimal entrytaxrate =(BigDecimal) this.getModel().getValue("entrytaxrate", rowIndex, parentRowIndex); + BigDecimal tax = entrytaxrate.divide(new BigDecimal(100)).add(new BigDecimal(1)); + BigDecimal zero = new BigDecimal(0); + if (thisqty.compareTo(zero)>0 && thisoftaxmount.compareTo(zero)>0) { + BigDecimal curtaxprice = thisoftaxmount.divide(thisqty,6,BigDecimal.ROUND_HALF_UP); + BigDecimal currentprice = curtaxprice.divide(tax, 6, BigDecimal.ROUND_HALF_UP); + DynamicObjectCollection listmodelentry = this.getModel().getDataEntity().getDynamicObjectCollection("listmodelentry"); + DynamicObject listentry = listmodelentry.get(parentRowIndex).getDynamicObjectCollection("listentry").get(rowIndex); + listentry.set("curtaxprice",curtaxprice); + listentry.set("currentprice",currentprice); + listentry.set("currentamt",currentprice.multiply(totalqty)); + listentry.set("currenttaxamt",curtaxprice.multiply(totalqty).subtract(currentprice.multiply(totalqty))); + listentry.set("currentoftax",curtaxprice.multiply(totalqty)); + this.getView().updateView(); + } + } } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java index 7d61215..bc1b7a6 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java @@ -1,6 +1,7 @@ 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.entity.datamodel.events.ChangeData; @@ -10,6 +11,7 @@ import kd.bos.form.ShowFormHelper; import kd.bos.list.ListShowParameter; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.ec.contract.common.enums.PriceAdjustModeEnum; import kd.ec.contract.formplugin.InContractMeasureBillEditPlugin; import java.math.BigDecimal; import java.math.RoundingMode; @@ -42,6 +44,27 @@ public class InContractMeasurementBillEditPlugin extends InContractMeasureBillEd } + @Override + protected void doLockFieldWithPriceAdjustMode(PriceAdjustModeEnum mode) { + super.doLockFieldWithPriceAdjustMode(mode); + int entryRowCount = this.getModel().getEntryRowCount("listentry"); + Boolean adjustoftax = (Boolean)this.getModel().getValue("zcgj_hsjell"); + int i; + if (adjustoftax) { + for(i = 0; i < entryRowCount; ++i) { + this.getView().setEnable(false, i, new String[]{"curtaxprice", "currentprice"}); + this.getView().setEnable(true, i, new String[]{"thisoftaxmount","thisqty"}); + } + }else{ + for(i = 0; i < entryRowCount; ++i) { + this.getView().setEnable(true, i, new String[]{"curtaxprice", "currentprice"}); + this.getView().setEnable(false, i, new String[]{"thisoftaxmount"}); + } + } + + + } + @Override protected void doNewListEntry() { { @@ -149,58 +172,32 @@ public class InContractMeasurementBillEditPlugin extends InContractMeasureBillEd @Override public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); -// String name = e.getProperty().getName(); -// ChangeData changeData = e.getChangeSet()[0]; -// int rowIndex = changeData.getRowIndex(); -// int parentRowIndex = changeData.getParentRowIndex(); -// BigDecimal curtaxprice = BigDecimal.ZERO;//当前含税单价 -// BigDecimal currentprice = BigDecimal.ZERO;//当前单价 -// BigDecimal qty = BigDecimal.ZERO;//数量 -// BigDecimal taxrate = BigDecimal.ZERO;//税率 -// if(name.equals("curtaxprice")||name.equals("currentprice")) { -// if (parentRowIndex>=0&&rowIndex>=0){ -// Object curtaxpriceobj = this.getModel().getValue("curtaxprice", rowIndex, parentRowIndex); -// if (curtaxpriceobj != null) { -// curtaxprice = (BigDecimal) curtaxpriceobj; -// } -// Object currentpriceobj = this.getModel().getValue("currentprice", rowIndex, parentRowIndex); -// if (currentpriceobj != null) { -// currentprice = (BigDecimal) currentpriceobj; -// ; -// } -// Object totalqtyibj = this.getModel().getValue("totalqty", rowIndex, parentRowIndex); -// if (totalqtyibj != null) { -// qty = (BigDecimal) totalqtyibj; -// } -// Object entrytaxrateobj = this.getModel().getValue("entrytaxrate", rowIndex, parentRowIndex); -// if (entrytaxrateobj != null) { -// BigDecimal entrytaxrate = (BigDecimal) entrytaxrateobj; -// taxrate = entrytaxrate.divide(new BigDecimal(100)).add(new BigDecimal(1)); -// } -// if (name.equals("curtaxprice") && curtaxprice.compareTo(new BigDecimal(0))>0) { -// BigDecimal divide = curtaxprice.divide(taxrate,6,RoundingMode.HALF_UP);//当前单价 -// BigDecimal multiply = divide.multiply(qty);//当前金额 -// BigDecimal multiply1 = curtaxprice.multiply(qty);//当前价税合计 -// BigDecimal subtract = multiply1.subtract(multiply);//当前税额 -//// this.getModel().getDataEntity().set("currentprice",divide, rowIndex, parentRowIndex); -// this.getModel().setValue("currentprice",divide, rowIndex, parentRowIndex);//当前单价 -// this.getModel().setValue("currentamt", multiply,rowIndex, parentRowIndex);//当前金额 -// this.getModel().setValue("currenttaxamt", subtract,rowIndex, parentRowIndex);//当前税额 -// this.getModel().setValue("currentoftax", multiply1,rowIndex, parentRowIndex);//当前价税合计 -// } else if (name.equals("currentprice")&¤tprice.compareTo(new BigDecimal(0))>0) { -// BigDecimal divide = currentprice.multiply(taxrate);//当前含税单价 -// BigDecimal multiply = currentprice.multiply(qty);//当前金额 -// BigDecimal multiply1 = divide.multiply(qty);//当前价税合计 -// BigDecimal subtract = multiply1.subtract(multiply);//当前税额 -// this.getModel().setValue("curtaxprice",divide, rowIndex, parentRowIndex);//当前含税单价 -// this.getModel().setValue("currentamt", multiply,rowIndex, parentRowIndex);//当前金额 -// this.getModel().setValue("currenttaxamt",multiply1, rowIndex, parentRowIndex);//当前税额 -// this.getModel().setValue("currentoftax",subtract, rowIndex, parentRowIndex);//当前价税合计 -// } -// this.getView().updateView(); -// } -// -// } + String propName = e.getProperty().getName(); + ChangeData changeData = e.getChangeSet()[0]; + int rowIndex = changeData.getRowIndex(); + int parentRowIndex = changeData.getParentRowIndex(); + if (StringUtils.equals(propName, "zcgj_hsjell")) { + doLockFieldWithPriceAdjustMode((PriceAdjustModeEnum)null); + } else if (StringUtils.equals(propName, "thisqty") || StringUtils.equals(propName, "thisoftaxmount")) { + BigDecimal thisqty = (BigDecimal)this.getModel().getValue("thisqty", rowIndex, parentRowIndex); + BigDecimal thisoftaxmount =(BigDecimal) this.getModel().getValue("thisoftaxmount", rowIndex, parentRowIndex); + BigDecimal totalqty =(BigDecimal) this.getModel().getValue("totalqty", rowIndex, parentRowIndex); + BigDecimal entrytaxrate =(BigDecimal) this.getModel().getValue("entrytaxrate", rowIndex, parentRowIndex); + BigDecimal tax = entrytaxrate.divide(new BigDecimal(100)).add(new BigDecimal(1)); + BigDecimal zero = new BigDecimal(0); + if (thisqty.compareTo(zero)>0 && thisoftaxmount.compareTo(zero)>0) { + BigDecimal curtaxprice = thisoftaxmount.divide(thisqty,6,BigDecimal.ROUND_HALF_UP); + BigDecimal currentprice = curtaxprice.divide(tax, 6, BigDecimal.ROUND_HALF_UP); + DynamicObjectCollection listmodelentry = this.getModel().getDataEntity().getDynamicObjectCollection("listmodelentry"); + DynamicObject listentry = listmodelentry.get(parentRowIndex).getDynamicObjectCollection("listentry").get(rowIndex); + listentry.set("curtaxprice",curtaxprice); + listentry.set("currentprice",currentprice); + listentry.set("currentamt",currentprice.multiply(totalqty)); + listentry.set("currenttaxamt",curtaxprice.multiply(totalqty).subtract(currentprice.multiply(totalqty))); + listentry.set("currentoftax",curtaxprice.multiply(totalqty)); + this.getView().updateView(); + } + } } protected void updateAmount(ChangeData changeData) { diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java new file mode 100644 index 0000000..de09903 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java @@ -0,0 +1,27 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.ec.contract.opplugin.fund.PaymentApplyFundOp; +import kd.ec.contract.opplugin.fund.validator.PaymentMaxAmountValidator; +import kd.ec.contract.opplugin.fund.validator.PaymentTypeValidator; +import kd.ec.contract.opplugin.validator.ContractMeasureValidator; + +import java.util.List; + +public class PaymentApplyFundExtOp extends PaymentApplyFundOp { + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + List validators = e.getValidators(); + // 删除标品校验器 + validators.removeIf(validator -> validator instanceof PaymentMaxAmountValidator); + validators.removeIf(validator -> validator instanceof PaymentTypeValidator); + + + // 添加定制二开的校验器(位置放第一位,优先执行) +// validators.add(0, new ContractMeasurementValidator()); + + } +}