Эх сурвалжийг харах

商旅对账单:
1.补助未涵盖补助时间范围逻辑校验及处理

lisheng 3 долоо хоног өмнө
parent
commit
08f34ece3a

+ 4 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/BusTravelCheckBillConstant.java

@@ -128,7 +128,11 @@ public interface BusTravelCheckBillConstant extends BillConstant {
         String NCKD_BZ_SUMDAYS = "nckd_bz_sumdays"; // 出差天数合计
         String NCKD_BZ_CHECKAMT = "nckd_bz_checkamt"; // 核定金额
         String NCKD_BZ_DESCRIBE = "nckd_bz_describe"; // 部门反馈
+        String NCKD_BZ_TRAVELDAYS = "nckd_bz_traveldays"; // 出差天数
+
         String NCKD_BZ_SUPDAYS = "nckd_bz_supdays"; // 补助未涵盖天数
+        String NCKD_BZ_AMOUNT = "nckd_bz_amount"; // 补助金额
+
         String NCKD_BZ_ADJAMOUNT = "nckd_bz_adjamount"; // 补助调整金额
         String NCKD_BZ_FINANDRAFT = "nckd_bz_finandraft"; // 财务对账底稿
         String NCKD_BZ_PAYERBANK = "nckd_bz_payerbank"; // 银行账号

+ 11 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/util/CommonUtils.java

@@ -234,4 +234,15 @@ public class CommonUtils {
         }
         return workCalendar;
     }
+
+    public static BigDecimal add(BigDecimal... decimals) {
+        return decimals == null ? BigDecimal.ZERO : (BigDecimal)Arrays.stream(decimals).reduce((a, b) -> {
+            return nullToZero(a).add(nullToZero(b));
+        }).orElse(BigDecimal.ZERO);
+    }
+
+    public static BigDecimal nullToZero(BigDecimal decimal) {
+        return decimal == null ? BigDecimal.ZERO : decimal;
+    }
+
 }

+ 39 - 34
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillEdit.java

@@ -142,55 +142,53 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         Object newValue = e.getChangeSet()[0].getNewValue();
         DynamicObject entryRow = getModel().getEntryRowEntity(NCKD_BZ_SUPDATA.ENTITYID, rowIndex);
         // 出差申请单号
-        if(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL.equals(name)){
+        if (NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL.equals(name)) {
             tripReqBillChanged(oldValue, newValue, rowIndex);
         }
-        if(NCKD_BZ_SUPDATA.NCKD_SUPDAYS.equals( name) || BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SUAPMT.equals(name)){
+        // 财务核定出差天数
+        if (NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS.equals(name)) {
+            // 计算补助金额
+            Integer checkSupDay = (Integer) getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS);
+            BigDecimal bzAmount = CommonUtils.getBzAmount();
+            getModel().setValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT, bzAmount.multiply(new BigDecimal(checkSupDay)), rowIndex);
             updateBzEntryFromUnCoveredData(rowIndex);
         }
         //监听单据内设置字段的值改变,用于计算新的日期范围控件的最早可选日期
-
-//        if (NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE.equals(name)){
-//            Date startDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE);
-//            Date tripStartDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RSTARTDATE).getTime());
-//            if(startDate != null && tripStartDate != null && startDate.before(tripStartDate)){
-//                getView().showTipNotification("未涵盖日期范围不能早于行程开始时间。");
-//                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,oldValue);
-//                getView().updateView(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,rowIndex);
-//                return;
-//            }
-//        }
-//        if(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)){
-//            Date endDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE);
-//            Date tripEndDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RENDDATE).getTime());
-//            if(endDate != null && tripEndDate != null && endDate.after(tripEndDate)){
-//                getView().showTipNotification("未涵盖日期范围不能晚于行程结束时间。");
-//                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,oldValue);
-//                getView().updateView(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,rowIndex);
-//                return;
-//            }
-//        }
+        if (NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE.equals(name)){
+            Date startDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE);
+            Date tripStartDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RSTARTDATE).getTime());
+            if(startDate != null && tripStartDate != null && startDate.before(tripStartDate)){
+                getView().showTipNotification("未涵盖日期范围不能早于行程开始时间。");
+                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
+                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
+                return;
+            }
+        }
+        if(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)){
+            Date endDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE);
+            Date tripEndDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RENDDATE).getTime());
+            if(endDate != null && tripEndDate != null && endDate.after(tripEndDate)){
+                getView().showTipNotification("未涵盖日期范围不能晚于行程结束时间。");
+                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
+                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
+                return;
+            }
+        }
         if (NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE.equals(name) ||
-                NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)){
+                NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)) {
             Date startDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE);
             Date endDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE);
 
-            if (startDate != null && endDate != null){
+            if (startDate != null && endDate != null) {
                 DynamicObject applierCpmpany = entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.COMPANY);
                 int days = CommonUtils.getDaysByWorkCalandar(startDate, endDate, applierCpmpany);
                 getModel().setValue(NCKD_BZ_SUPDATA.NCKD_SUPDAYS, days, rowIndex);
                 getModel().setValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS, days, rowIndex);
-            }else{
+            } else {
                 getModel().setValue(NCKD_BZ_SUPDATA.NCKD_SUPDAYS, 0, rowIndex);
                 getModel().setValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS, 0, rowIndex);
             }
         }
-
-        if(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS.equals(name)){
-            Integer checkSupDay = (Integer) getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS);
-            BigDecimal bzAmount = CommonUtils.getBzAmount();
-            getModel().setValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT, bzAmount.multiply(new BigDecimal(checkSupDay)), rowIndex);
-        }
     }
     protected void tripReqBillChanged(Object oldValue , Object newValue, int rowIndex){
         if(oldValue != null){
@@ -209,10 +207,17 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         // 更新补助天数
         int updateRow = getApplierBzEntryRow(tripReqBill.getDynamicObject(TripReqBillConstant.APPLIER).getLong(TripReqBillConstant.ID));
         if(updateRow >= 0){
-            getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_SUPDAYS,rowIndex) , updateRow);
+            // 更新财务核定天数到补助未涵盖天数
+            getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS,rowIndex) , updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT,rowIndex)  , updateRow);
-        }
 
+            DynamicObject bzInfo = (DynamicObject)this.getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_INFO,updateRow);
+            //出差天数合计 = 出差天数 + 补助未涵盖天数
+            Integer sumDays = bzInfo.getInt(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELDAYS) + (Integer)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS,updateRow);
+            getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS, sumDays, updateRow);
+            BigDecimal sumAmount = CommonUtils.add(bzInfo.getBigDecimal(NCKD_BZ_ENTRY.NCKD_BZ_AMOUNT),(BigDecimal)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT,updateRow));
+            getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT, sumAmount, updateRow);
+        }
     }
 
     protected int getApplierBzEntryRow(Long applierId){

+ 1 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

@@ -105,7 +105,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         }
 
         List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] vehicleCheckBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_SL_CONFRMID, new QFilter("id", QCP.in, vehicleBillIdList).toArray());
+        DynamicObject[] vehicleCheckBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_YC_CONFRMID, new QFilter("id", QCP.in, vehicleBillIdList).toArray());
         for(DynamicObject vehicleCheckBill : vehicleCheckBillArray){
             vehicleCheckBill.set(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, confirmBillId);
         }