diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialOutCostMustInputEditPluginExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialOutCostMustInputEditPluginExt.java new file mode 100644 index 0000000..ae4e24d --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialOutCostMustInputEditPluginExt.java @@ -0,0 +1,195 @@ +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.PropertyChangedArgs; +import kd.bos.entity.property.BasedataProp; +import kd.bos.form.field.BasedataEdit; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.ec.basedata.common.enums.CostControlModelEnum; +import kd.ec.basedata.common.enums.StatusEnum; +import kd.ec.basedata.common.utils.EcProjectHelper; +import kd.ec.material.formplugin.MaterialOutCostMustInputEditPlugin; + +import java.math.BigDecimal; +import java.util.EventObject; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class MaterialOutCostMustInputEditPluginExt extends AbstractFormPlugin { + + private static final List cbsKeyList = (List) Stream.of("procbs", "cbs").collect(Collectors.toList()); + private static final List caKeyList = (List)Stream.of("ca", "costaccount").collect(Collectors.toList()); + private static final List boqKeyList = (List)Stream.of("proboq", "boq").collect(Collectors.toList()); + + public void afterBindData(EventObject e) { + //因次方法需要调用父级的逻辑,所以需要重写当前插件 + super.afterBindData(e); + this.controlCostMustInput(); + DynamicObject transtype = (DynamicObject)this.getModel().getValue("transtype"); + boolean impactcost = transtype == null ? false : (Boolean)transtype.get("impactcost"); + String billStatus = (String)this.getModel().getValue("billstatus"); + if (impactcost && StatusEnum.Checked.getValue().equalsIgnoreCase(billStatus)) { + this.getView().setVisible(true, new String[]{"splitamount", "iscompleted"}); + } else { + this.getView().setVisible(false, new String[]{"splitamount", "iscompleted"}); + } + + } + + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String name = e.getProperty().getName(); + if (!StringUtils.equals("project", name) && !StringUtils.equals("warehouse", name)) { + if (StringUtils.equals("transtype", name)) { + this.controlCostMustInput(); + this.showSplitAmount(); + } else if (StringUtils.equals("costtype", name)) { + this.controlCostMustInput(); + } else if (StringUtils.equals("amount", name)) { + this.onAmountChanged(e); + } + } else { + this.controlCostMustInput(); + } + + } + + private void onAmountChanged(PropertyChangedArgs e) { + BigDecimal amount = (BigDecimal)e.getChangeSet()[0].getNewValue(); + int rowIndex = e.getChangeSet()[0].getRowIndex(); + DynamicObject transType = this.getModel().getDataEntity().getDynamicObject("transtype"); + if (transType != null) { + boolean impactcost = transType.getBoolean("impactcost"); + if (impactcost) { + this.getModel().setValue("splitamount", amount, rowIndex); + } + + } + } + + private void showSplitAmount() { + DynamicObject transType = this.getModel().getDataEntity().getDynamicObject("transtype"); + if (transType != null) { + boolean impactcost = transType.getBoolean("impactcost"); + if (impactcost) { + int rowCount = this.getModel().getEntryRowCount("entryentity"); + + for(int i = 0; i < rowCount; ++i) { + BigDecimal amount = (BigDecimal)this.getModel().getValue("amount", i); + this.getModel().setValue("splitamount", amount, i); + } + } else { + int rowCount = this.getModel().getEntryRowCount("entryentity"); + + for(int i = 0; i < rowCount; ++i) { + this.getModel().setValue("splitamount", (Object)null, i); + } + } + + } + } + + private void controlCostMustInput() { + this.clearMustInpt(); + DynamicObject transType = this.getModel().getDataEntity().getDynamicObject("transtype"); + if (transType != null) { + boolean impactcost = transType.getBoolean("impactcost"); + if (impactcost) { + String costType = (String)this.getModel().getValue("costtype"); + if (!StringUtils.equals("b", costType)) { + DynamicObject project = this.getModel().getDataEntity().getDynamicObject("project"); + if (project != null) { + List modelList = EcProjectHelper.getCostControlModelList(project.getLong("id")); + BasedataEdit basedataEdit = null; + BasedataProp basedataProp = null; + + for(String string : modelList) { + if (StringUtils.equals(string, CostControlModelEnum.CBS.getValue())) { + /*for(String cbsKey : cbsKeyList) { //移除必录 + basedataEdit = (BasedataEdit)this.getControl(cbsKey); + basedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(cbsKey); + if (basedataEdit != null) { + basedataEdit.setMustInput(true); + } + + if (basedataProp != null) { + basedataProp.setMustInput(true); + } + }*/ + } else if (StringUtils.equals(string, CostControlModelEnum.CA.getValue())) { + for(String caKey : caKeyList) { + basedataEdit = (BasedataEdit)this.getControl(caKey); + basedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(caKey); + if (basedataEdit != null) { + basedataEdit.setMustInput(true); + } + + if (basedataProp != null) { + basedataProp.setMustInput(true); + } + } + } else if (StringUtils.equals(string, CostControlModelEnum.BOQ.getValue())) { + for(String boqKey : boqKeyList) { + basedataEdit = (BasedataEdit)this.getControl(boqKey); + basedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(boqKey); + if (basedataEdit != null) { + basedataEdit.setMustInput(true); + } + + if (basedataProp != null) { + basedataProp.setMustInput(true); + } + } + } + } + } + + } + } + } + } + + private void clearMustInpt() { + BasedataEdit dBasedataEdit = null; + BasedataProp dBasedataProp = null; + + for(String cbsKey : cbsKeyList) { + dBasedataEdit = (BasedataEdit)this.getControl(cbsKey); + if (dBasedataEdit != null) { + dBasedataEdit.setMustInput(false); + } + + dBasedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(cbsKey); + if (dBasedataProp != null) { + dBasedataProp.setMustInput(false); + } + } + + for(String boqKey : boqKeyList) { + dBasedataEdit = (BasedataEdit)this.getControl(boqKey); + if (dBasedataEdit != null) { + dBasedataEdit.setMustInput(false); + } + + dBasedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(boqKey); + if (dBasedataProp != null) { + dBasedataProp.setMustInput(false); + } + } + + for(String caKey : caKeyList) { + dBasedataEdit = (BasedataEdit)this.getControl(caKey); + if (dBasedataEdit != null) { + dBasedataEdit.setMustInput(false); + } + + dBasedataProp = (BasedataProp)this.getModel().getDataEntityType().findProperty(caKey); + if (dBasedataProp != null) { + dBasedataProp.setMustInput(false); + } + } + + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialoutbillProcbsCkOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialoutbillProcbsCkOp.java new file mode 100644 index 0000000..7ceb225 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialoutbillProcbsCkOp.java @@ -0,0 +1,65 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.validate.AbstractValidator; + +import java.util.HashSet; +import java.util.Set; + +/** + * 出库单生产成本工序分摊校验插件 + */ +public class MaterialoutbillProcbsCkOp extends AbstractOperationServicePlugIn { + + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("entryentity"); + e.getFieldKeys().add("entryentity.procbs"); + e.getFieldKeys().add("entryentity.zcgj_accounttype"); + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.getValidators().add(new ValidatorExt()); + } + + class ValidatorExt extends AbstractValidator { + @Override + public void validate() { + Set key = new HashSet(); + key.add("FL001"); + key.add("FL012"); + key.add("FL013"); + key.add("FL017"); + key.add("FL018"); + key.add("FL019"); + ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + + DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("entryentity"); + int i=0; + for (DynamicObject dynamicObject : dynamicObjectCollection) { + i++; + DynamicObject accounttype = dynamicObject.getDynamicObject("zcgj_accounttype"); + if(accounttype!=null){ + String number = accounttype.getString("number"); + if(key.contains(number)){ + DynamicObject procbs = dynamicObject.getDynamicObject("procbs"); + if(procbs==null){ + this.addFatalErrorMessage(extendedDataEntity, String.format("出库单明细第%d行,需要填写工序分摊!",i)); + } + } + } + } + } + } + } +}