ソースを参照

差旅报销单反写预付借款单

zhouger 8 ヶ月 前
コミット
59b8ffcf10

+ 4 - 34
src/main/java/fi/em/formPlugin/AmountEditPlugin.java

@@ -7,6 +7,7 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.datamodel.events.ChangeData;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.exception.KDBizException;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
@@ -38,9 +39,10 @@ public class AmountEditPlugin extends AbstractListPlugin implements Plugin,IErSe
         super.beforePropertyChanged(e);
         String name = e.getProperty().getName();
 
+
         if (nckd_unexporiusedamount.equals(name)||orientryamount.equals(name))
         {
-            DynamicObject data=this.getModel().getDataEntity();//获取单据模型
+
             //冲销金额总数
             BigDecimal orgiexpebalanceamount_sum = new BigDecimal("0");
             //费用合计
@@ -61,44 +63,12 @@ public class AmountEditPlugin extends AbstractListPlugin implements Plugin,IErSe
             {
                 //冲销金额
                 BigDecimal orgiexpebalanceamount=entryentity.getBigDecimal("nckd_unexporiusedamount");
+
                 //冲销金额累加计算
                 orgiexpebalanceamount_sum=orgiexpebalanceamount_sum.add(orgiexpebalanceamount);
             }
             //计算收款金额
             this.getModel().setValue("orireceiveamount",amountfy.subtract(orgiexpebalanceamount_sum),0);
-            //反写预付借款单未核销金额(借款余额)
-            //获取冲预付借款分录
-             if(!nckd_clearloanentry.isEmpty()&nckd_unexporiusedamount.equals(name))
-             {
-                 //获取分录改变行号
-                 int number=e.getChangeSet()[0].getRowIndex();
-                 //数据id
-                 Long id=nckd_clearloanentry.get(number).getLong("nckd_bigintfield");
-                 //冲销金额
-                 BigDecimal nckd_unexporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_unexporiusedamount");
-                 //借款余额
-                 BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_exporiusedamount");
-                 //获取改变行预付单借款编号
-                 String nckd_billno=nckd_clearloanentry.get(number).getString("nckd_billno");
-                 //根据行号查询预付借款单预付信息数据
-                 QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
-                 DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
-                         load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
-                 for (int i=0;i<nckd_orgamountaccount.length;i++) {
-                     DynamicObject dynamicObject = BusinessDataServiceHelper.
-                             loadSingle(nckd_orgamountaccount[i].getPkValue(), nckd_orgamountaccount[i].getDynamicObjectType().getName());
-                     //获取预付信息分录
-                     DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
-                     for (DynamicObject list:expenseentryentity) {
-                         Long listid=list.getLong("id");
-                         if (listid.equals(id)) {
-                             //未核销金额(借款余额)=借款余额-冲销金额
-                             list.set("nckd_settleamount_et",nckd_exporiusedamount.subtract(nckd_unexporiusedamount));
-                             SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
-                         }
-                     }
-                 }
-             }
         }
 
         //重新触发付现金额计算

+ 3 - 3
src/main/java/fi/em/formPlugin/ReimbursementFormPlugin.java

@@ -125,9 +125,9 @@ public class ReimbursementFormPlugin extends AbstractFormPlugin implements Plugi
                 DynamicObject expenseitem=entryentity.getDynamicObject("expenseitem");
                 //申请金额
                 BigDecimal expenseamount=entryentity.getBigDecimal("expenseamount");
-                //结算金额(借款余额)
-                BigDecimal exporiusedamount=entryentity.getBigDecimal("nckd_settleamount_et");
-                //未结算金额
+                //结算金额
+                BigDecimal exporiusedamount=entryentity.getBigDecimal("nckd_unsettleamount_et");
+                //未结算金额(借款余额)
                 BigDecimal orgiexpebalanceamount=entryentity.getBigDecimal("nckd_unsettleamount_et");
                 //备注
                 String remark=entryentity.getString("remark");

+ 0 - 21
src/main/java/fi/em/formPlugin/TripreimBurseEditPlugin.java

@@ -100,27 +100,6 @@ public class TripreimBurseEditPlugin extends AbstractListPlugin implements Plugi
                     this.getModel().setValue("nckd_remark",remark,rowIndex);//备注
                     this.getModel().setValue("nckd_bigintfield",id,rowIndex);//id
                     this.getModel().setValue("nckd_billno",loanbillno,rowIndex);
-
-                    //反写预付借款单
-                    QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, loanbillno);
-                    DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
-                            load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
-                    for (int j=0;j<nckd_orgamountaccount.length;j++) {
-                        DynamicObject dynamicObject = BusinessDataServiceHelper.
-                                loadSingle(nckd_orgamountaccount[i].getPkValue(), nckd_orgamountaccount[i].getDynamicObjectType().getName());
-                        //获取预付信息分录
-                        DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
-                        for (DynamicObject list:expenseentryentity) {
-                            Long listid=list.getLong("id");
-                            if (listid.equals(id)) {
-                                //借款余额-冲销金额
-                                list.set("nckd_settleamount_et",exporiusedamount.subtract(orgiexpebalanceamount));
-                                SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
-                            }
-                        }
-                    }
-
-
                 }
                 //刷新分录
                 this.getView().updateView("nckd_clearloanentry");

+ 87 - 0
src/main/java/fi/em/opplugin/AmountOpPlugin.java

@@ -0,0 +1,87 @@
+package fi.em.opplugin;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.exception.KDBizException;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+
+/**
+ * @author cjz
+ * @date 2024/8/19 16:07
+ * @description:提交前校验,冲销金额不能大于借款余额,反写预付借款单
+ */
+public class AmountOpPlugin extends AbstractOperationServicePlugIn {
+
+    private static String er_prepaybill="er_prepaybill";//预付报销单标识
+
+
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e){
+        //获取当前操作单据数组
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i=0;i< dynamicObjects.length;i++)
+        {
+            DynamicObject info = BusinessDataServiceHelper.
+                    loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            DynamicObjectCollection nckd_clearloanentry=info.getDynamicObjectCollection("nckd_clearloanentry");//获取冲预付借款分录
+
+            //获取冲销金额
+            for (int j=0;j< nckd_clearloanentry.size();j++)
+            {
+                //获取借款余额
+                BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_exporiusedamount");
+                //获取冲销金额
+                BigDecimal orgiexpebalanceamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_unexporiusedamount");
+                //冲销金额大于借款余额
+                if (orgiexpebalanceamount.compareTo(nckd_exporiusedamount)==1) {
+                    throw new KDBizException("第"+(j+1)+"行存在错误,冲销金额不能大于借款余额!");
+                }else {
+                    //反写字段到预付借款单
+                    //数据id
+                     Long id=nckd_clearloanentry.get(j).getLong("nckd_bigintfield");
+                    //获取行预付单借款编号
+                    String nckd_billno=nckd_clearloanentry.get(j).getString("nckd_billno");
+                    //根据行号查询预付借款单预付信息数据
+                    QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
+                    //获取预付单信息分录
+                    DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
+                         load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
+                    for (int c=0;c<nckd_orgamountaccount.length;c++)
+                    {
+                        DynamicObject dynamicObject=BusinessDataServiceHelper
+                                .loadSingle(nckd_orgamountaccount[c].getPkValue(),nckd_orgamountaccount[c].getDynamicObjectType().getName());
+                        //获取预付借款单预付信息分录
+                        DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
+                        for (DynamicObject list:expenseentryentity) {
+                            //id
+                            Long listid=list.getLong("id");
+                            //未核销金额
+                            BigDecimal orgamount=list.getBigDecimal("orgiexpebalanceamount");
+                            //未结算金额
+                            BigDecimal nckd_unsettleamount_et=list.getBigDecimal("nckd_unsettleamount_et");
+                            //结算金额
+                            BigDecimal nckd_settleamount_et=list.getBigDecimal("nckd_settleamount_et");
+                            if (listid.equals(id)) {
+                                //未核销金额-冲销金额
+                                list.set("orgiexpebalanceamount",orgamount.subtract(orgiexpebalanceamount));
+                                //未结算金额-冲销金额
+                                list.set("nckd_unsettleamount_et",nckd_unsettleamount_et.subtract(orgiexpebalanceamount));
+                                //已结算金额+冲销金额
+                                list.set("nckd_settleamount_et",nckd_settleamount_et.add(orgiexpebalanceamount));
+                                SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}