فهرست منبع

对公报销单、差旅报销单

wanghaiwu 2 هفته پیش
والد
کامیت
dcd55c9cd8

+ 65 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/form/PublicReimburseCusEditPlugin.java

@@ -0,0 +1,65 @@
+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.PropertyChangedArgs;
+import java.util.EventObject;
+
+/**
+ * 对公报销单:nckd_er_publicreimbur_ext
+ * @author wanghaiwu_kd
+ * @date 2025/11/10
+ */
+public class PublicReimburseCusEditPlugin extends AbstractBillPlugIn {
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+    }
+
+    @Override
+    public void createNewData(BizDataEventArgs e) {
+        super.createNewData(e);
+
+//        setFeildVisibleByExpenseItem();
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+
+        setFeildVisibleByExpenseItem();
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+
+        String propertyName = e.getProperty().getName();
+
+        if("expenseitem".equals(propertyName)){
+            setFeildVisibleByExpenseItem();
+        }
+    }
+
+    /**
+     * 费用明细分录,根据【费用项目】控制【电费】【电量】字段的显示
+     * 费用项目 = FY00802,显示【电费】【电量】字段,而且必录
+     */
+    private void setFeildVisibleByExpenseItem(){
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+        DynamicObjectCollection expenseEntryCols = dataEntity.getDynamicObjectCollection("expenseentryentity");
+        boolean isShowElectricityFeild = false;
+
+        for(DynamicObject expenseEntry : expenseEntryCols){
+            DynamicObject enpenseItem = expenseEntry.getDynamicObject("expenseitem");
+            if( enpenseItem!= null && "FY00802".equals(enpenseItem.getString("number"))) {
+                isShowElectricityFeild = true;
+                break;
+            }
+        }
+
+        this.getView().setVisible(isShowElectricityFeild, new String[]{"nckd_electricityfee", "nckd_electricityqty"});
+    }
+}

+ 6 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/form/TripReimburseBillCusEditPlugin.java

@@ -0,0 +1,6 @@
+package nckd.xtpoc.fi.app.plugin.form;
+
+import kd.bos.bill.AbstractBillPlugIn;
+
+public class TripReimburseBillCusEditPlugin extends AbstractBillPlugIn {
+}

+ 78 - 0
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/operate/PublicReimburseCusOpPlugin.java

@@ -0,0 +1,78 @@
+package nckd.xtpoc.fi.app.plugin.operate;
+
+import com.kingdee.util.StringUtils;
+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.validate.AbstractValidator;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 对公费用报销单
+ * @author wanghaiwu_kd
+ * @date 2025/11/10
+ */
+public class PublicReimburseCusOpPlugin extends AbstractOperationServicePlugIn {
+    private static final Log logger = LogFactory.getLog(PublicReimburseCusOpPlugin.class);
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+
+        e.addValidator(new AbstractValidator() {
+            @Override
+            public void validate() {
+                ExtendedDataEntity[] dataEntitys = this.getDataEntities();
+
+                List<String> billList = new ArrayList<>();
+                for (ExtendedDataEntity dataEntity : dataEntitys) {
+                    if(dataEntity == null){
+                        continue;
+                    }
+
+                    DynamicObject data = dataEntity.getDataEntity();
+
+                    DynamicObjectCollection expenseEntrys = data.getDynamicObjectCollection("expenseentryentity");
+
+                    int i = 0;
+                    for(DynamicObject expenseEntry : expenseEntrys){
+                        i++;
+                        String contractno = expenseEntry.getString("entrycontractno");
+
+                        if(StringUtils.isEmpty(contractno)){
+                            continue;
+                        }
+                        QFilter qFilter = new QFilter("contractcode", QCP.equals, contractno);
+
+                        DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle("er_contractbill", qFilter.toArray());
+
+                        if(contractInfo == null){
+                            this.addErrorMessage(dataEntity, "费用明细第" + i + "行:合同号(" + contractno + ")未匹配到合同台账");
+                            continue;
+                        }
+
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+                        Date happenDate = expenseEntry.getDate("happendate");
+                        Date startDate = contractInfo.getDate("startdate");
+                        Date endDate = contractInfo.getDate("endDate");
+
+                        if(happenDate.compareTo(startDate) < 0 || happenDate.compareTo(endDate) > 0){
+                            this.addErrorMessage(dataEntity, "费用明细第" + i + "行:发生日期(" + sdf.format(happenDate) + ")不在合同的开始日期(" + sdf.format(startDate) + ")截止日期(" + sdf.format(endDate) + ")之间");
+                        }
+                    }
+                }
+            }
+        });
+    }
+}

+ 1 - 1
code/fi/nckd-xtpoc-fi/src/main/java/nckd/xtpoc/fi/app/plugin/operate/TripReimburseBillCusOpPlugin.java

@@ -80,7 +80,7 @@ public class TripReimburseBillCusOpPlugin extends AbstractOperationServicePlugIn
                                     }).boxed().collect(Collectors.toList());
 
                                     //费用承担公司
-                                    DynamicObject travelcostcompany = entryEntity.getDynamicObject("travelcostcompany");
+                                    DynamicObject travelcostcompany = data.getDynamicObject("company");
 
                                     //er_reimbursesetting
                                     QFilter qFilter = new QFilter("user.id", QCP.in, userIdList);