zoukankan      html  css  js  c++  java
  • AR贷项通知单核销标准发票

    /* ===============================================
      *   PROGRAM NAME: process_request
      *
      *   DESCRIPTION:
      *      主程序
      *   HISTORY:
      *     1.00   2020-07-08  wang.chen   Creation
      *
      * ==============================================*/
      PROCEDURE Process_Request(p_Init_Msg_List       IN VARCHAR2
                               ,p_Commit              IN VARCHAR2
                               ,x_Return_Status       OUT VARCHAR2
                               ,x_Msg_Count           OUT NUMBER
                               ,x_Msg_Data            OUT VARCHAR2
                               ,p_Set_Of_Bks_Id       IN NUMBER
                               ,p_Org_Id              IN NUMBER
                               ,p_Customer_Id         IN NUMBER
                               ,p_Trx_Batch_Id        IN NUMBER
                               ,p_Customer_Trx_Number IN VARCHAR2
                               ,p_App_Date            IN VARCHAR2
                               ,p_App_Gl_Date         IN VARCHAR2
                               ,p_Trx_Type            IN VARCHAR2
                               ,p_Project_Flag        IN VARCHAR2
                               ,p_Project             IN VARCHAR2
                               ,p_Order_By_Type       IN VARCHAR2) IS
      
        CURSOR Cur_Cm IS
          SELECT Rct.Customer_Trx_Id
                ,Rct.Org_Id
                ,Rct.Trx_Number
                ,Rct.Trx_Date
                ,Ctt.Name                       Trx_Type_Name
                ,Ctt.Type
                ,Rac_Bill_Party.Party_Name
                ,Rac_Bill.Account_Number
                ,Rct.Attribute1                 Project_Number
                ,Aps.Acctd_Amount_Due_Remaining Amount
                ,Aps.Payment_Schedule_Id
            FROM Ra_Customer_Trx_All       Rct
                ,Ra_Customer_Trx_Lines_All Rctl
                ,Ra_Batches_All            Rb
                ,Ra_Cust_Trx_Types_All     Ctt
                ,Hz_Cust_Accounts          Rac_Bill
                ,Hz_Parties                Rac_Bill_Party
                ,Ar_Payment_Schedules      Aps
           WHERE 1 = 1
             AND Rct.Customer_Trx_Id = Rctl.Customer_Trx_Id
             AND Rctl.Line_Type IN ('LINE'
                                   ,'CB'
                                   ,'CHARGES')
             AND Rct.Batch_Id = Rb.Batch_Id
             AND Rct.Org_Id = Ctt.Org_Id
             AND Rct.Cust_Trx_Type_Id = Ctt.Cust_Trx_Type_Id
             AND Ctt.Type <> 'BR'
             AND Ctt.Type = 'CM' --贷项通知单
             AND Rct.Bill_To_Customer_Id = Rac_Bill.Cust_Account_Id
             AND Rac_Bill.Party_Id = Rac_Bill_Party.Party_Id
             AND Rct.Customer_Trx_Id = Aps.Customer_Trx_Id
             AND Aps.Acctd_Amount_Due_Remaining < 0 --判断是否未结
                --PARAMETER
             AND Rct.Org_Id = p_Org_Id
             AND (Rac_Bill.Cust_Account_Id = p_Customer_Id OR
                 p_Customer_Id IS NULL)
             AND (Rb.Batch_Id = p_Trx_Batch_Id OR p_Trx_Batch_Id IS NULL)
             AND (Rct.Trx_Number = p_Customer_Trx_Number OR
                 p_Customer_Trx_Number IS NULL)
             AND (Ctt.Name = p_Trx_Type OR p_Trx_Type IS NULL)
             AND (Rct.Attribute1 = p_Project OR p_Project IS NULL)
          -- AND Rct.Trx_Number IN ('JNG00200305RQ23533')
           ORDER BY Rct.Trx_Date
                   ,Aps.Acctd_Amount_Due_Remaining;
      
        l_Process_Name CONSTANT VARCHAR2(30) := 'process_request';
        l_Return_Status             VARCHAR2(1);
        l_Msg_Count                 NUMBER;
        l_Msg_Data                  VARCHAR2(1000);
        l_Message_List              VARCHAR2(1000);
        l_Msg_Index_Out             NUMBER;
        l_Cm_App_Rec                Ar_Cm_Api_Pub.Cm_App_Rec_Type;
        l_Out_Rec_Application_Id    NUMBER;
        l_Acctd_Amount_Applied_From NUMBER;
        l_Acctd_Amount_Applied_To   NUMBER;
        l_Cm_Amount                 NUMBER;
        l_Inv_Amount                NUMBER;
        l_Cm_Flag                   VARCHAR2(10);
        l_Inv_Flag                  VARCHAR2(10);
        l_Amount                    NUMBER;
        l_User_Name                 VARCHAR2(240);
        l_Fail_Count                NUMBER;
        l_Status                    VARCHAR2(240);
      BEGIN
      
        ---初始化
        Fnd_Global.Apps_Initialize(Fnd_Global.User_Id
                                  ,Fnd_Global.Resp_Id
                                  ,Fnd_Global.Resp_Appl_Id);
        Mo_Global.Init('AR');
        Mo_Global.Set_Policy_Context(p_Access_Mode => 'S'
                                    ,p_Org_Id      => p_Org_Id);
        l_Fail_Count := 0;
        FOR Rec_Cm IN Cur_Cm LOOP
          Log('开始');
          --校验规则
          l_Cm_Amount  := 0;
          l_Inv_Amount := 0;
          l_Cm_Amount  := Abs(Rec_Cm.Amount);
          --获取标准AR发票的总金额
          SELECT SUM(Aps.Acctd_Amount_Due_Remaining)
            INTO l_Inv_Amount
            FROM Ra_Customer_Trx_All       Rct
                ,Ra_Customer_Trx_Lines_All Rctl
                ,Ra_Cust_Trx_Types_All     Ctt
                ,Ra_Cust_Trx_Types_All     Ctt1
                ,Hz_Cust_Accounts          Rac_Bill
                ,Hz_Parties                Rac_Bill_Party
                ,Ar_Payment_Schedules      Aps
           WHERE 1 = 1
             AND Rct.Customer_Trx_Id = Rctl.Customer_Trx_Id
             AND Rctl.Line_Type IN ('LINE'
                                   ,'CB'
                                   ,'CHARGES')
             AND Rct.Org_Id = Ctt.Org_Id
             AND Rct.Cust_Trx_Type_Id = Ctt.Cust_Trx_Type_Id
             AND Ctt.Type <> 'BR'
             AND Ctt.Type = 'INV' --事务处理发票
             AND Ctt.Credit_Memo_Type_Id = Ctt1.Cust_Trx_Type_Id
             AND Rct.Bill_To_Customer_Id = Rac_Bill.Cust_Account_Id
             AND Rac_Bill.Party_Id = Rac_Bill_Party.Party_Id
             AND Rct.Customer_Trx_Id = Aps.Customer_Trx_Id
             AND Aps.Acctd_Amount_Due_Remaining > 0
             AND Rct.Org_Id = p_Org_Id
             AND Rac_Bill_Party.Party_Name = Rec_Cm.Party_Name
             AND Ctt1.Name = Rec_Cm.Trx_Type_Name
             AND ((Nvl(Rct.Attribute1
                      ,'-99999') = Nvl(Rec_Cm.Project_Number
                                        ,'-99999') AND p_Project_Flag = 'Y') OR
                 Nvl(p_Project_Flag
                     ,'N') = 'N');
          Log('l_Cm_Amount:' || l_Cm_Amount);
          Log('l_Inv_Amount:' || l_Inv_Amount);
          IF (l_Cm_Amount >= l_Inv_Amount) THEN
            ---标准AR发票核销贷项通知单
            l_Cm_Flag := 'N';
            --  l_Inv_Flag := 'Y';
          ELSE
            --贷项通知单核销标准AR发票
            l_Cm_Flag := 'Y';
            -- l_Inv_Flag := 'N';
          END IF;
        
          --按客户,项目,事务处理类型匹配
          FOR Rec_Inv IN (SELECT Rct.Customer_Trx_Id
                                ,Rct.Org_Id
                                ,Rct.Trx_Number
                                ,Rct.Trx_Date
                                ,Ctt.Name                       Trx_Type_Name
                                ,Ctt.Type
                                ,Rac_Bill_Party.Party_Name
                                ,Rac_Bill.Account_Number
                                ,Rct.Attribute1                 Project_Number
                                ,Aps.Acctd_Amount_Due_Remaining Amount
                                ,Aps.Cash_Receipt_Id
                                ,Aps.Payment_Schedule_Id
                            FROM Ra_Customer_Trx_All       Rct
                                ,Ra_Customer_Trx_Lines_All Rctl
                                ,Ra_Cust_Trx_Types_All     Ctt
                                ,Ra_Cust_Trx_Types_All     Ctt1
                                ,Hz_Cust_Accounts          Rac_Bill
                                ,Hz_Parties                Rac_Bill_Party
                                ,Ar_Payment_Schedules      Aps
                           WHERE 1 = 1
                             AND Rct.Customer_Trx_Id = Rctl.Customer_Trx_Id
                             AND Rctl.Line_Type IN ('LINE'
                                                   ,'CB'
                                                   ,'CHARGES')
                             AND Rct.Org_Id = Ctt.Org_Id
                             AND Rct.Cust_Trx_Type_Id = Ctt.Cust_Trx_Type_Id
                             AND Ctt.Type <> 'BR'
                             AND Ctt.Type = 'INV' --事务处理发票
                             AND Ctt.Credit_Memo_Type_Id = Ctt1.Cust_Trx_Type_Id
                             AND Rct.Bill_To_Customer_Id =
                                 Rac_Bill.Cust_Account_Id
                             AND Rac_Bill.Party_Id = Rac_Bill_Party.Party_Id
                             AND Rct.Customer_Trx_Id = Aps.Customer_Trx_Id
                             AND Aps.Acctd_Amount_Due_Remaining > 0
                             AND Rct.Org_Id = p_Org_Id
                             AND Rac_Bill_Party.Party_Name = Rec_Cm.Party_Name
                             AND Ctt1.Name = Rec_Cm.Trx_Type_Name
                             AND ((Nvl(Rct.Attribute1
                                      ,'-99999') =
                                 Nvl(Rec_Cm.Project_Number
                                      ,'-99999') AND p_Project_Flag = 'Y') OR
                                 Nvl(p_Project_Flag
                                     ,'N') = 'N')
                           ORDER BY Rct.Trx_Date
                                   ,Aps.Acctd_Amount_Due_Remaining) LOOP
            --
            IF (l_Cm_Amount > 0) THEN
              l_Cm_App_Rec.Cm_Customer_Trx_Id  := Rec_Cm.Customer_Trx_Id;
              l_Cm_App_Rec.Inv_Customer_Trx_Id := Rec_Inv.Customer_Trx_Id;
            
              Log('l_Cm_Flag:' || l_Cm_Flag);
            
              IF (l_Cm_Flag = 'Y') THEN
              
                Log('l_Cm_Amount:' || l_Cm_Amount);
                Log('Rec_Inv.Amount:' || Rec_Inv.Amount);
                IF (l_Cm_Amount >= Rec_Inv.Amount) THEN
                  l_Amount                    := Rec_Inv.Amount;
                  l_Cm_App_Rec.Amount_Applied := Rec_Inv.Amount;
                  l_Cm_Amount                 := l_Cm_Amount -
                                                 Nvl(Rec_Inv.Amount
                                                    ,0);
                ELSE
                  l_Amount                    := l_Cm_Amount;
                  l_Cm_App_Rec.Amount_Applied := l_Cm_Amount;
                  l_Cm_Amount                 := l_Cm_Amount -
                                                 Nvl(Rec_Inv.Amount
                                                    ,0);
                END IF;
                l_Cm_App_Rec.Applied_Payment_Schedule_Id := Rec_Inv.Payment_Schedule_Id;
              ELSE
                l_Amount                    := Rec_Inv.Amount;
                l_Cm_App_Rec.Amount_Applied := Rec_Inv.Amount;
                --l_Cm_App_Rec.Applied_Payment_Schedule_Id := Rec_Cm.Payment_Schedule_Id;
                l_Cm_App_Rec.Applied_Payment_Schedule_Id := Rec_Inv.Payment_Schedule_Id;
              END IF;
            
              l_Cm_App_Rec.Apply_Date := To_Date(p_App_Date
                                                ,'YYYY-MM-DD');
              l_Cm_App_Rec.Gl_Date    := To_Date(p_App_Gl_Date
                                                ,'YYYY-MM-DD');
              Log('开始核销.........................................');
              Ar_Cm_Api_Pub.Apply_On_Account(p_Api_Version               => 1
                                            ,p_Init_Msg_List             => Fnd_Api.g_True
                                            ,p_Commit                    => Fnd_Api.g_False
                                            ,p_Cm_App_Rec                => l_Cm_App_Rec
                                            ,x_Return_Status             => x_Return_Status
                                            ,x_Msg_Count                 => x_Msg_Count
                                            ,x_Msg_Data                  => x_Msg_Data
                                            ,x_Out_Rec_Application_Id    => l_Out_Rec_Application_Id
                                            ,x_Acctd_Amount_Applied_From => l_Acctd_Amount_Applied_From
                                            ,x_Acctd_Amount_Applied_To   => l_Acctd_Amount_Applied_To
                                            ,p_Org_Id                    => p_Org_Id);
            
              IF x_Return_Status <> Fnd_Api.g_Ret_Sts_Success THEN
                FOR i IN 1 .. x_Msg_Count LOOP
                  /*  Fnd_Msg_Pub.Get(p_Msg_Index     => i
                  ,p_Data          => l_Message_List
                  ,p_Msg_Index_Out => l_Msg_Index_Out);*/
                  l_Fail_Count := l_Fail_Count + 1;
                  x_Msg_Data   := x_Msg_Data ||
                                  Oe_Msg_Pub.Get(p_Msg_Index => i
                                                ,p_Encoded   => 'F');
                  Log('错误:' || x_Msg_Data);
                END LOOP;
              ELSE
                Log('核销成功!');
                --插入临时表数据,用于打印
              END IF;
              BEGIN
                SELECT Fu.User_Name
                  INTO l_User_Name
                  FROM Fnd_User Fu
                 WHERE 1 = 1
                   AND Fu.User_Id = Fnd_Global.User_Id;
              EXCEPTION
                WHEN OTHERS THEN
                  l_User_Name := NULL;
              END;
              IF (x_Return_Status = 'S') THEN
                l_Status := '成功';
              ELSE
                l_Status := '失败';
              END IF;
            
              INSERT INTO Cux.Cux_1_Ar_Credit_Trans_Temp
                (Temp_Id
                ,Inv_Trx_Number
                ,Inv_Trx_Type
                ,Inv_Project_Number
                ,Cm_Trx_Number
                ,Cm_Trx_Type
                ,Cm_Project_Number
                ,Account_Number
                ,Party_Name
                ,Amount
                ,Trx_Date
                ,User_Name
                ,Status
                ,Error_Msg
                ,Created_By
                ,Creation_Date
                ,Last_Updated_By
                ,Last_Update_Date
                ,Last_Update_Login)
              VALUES
                (Cux.Cux_1_Ar_Credit_Trans_Temp_s.Nextval
                ,Rec_Inv.Trx_Number
                ,Rec_Inv.Trx_Type_Name
                ,Rec_Inv.Project_Number
                ,Rec_Cm.Trx_Number
                ,Rec_Cm.Trx_Type_Name
                ,Rec_Cm.Project_Number
                ,Rec_Inv.Account_Number
                ,Rec_Inv.Party_Name
                ,l_Amount
                ,To_Date(p_App_Date
                        ,'YYYY-MM-DD')
                ,l_User_Name
                ,l_Status
                ,x_Msg_Data
                ,Fnd_Global.User_Id
                ,SYSDATE
                ,Fnd_Global.User_Id
                ,SYSDATE
                ,Fnd_Global.Login_Id);
            END IF; --IF (l_Cm_Amount > 0) THEN
          
          END LOOP;
        
        END LOOP;
      
        IF (l_Fail_Count > 0) THEN
          x_Return_Status := Fnd_Api.g_Ret_Sts_Error;
        END IF;
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END Process_Request;
  • 相关阅读:
    随机生成300道四则运算
    练习
    电梯演说模板练习
    敏捷开发
    团队模式
    思考
    build to win 观后感
    四则运算
    Code review
    Mutual review
  • 原文地址:https://www.cnblogs.com/wang-chen/p/13291780.html
Copyright © 2011-2022 走看看