Просмотр исходного кода

发货单新增已开票金额

沈静伟 4 лет назад
Родитель
Сommit
d976e7401b

+ 38 - 1
src/apps/salogis/salogis.java

@@ -2,7 +2,9 @@ package salogis;
 
 import baseclass.PaoCust;
 import baseclass.tools.GetFieldsName;
+import baseclass.tools.Math;
 import openapi.base.SQLFactory;
+import openapi.base.data.Row;
 import openapi.base.data.Rows;
 import openapi.base.data.db.DBConnect;
 import p2.common.parse.S;
@@ -12,6 +14,8 @@ import p2.pao.PaoSetRemote;
 import p2.util.P2AppException;
 import p2.util.P2Exception;
 
+import java.util.HashMap;
+
 public class salogis extends PaoCust {
     public salogis(PaoSet arg0) {
         super(arg0);
@@ -181,9 +185,26 @@ public class salogis extends PaoCust {
     public void check(boolean ischeck) throws P2Exception {
         super.check(ischeck);
 
+        DBConnect dbConnect = new DBConnect();
+        Rows rows = dbConnect.runSqlQuery("select t.saorderdetailid,t.finvoiceamount-t.finvoiceamount2 as finvoiceamount  from (\n" +
+                "select t4.saorderdetailid,isnull(t4.finvoiceamount,0)as finvoiceamount,sum(isnull(t3.finvoiceamount,0))finvoiceamount2  from salogis t1\n" +
+                "inner join salogisdetail t2 on t1.salogisid=t2.fparentid\n" +
+                "inner join sainvoicedetail t3 on t2.fsourceid=t3.fparentid and t2.fsourceobject='SAINVOICE'\n" +
+                "inner join saorderdetail t4 on t3.fsourceid=t4.saorderdetailid\n" +
+                "where t1.salogisid='" + getUniqueIDValue() + "'\n" +
+                "group by t4.saorderdetailid,t4.finvoiceamount\n" +
+                ")t where t.finvoiceamount-t.finvoiceamount2>0");
+
+        HashMap<Long, Double> finvoiceamountmap = new HashMap();//可分配开票金额map
+        for (Row row : rows) {
+            finvoiceamountmap.put(row.getLong("saorderdetailid"), row.getDouble("finvoiceamount"));
+        }
+
         PaoSetRemote salogisdetailSet = getPaoSet("salogisdetail");
+
         int i = 0;
         while (salogisdetailSet.getPao(i) != null) {
+            PaoSetRemote sainvoicedetail = salogisdetailSet.getPao(i).getPaoSet("sainvoicedetail");
             PaoSetRemote sainvoiceSet = salogisdetailSet.getPao(i).getPaoSet("sainvoice");
             sainvoiceSet.getPao(0).setValue("fstatus", ischeck ? "关闭" : "复核", 11L);
             sainvoiceSet.getPao(0).setValue("closeby", ischeck ? getUserName() : "", 11L);
@@ -200,7 +221,7 @@ public class salogis extends PaoCust {
 
             //工具序列号状态变更
             String saordertype = sainvoiceSet.getPao(0).getPaoSet("saorder").getPao(0).getString("ftype");
-            PaoSetRemote sainvoicedetail = salogisdetailSet.getPao(i).getPaoSet("sainvoicedetail");
+
             int n = 0;
             while (sainvoicedetail.getPao(n) != null) {
                 PaoSetRemote salogis_toolscodeSet = sainvoicedetail.getPao(n).getPaoSet("salogis_toolscode");
@@ -218,6 +239,22 @@ public class salogis extends PaoCust {
                     ttoolscodePao.setValue("fagentnum", ischeck ? getString("fagentnum") : "", 11L);
                     m++;
                 }
+                if (ischeck) {
+                    double famount = sainvoicedetail.getPao(n).getDouble("famount");
+                    long saorderdetailid = sainvoicedetail.getPao(n).getLong("fsourceid");
+                    if (finvoiceamountmap.containsKey(saorderdetailid)) {
+                        if (famount > finvoiceamountmap.get(saorderdetailid)) {
+                            sainvoicedetail.getPao(n).setValue("finvoiceamount", finvoiceamountmap.get(saorderdetailid));
+                            finvoiceamountmap.remove(saorderdetailid);
+                        } else {
+                            sainvoicedetail.getPao(n).setValue("finvoiceamount", famount);
+                            finvoiceamountmap.put(saorderdetailid, Math.sub(finvoiceamountmap.get(saorderdetailid), famount));
+                        }
+                    }
+                    sainvoicedetail.getPao(n).setValue("finvoiceamount", 0, 11L);
+                } else {
+                    sainvoicedetail.getPao(n).setValue("finvoiceamount", 0, 11L);
+                }
                 n++;
             }
             i++;

+ 49 - 4
src/apps/tinvoiceapply/tinvoiceapply.java

@@ -143,15 +143,15 @@ public class tinvoiceapply extends PaoCust {
                     saorder.setValue("finvoicetaxnumber", getString("finvoicetaxnumber"), 11L);
                     saorder.setValue("finvoicename", getString("finvoicename"), 11L);
                     saorder.setValue("finvoiceaddress", getString("finvoiceaddress"), 11L);
-                }   
+                }
             }
             PaoSetRemote tagents = P2Server.getP2Server().getPaoSet("tagents", P2Server.getP2Server().getSystemUserInfo());
-            tagents.setWhere("tagents.FAGENTNUM='"+getString("FAGENTNUM")+"'");
+            tagents.setWhere("tagents.FAGENTNUM='" + getString("FAGENTNUM") + "'");
             tagents.reset();
             String fagentshortname = tagents.getPao(0).getString("FAGENTSHORTNAME");
-            sendEmail(getMailByHrGroup(getString("siteid") + "1010"), "开票申请", "开票申请单号:" + getString("FBILLNUM") + "已提交请处理,客户名称:" +fagentshortname+ ",提交人:" + getString("SUBMITBY") + ",备注:" + getString("FNOTES"));
+            sendEmail(getMailByHrGroup(getString("siteid") + "1010"), "开票申请", "开票申请单号:" + getString("FBILLNUM") + "已提交请处理,客户名称:" + fagentshortname + ",提交人:" + getString("SUBMITBY") + ",备注:" + getString("FNOTES"));
         }
-       
+
     }
 
     public void checkvalidate(boolean ischeck) throws P2Exception {
@@ -220,6 +220,29 @@ public class tinvoiceapply extends PaoCust {
                 PaoRemote saorderdetail = detailpao.getPaoSet("saorderdetail").getPao(0);
                 double finvoiceamount_order = saorderdetail.getDouble("finvoiceamount");//订单已开票金额
                 saorderdetail.setValue("finvoiceamount", Math.add(finvoiceamount_order, finvoiceamount_detail), 111L);
+
+                double sainvoiceamount = finvoiceamount_detail;
+                /**
+                 * 更新发货单已开票金额
+                 */
+                PaoSetRemote sainvoicedetailSet = saorderdetail.getPaoSet("sainvoicedetail");
+                sainvoicedetailSet.setOrderBy("sainvoicedetailid");
+                int n = 0;
+                while (sainvoicedetailSet.getPao(n) != null) {
+                    if (sainvoicedetailSet.getPao(n).getPaoSet("SAINVOICE").getPao(0).getString("").equals("关闭")) {
+                        double famount_sainvoice = sainvoicedetailSet.getPao(n).getDouble("famount");//发货金额
+                        double finvoiceamount_sainvoice = sainvoicedetailSet.getPao(n).getDouble("famount");//发货单已开票金额
+                        if (famount_sainvoice > finvoiceamount_sainvoice) {
+                            double fneedinvoiceamount_sainvoice = Math.sub(famount_sainvoice, finvoiceamount_sainvoice);//发货单应开票数
+                            if (fneedinvoiceamount_sainvoice > sainvoiceamount) {
+                                fneedinvoiceamount_sainvoice = sainvoiceamount;
+                            }
+                            sainvoicedetailSet.getPao(n).setValue("finvoiceamount", Math.add(finvoiceamount_sainvoice, fneedinvoiceamount_sainvoice), 11L);
+                            sainvoiceamount = Math.sub(sainvoiceamount, fneedinvoiceamount_sainvoice);
+                        }
+                    }
+                    n++;
+                }
                 i++;
             }
             //}
@@ -236,6 +259,28 @@ public class tinvoiceapply extends PaoCust {
                 PaoRemote saorderdetail = detailpao.getPaoSet("saorderdetail").getPao(0);
                 double finvoiceamount_order = saorderdetail.getDouble("finvoiceamount");//订单已开票金额
                 saorderdetail.setValue("finvoiceamount", Math.sub(finvoiceamount_order, finvoiceamount_detail), 111L);
+
+                double sainvoiceamount = finvoiceamount_detail;
+                /**
+                 * 更新发货单已开票金额
+                 */
+                PaoSetRemote sainvoicedetailSet = saorderdetail.getPaoSet("sainvoicedetail");
+                sainvoicedetailSet.setOrderBy("sainvoicedetailid");
+                int n = 0;
+                while (sainvoicedetailSet.getPao(n) != null) {
+                    if (sainvoicedetailSet.getPao(n).getPaoSet("SAINVOICE").getPao(0).getString("").equals("关闭")) {
+                        double finvoiceamount_sainvoice = sainvoicedetailSet.getPao(n).getDouble("famount");//发货单已开票金额
+                        if (finvoiceamount_sainvoice > 0) {//表示已开票
+                            double fneedinvoiceamount_sainvoice = finvoiceamount_sainvoice;//发货单应减开票金额
+                            if (fneedinvoiceamount_sainvoice > sainvoiceamount) {
+                                fneedinvoiceamount_sainvoice = sainvoiceamount;
+                            }
+                            sainvoicedetailSet.getPao(n).setValue("finvoiceamount", Math.sub(finvoiceamount_sainvoice, fneedinvoiceamount_sainvoice), 11L);
+                            sainvoiceamount = Math.sub(sainvoiceamount, fneedinvoiceamount_sainvoice);
+                        }
+                    }
+                    n++;
+                }
                 i++;
             }
             // }

+ 22 - 0
src/apps/tinvoicebill/tinvoicebill.java

@@ -163,6 +163,28 @@ public class tinvoicebill extends PaoCust {
                                 if (String.valueOf(saorderdetailSet.getPao(i).getUniqueIDValue()).equalsIgnoreCase(row.getString("saorderdetailid"))) {
                                     double foldinvoiceamount = saorderdetailSet.getPao(i).getDouble("finvoiceamount");
                                     saorderdetailSet.getPao(i).setValue("finvoiceamount", Math.add(foldinvoiceamount, row.getDouble("taxincludedamount")), 11L);
+
+                                    double sainvoiceamount = -row.getDouble("taxincludedamount");
+                                    /**
+                                     * 更新发货单已开票金额
+                                     */
+                                    PaoSetRemote sainvoicedetailSet = saorderdetailSet.getPao(i).getPaoSet("sainvoicedetail");
+                                    sainvoicedetailSet.setOrderBy("sainvoicedetailid");
+                                    int n = 0;
+                                    while (sainvoicedetailSet.getPao(n) != null) {
+                                        if (sainvoicedetailSet.getPao(n).getPaoSet("SAINVOICE").getPao(0).getString("").equals("关闭")) {
+                                            double finvoiceamount_sainvoice = sainvoicedetailSet.getPao(n).getDouble("famount");//发货单已开票金额
+                                            if (finvoiceamount_sainvoice > 0) {//表示已开票
+                                                double fneedinvoiceamount_sainvoice = finvoiceamount_sainvoice;//发货单应减开票金额
+                                                if (fneedinvoiceamount_sainvoice > sainvoiceamount) {
+                                                    fneedinvoiceamount_sainvoice = sainvoiceamount;
+                                                }
+                                                sainvoicedetailSet.getPao(n).setValue("finvoiceamount", baseclass.tools.Math.sub(finvoiceamount_sainvoice, fneedinvoiceamount_sainvoice), 11L);
+                                                sainvoiceamount = baseclass.tools.Math.sub(sainvoiceamount, fneedinvoiceamount_sainvoice);
+                                            }
+                                        }
+                                        n++;
+                                    }
                                 }
                             }
                             i++;