-- Lấy danh sách phiếu còn nợ tồn
-- SalePlatform..SPF_FSER_GetDebitRule_2022Aug16
-- IsNotApproval,IsNotNhapCoc,IsNotOTP  

-- input
    DECLARE @pAccountID INT= 1000769923 -- IBBMember ftq.tamdt19
    DECLARE @pRegID INT = -1
    DECLARE @pRegIDStagList NVARCHAR(500) = ',1091175913,1091175983,1091176013,1091176053,1091176093,1091176103,1091176743,1091176793,1091176573,1091176553,1091176533,1091176523,1091176583,1082261923,1082262073,1082262163,1082263663,1082263263,1082302023,'
    DECLARE @pRegIDProList NVARCHAR(500) = ',1099694563,1099695433,1099695733,1099696503,1099696603,1099696803,1099696903,1099698973,1099699343,1099699743,1099700313,1099701583,1099701783,1099703053,,'
    DECLARE @pRegIDDevList NVARCHAR(500) = ',1054341553,1020298652,1064248463,1064247523,1064247013,1064246893,1064250763,1064250603,1064249883,1064249283,1064249253,1064248333,1064248253,1064247383,1064247073,1064250933,1064250293,1064249553,1064246363,'
   
    -- tim don hang trong thoi gian 1 nam
    DECLARE @vFirstDay_PrevYear DATETIME =  DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0);

    IF (OBJECT_ID('tempdb..#vListReg') IS NOT NULL)
    DROP TABLE #vListReg;

    IF (OBJECT_ID('tempdb..#vListRegDebit') IS NOT NULL)
    DROP TABLE #vListRegDebit;

    -- step 1 table ListReg Phiếu đăng ký chua duyet
    CREATE TABLE #vListReg
    (
        RegID INT,
        RegCode VARCHAR(20),      
        Approval INT,
        LocalType INT,
        StatusDeposit BIT,
        DepositDate DATETIME,
        ObjID INT,
        InputType INT,
        StatusReg INT,
        RegType INT
    );

     INSERT INTO #vListReg
    (
        RegID ,
        RegCode ,
        Approval ,
        LocalType ,
        StatusDeposit ,
        DepositDate ,
        ObjID ,
        InputType ,
        StatusReg ,
        RegType
    )
    SELECT r.ID,r.RegCode,r.Approval,r.LocalType,r.StatusDeposit,r.DepositDate,r.ObjID,r.InputType,r.StatusReg,r.RegType FROM  Internet.dbo.RegistrationFTS (NOLOCK) AS r
            WHERE 1=1                
                AND r.ID IN (SELECT value FROM STRING_SPLIT(@pRegIDStagList, ','))
                AND r.CreateDate >= @vFirstDay_PrevYear            
               
                -- AND r.Supporter = CAST(@pAccountID AS VARCHAR(100))      -- ko lay theo IBBMember nua
                AND ISNULL(r.InputType, 0) = 1  -- Phiếu đăng ký của Mobisale
                AND ISNULL(r.Approval, 0) <> 1  -- 1: Ok, 2 : Not Ok, null chua duyet
                AND ISNULL(r.StatusReg, 0) <> 6 -- Lấy tình trạng phiếu bình thường  
                --AND r.ID NOT IN ( ISNULL(@pRegID, -1))
                AND
                  (
                      r.StatusDeposit = 1 -- đã thanh toán
                      OR
                      (
                          r.StatusDeposit = 0       -- bán mới, 0 chưa thanh toán  
                          AND r.RegType IS NULL
                      )
                  );

    SELECT * FROM #vListReg

    -- step 2 table RegDebit ngay thanh toán
    CREATE TABLE #vListRegDebit
        (
            RegID INT,
            RegCode VARCHAR(20),
            ObjID INT,
            Contract VARCHAR(50),
            Approval INT,
            LocalType INT,
            DebitDate DATETIME,
            ObjDate DATETIME,
            OrderCode VARCHAR(20),
            ServiceList VARCHAR(100),
            IsNotNhapCoc INT,
            IsNotOTP INT,
            IsNotApproval INT,
            OrderPaymentType INT ,
            ContentStr VARCHAR(100)
        );


    INSERT INTO #vListRegDebit
    (
        RegID,
        RegCode,
        ObjID,
        Contract,
        Approval,
        LocalType,
        DebitDate,
        ObjDate,
        OrderCode,
        ServiceList,
        IsNotApproval,
        OrderPaymentType,
        ContentStr
    )
    SELECT TOP 20 r.RegID,
           r.RegCode,
           o.Id AS ObjID,
           o.Contract,
           r.Approval,
           r.LocalType,
           CASE
               WHEN r.StatusDeposit = 0 THEN        -- 1 đã thanh toán, 0 chua thanh toán
                   o.Start_Date                     -- Start_Date
               ELSE
                   r.DepositDate                    -- ngay thanh toán
           END AS DebitDate,
           o.Start_Date,
           NULL AS OrderCode,
           NULL AS ServiceList,
           1 AS IsNotApproval,
           e.OrderPaymentType AS OrderPaymentType,
           'IsNotApproval' as ContentStr
    FROM  #vListReg (NOLOCK) r
        INNER JOIN Internet.dbo.Object (NOLOCK) AS o ON r.ObjID = o.Id
        INNER JOIN PowerInside.dbo.ExtraRegistrationFTS (NOLOCK) AS e ON r.RegID = e.RegID
    WHERE 1=1
          AND o.Status NOT IN ( 6, 5 ) -- hợp đồng tình trạng bình thường  
                --AND
                 -- (
                    --  r.StatusDeposit = 1 -- Lấy danh sách những phiếu  đã thanh toán , nhưng duyệt khác tình trạng OK  
                    --  OR
                    --  (
                    --    r.StatusDeposit = 0
                    --    AND r.RegType IS NULL
                    --  )
                 -- ); -- lấy những phiếu bán mới, nhưng chưa thanh toán  


    select * FROM #vListRegDebit

    --step 3 Xoa COD
    -- Xóa những record exception để by pass -> làm tạm cho phần COD
    DELETE #vListRegDebit WHERE ISNULL(OrderPaymentType,0) = 12

    /* Phiếu nào dính chưa nhập cọc, thì sẽ đánh dấu */
    UPDATE l
    SET l.IsNotNhapCoc = 1, l.ContentStr += ',IsNotNhapCoc'
    FROM #vListRegDebit AS l
        INNER JOIN PowerInfo.dbo.Online_Receipt (NOLOCK) AS B
            ON l.RegID = B.ResourceID
               AND B.Type = 27
        LEFT JOIN PowerInfo.dbo.Online_Receipt_Payment (NOLOCK) AS P
            ON B.BillNumber = P.BillNumber
    WHERE B.PaidAction = 0 /* 0 : Binh Thuong ; 1: Huy*/
          AND (ISNULL(B.PayAfter, 0) <> 1 OR P.ID IS NULL) /*Tình trạng chưa nhập cọc và chưa thanh toán */
         
         

    /* phiếu nào chưa OTP, thì sẽ đánh dấu*/
    UPDATE l
    SET l.IsNotOTP = 1, l.ContentStr += ',IsNotOTP'
    FROM #vListRegDebit AS l
        INNER JOIN PowerInfo.dbo.DocumentDigital (NOLOCK) AS d
            ON d.LinkID = l.RegID
               AND d.Source = 220
    WHERE d.Status = 1
          AND ISNULL(d.Confirm, 0) <> 1
          and d.TemplateID in (188,189); /*Chỉ lấy những Template bán hàng, ko lấy những template Preview*/

    SELECT RegID,
           RegCode,
           ObjID,
           Contract,
           Approval,
           LocalType,
           DebitDate,
           ObjDate,
           OrderCode,
           ServiceList,
           IsNotNhapCoc,
           IsNotOTP,
           IsNotApproval,
           ContentStr
    FROM #vListRegDebit;