Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/validate/DailyReimBurseBillValidator.java
zhangtao 1 viikko sitten
vanhempi
säilyke
407f9fb3e6

+ 78 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/form/DailyApplyBillCusEditPlugin.java

@@ -0,0 +1,78 @@
+package nckd.xtpoc.fi.app.plugin.form;
+
+import kd.bos.bill.AbstractBillPlugIn;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.events.BizDataEventArgs;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+
+import java.util.EventObject;
+
+/**
+ * 费用申请单:nckd_er_dailyapplybil_ext
+ */
+public class DailyApplyBillCusEditPlugin extends AbstractBillPlugIn {
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+    }
+
+    @Override
+    public void createNewData(BizDataEventArgs e) {
+        super.createNewData(e);
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+        String propertyName = e.getProperty().getName();
+        ChangeData changeData = e.getChangeSet()[0];
+        int rowIndex = changeData.getRowIndex();
+        if ("expenseitem".equals(propertyName)) {
+            // 设置【供应商、车牌号】字段的显示
+            setSupplierVisibleByExpenseItem();
+            // 设置字段锁定和清空
+            Object newValue = changeData.getNewValue();
+            if (newValue != null && "FY00202".equals(((DynamicObject) newValue).getString("number"))) {
+                this.getView().setEnable(true, rowIndex, "nckd_supplier");
+                this.getView().setEnable(true, rowIndex, "nckd_plateno");
+            } else {
+                // 清空供应商和车牌号
+                this.getModel().setValue("nckd_supplier", null, rowIndex);
+                this.getModel().setValue("nckd_plateno", null, rowIndex);
+                // 锁定供应商和车牌号
+                this.getView().setEnable(false, rowIndex, "nckd_supplier");
+                this.getView().setEnable(false, rowIndex, "nckd_plateno");
+            }
+            e.getChangeSet();
+        }
+    }
+
+    /**
+     * 费用明细分录,根据【费用项目】控制【供应商、车牌号】字段的显示
+     * 费用项目 = FY00202,显示【供应商、车牌号】字段,而且必录
+     */
+    private void setSupplierVisibleByExpenseItem() {
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+        DynamicObjectCollection expenseEntryCols = dataEntity.getDynamicObjectCollection("expenseentryentity");
+        boolean isShowBookClass = false;
+        for (DynamicObject expenseEntry : expenseEntryCols) {
+            DynamicObject enpenseItem = expenseEntry.getDynamicObject("expenseitem");
+            if (enpenseItem != null && "FY00202".equals(enpenseItem.getString("number"))) {
+                isShowBookClass = true;
+                break;
+            }
+        }
+        this.getView().setVisible(isShowBookClass, "nckd_supplier");
+        this.getView().setVisible(isShowBookClass, "nckd_plateno");
+    }
+
+}

+ 28 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/form/DailyReimburseCusEditPlugin.java

@@ -9,6 +9,11 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+
 import java.util.EventObject;
 
 /**
@@ -44,6 +49,7 @@ public class DailyReimburseCusEditPlugin extends AbstractBillPlugIn {
 
         if("expenseitem".equals(propertyName)){
             setFeildVisibleByExpenseItem();
+            setSupplierVisibleByExpenseItem();
             setEntryAccountValue();
         }
     }
@@ -67,6 +73,28 @@ public class DailyReimburseCusEditPlugin extends AbstractBillPlugIn {
         this.getView().setVisible(isShowBookClass, "nckd_bookclass");
     }
 
+
+    /**
+     * 费用明细分录,根据【费用项目】控制【供应商、车牌号】字段的显示
+     * 费用项目 = FY00202,显示【供应商、车牌号】字段,而且必录
+     */
+    private void setSupplierVisibleByExpenseItem(){
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+        DynamicObjectCollection expenseEntryCols = dataEntity.getDynamicObjectCollection("expenseentryentity");
+        boolean isShowBookClass = false;
+        for(DynamicObject expenseEntry : expenseEntryCols){
+            DynamicObject enpenseItem = expenseEntry.getDynamicObject("expenseitem");
+            if( enpenseItem!= null && "FY00202".equals(enpenseItem.getString("number"))) {
+                isShowBookClass = true;
+                break;
+            }
+        }
+
+        this.getView().setVisible(isShowBookClass, "nckd_supplier");
+        this.getView().setVisible(isShowBookClass, "nckd_plateno");
+    }
+
+
     private void setEntryAccountValue(){
         //费用承担部门
         DynamicObject costDept = (DynamicObject) this.getModel().getValue("costdept");

+ 27 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/operate/DailyApplyBillOpPluginEx.java

@@ -0,0 +1,27 @@
+package nckd.xtpoc.fi.app.plugin.operate;
+
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
+import kd.sdk.plugin.Plugin;
+import nckd.xtpoc.fi.app.plugin.validate.DailyApplyBillValidator;
+
+/**
+ * 费用申请单,绑定【nckd_er_dailyapplybil_ext】的提交、审核操作
+ */
+public class DailyApplyBillOpPluginEx extends AbstractOperationServicePlugIn implements Plugin {
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+    }
+
+    /**
+     * 添加校验器
+     */
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+        e.addValidator(new DailyApplyBillValidator());
+    }
+}

+ 39 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/validate/DailyApplyBillValidator.java

@@ -0,0 +1,39 @@
+package nckd.xtpoc.fi.app.plugin.validate;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.validate.AbstractValidator;
+import org.apache.commons.lang3.StringUtils;
+
+
+/**
+ * 费用申请单校验器,提交校验
+ */
+public class DailyApplyBillValidator extends AbstractValidator {
+
+    /**
+     * 分录标识
+     */
+    private static final String BILL_ENTITY = "expenseentryentity";
+
+    @Override
+    public void validate() {
+        for (ExtendedDataEntity dataEntity : dataEntities) {
+            DynamicObject bill = dataEntity.getDataEntity();
+            DynamicObjectCollection dynamicObjectCollection = bill.getDynamicObjectCollection(BILL_ENTITY);
+            for (DynamicObject dynamicObject : dynamicObjectCollection) {
+                DynamicObject expenseitem = dynamicObject.getDynamicObject("expenseitem");
+                if (expenseitem != null && "FY00202".equals(expenseitem.getString("number"))) {
+                    DynamicObject nckdSupplier = dynamicObject.getDynamicObject("nckd_supplier");
+                    String nckdPlateno = dynamicObject.getString("nckd_plateno");
+                    if (nckdSupplier == null || StringUtils.isBlank(nckdPlateno)) {
+                        this.addErrorMessage(dataEntity, "费用项目为修理费时,供应商和车牌号必填");
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 52 - 1
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/validate/DailyReimBurseBillValidator.java

@@ -8,13 +8,15 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import org.apache.commons.lang3.ObjectUtils;
 
 import java.util.Calendar;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
+
 
 /**
  * Tyx 费用报销单+付款单校验器
@@ -33,6 +35,11 @@ public class DailyReimBurseBillValidator extends AbstractValidator {
                 String msg = "申请日期所在期间已关账,不允许" + this.getOperationName();
                 this.addErrorMessage(dataEntity, msg);
             }
+            String operateType = this.getOperateType();
+            if ("submit".equals(operateType) && !checkSupplier(bill)) {
+                String msg = "费用明细的供应商或车牌号与关联申请单不一致,不允许" + this.getOperationName();
+                this.addErrorMessage(dataEntity, msg);
+            }
 
             //判断申请单发生日期与本单发生日期是否一致
             checkDateDiff(dataEntity, bill);
@@ -137,4 +144,48 @@ public class DailyReimBurseBillValidator extends AbstractValidator {
 
         return QueryServiceHelper.exists(PERIODCONTROL_ENTITY, new QFilter[]{filter});
     }
+
+
+    /**
+     * 校验供应商和车牌号
+     * @param bill
+     * @return
+     */
+    public boolean checkSupplier(DynamicObject bill) {
+        // 费用明细
+        DynamicObjectCollection expenseentryentity = bill.getDynamicObjectCollection("expenseentryentity");
+        // 关联申请
+        DynamicObjectCollection writeoffapply = bill.getDynamicObjectCollection("writeoffapply");
+        List<String> plateNoList = new ArrayList<>();
+        List<Long> supplierList = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(writeoffapply)) {
+            List<String> billno = writeoffapply.stream().map(e -> e.getString("applybillno")).collect(Collectors.toList());
+            QFilter qFilter = new QFilter("billno", QCP.in, billno);
+            DynamicObjectCollection query = QueryServiceHelper.query("er_dailyapplybill", "expenseentryentity,expenseentryentity.nckd_supplier,expenseentryentity.nckd_plateno", qFilter.toArray());
+            if (ObjectUtils.isNotEmpty(query)) {
+                plateNoList = query.stream().map(e -> e.getString("expenseentryentity.nckd_plateno")).collect(Collectors.toList());
+                supplierList = query.stream().map(e -> e.getLong("expenseentryentity.nckd_supplier")).collect(Collectors.toList());
+            }
+        }
+
+        for (DynamicObject dynamicObject : expenseentryentity) {
+            DynamicObject expenseitem = dynamicObject.getDynamicObject("expenseitem");
+            if (expenseitem != null && "FY00202".equals(expenseitem.getString("number"))) {
+                if (ObjectUtils.isEmpty(writeoffapply)) {
+                    return false;
+                }
+                // 供应商
+                DynamicObject nckdSupplier = dynamicObject.getDynamicObject("nckd_supplier");
+                // 车牌号
+                String plateNo = dynamicObject.getString("nckd_plateno");
+                if (nckdSupplier != null && plateNo != null) {
+                    if (supplierList.contains(nckdSupplier.getLong("id")) && plateNoList.contains(plateNo)) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        }
+        return true;
+    }
 }