USP_GET_CMSTRANSACTIONS

Parameters

Parameter Parameter Type Mode Description
@NUMBEROFRECORDS int IN

Definition

Copy


      CREATE procedure dbo.USP_GET_CMSTRANSACTIONS
      (
          @NUMBEROFRECORDS int
      )
      as
      begin

      declare @RECORDSTODELETE table (ID uniqueidentifier, TRANSACTIONID uniqueidentifier, TYPE nvarchar(20));
    declare @PAYMENT2_0RECORDSTODELETE table (RowID INT IDENTITY(1,1), ID uniqueidentifier, TRANSACTIONID uniqueidentifier);
    declare @tranType nvarchar(20) = 'Payment2_0'



    -- GET THE RECORDS WHICH WILL NEVER BE PROCESSED

    insert into @RECORDSTODELETE
    select ID, TRANSACTIONID, TYPE
    from [dbo].[CMSTRANSACTIONS]
    where status in (
            4 -- CheckoutCancelled

            , 16 -- ValidationFailed

            , 128 -- AcknowledgementSent

            , 256 -- Complete

            , 512 -- CheckoutError

            , 1024 -- ChargeError

            , 4096 -- InternalError

            , 8192 -- CheckoutExpired

            ) 



    -- INSERT THE RECORDS (WHICH WILL NEVER BE PROCESSED) INTO THE [ARCHIVEDCMSTRANSACTIONS] TABLE

    insert into [dbo].[ARCHIVEDCMSTRANSACTIONS] (
        TRANSACTIONID
        , ORDERID
        , DATA
        , status
        , STATUSTEXT
        , TYPE
        , ADDEDBYID
        , CHANGEDBYID
        , DATEADDED
        , DATECHANGED
        , RESULTCODE
        , FAILDATA
        )
    select TRANSACTIONID
        , ORDERID
        , DATA
        , status
        , STATUSTEXT
        , TYPE
        , ADDEDBYID
        , CHANGEDBYID
        , DATEADDED
        , DATECHANGED
        , RESULTCODE
        , FAILDATA
    from [dbo].[CMSTRANSACTIONS]
    where id in (
            select Id
            from @RECORDSTODELETE
            )

    -- Also pick Payment2_0 records from ARCHIVEDCMSTRANSACTIONS to delete from CMS_SESSIONVARIABLEBACKUP as per LifeSpan value

    -- Add query to remove SP31 Checkout Transaction record from CMS_SESSIONVARIABLEBACKUP table

    insert into @RECORDSTODELETE
    select ACT.ID, ACT.TRANSACTIONID, ACT.TYPE
    from dbo.CMS_SESSIONVARIABLEBACKUP SVB
    inner join dbo.ARCHIVEDCMSTRANSACTIONS ACT ON ACT.TRANSACTIONID = SVB.KEYGUID
    where SVB.TYPECODE = 1 
    and CAST(SVB.DATEADDED as date) <= CAST(ACT.DATEADDED as date)

  begin try
    -- ONLY GET Payment2_0 RECORD FROM TABLE @RECORDSTODELETE & COPIED INTO TABLE @PAYMENT2_0RECORDSTODELETE BEFORE DELETE from TABLE @RECORDSTODELETE

    if exists (select 1 from @RECORDSTODELETE where type = @tranType)
    begin
      DECLARE @RowCnt int = 0, @RowID int = 1, @NodeValue bit;
      DECLARE @TRANSACTIONID uniqueidentifier, @CARTID uniqueidentifier, @CHANGEAGENTID?uniqueidentifier;

        insert into @PAYMENT2_0RECORDSTODELETE (ID, TRANSACTIONID) 
        select ID, TRANSACTIONID from @RECORDSTODELETE
        where type = @tranType

        exec?dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT?@CHANGEAGENTID?output;

      select @RowCnt = Count(1) from @PAYMENT2_0RECORDSTODELETE

      while @RowID <= @RowCnt
      begin
        select @TRANSACTIONID = TRANSACTIONID from @PAYMENT2_0RECORDSTODELETE where @RowID = RowID        

        -- if the user cancelled and did not check out, delete the sponsorship row

        select @NodeValue = dbo.UFN_GET_BACKUPITEMVALUENODE_BY_KEYGUID(@TRANSACTIONID, 'ContainsSponsorshipItem')
        if @NodeValue = 1 -- If CART contain Sponsorship item, then it should be 1

        begin
          select @CARTID = SALESORDERID from SALESORDERBBPAYTRANSACTION
          where  TRANSACTIONID = @TRANSACTIONID
          exec dbo.USP_DELETE_CMS_SESSIONVARIABLEBACKUP @ID = @CARTID, @CHANGEAGENTID = @CHANGEAGENTID, @KEYGUID = @CARTID
        end

        -- If the XML have ArchiveFlag value true, we move the record from dbo.CMS_SESSIONVARIABLEBACKUP to dbo.CMS_UNPROCESSEDBBSPTRANSACTION;

        -- Else we just delete it.

        select @NodeValue = dbo.UFN_GET_BACKUPITEMVALUENODE_BY_KEYGUID(@TRANSACTIONID, 'ArchiveFlag')
        if @NodeValue = 1
        begin
          exec dbo.USP_RECORDOPERATION_ARCHIVEDEADBBSPTRANSACTION @ID = @TRANSACTIONID, @CHANGEAGENTID = @CHANGEAGENTID, @KEYGUID = @TRANSACTIONID
        end
        else
        begin
          exec dbo.USP_DELETE_CMS_SESSIONVARIABLEBACKUP @ID = @TRANSACTIONID, @CHANGEAGENTID = @CHANGEAGENTID, @KEYGUID = @TRANSACTIONID
        end
        exec dbo.USP_CLEAR_BBPAYLOG @ID = @TRANSACTIONID, @ISCONFIRMED = false, @ClearSalesOrderItem = 0

        SET @RowID += 1;
      end      
    end
   end try
     begin catch
      declare @ServerName nvarchar(200) =  @@SERVERNAME, @ErrorMsg nvarchar(200) =  ERROR_MESSAGE() ;
    SET @ErrorMsg = 'An error occurred while deleting data from SALESORDERBBPAYTRANSACTION & CMS_SESSIONVARIABLEBACKUP table - ' + @ErrorMsg
    exec dbo.spAddUpdate_Error 0, 'SQL Procedure Exception', @ErrorMsg, @ErrorMsg, @ServerName, 'Error while processing Payment2.0 records in USP_GET_CMSTRANSACTIONS'
     end catch

    -- DELETE THE RECORDS (WHICH WILL NEVER BE PROCESSED) FROM THE [CMSTRANSACTIONS] TABLE

    delete
    from dbo.[CMSTRANSACTIONS]
    where id in (
            select Id
            from @RECORDSTODELETE
            )

      select top (@NUMBEROFRECORDS) ID, TRANSACTIONID, DATA, STATUS, TYPE as TYPE from dbo.CMSTRANSACTIONS with (nolock)
      where DATEADDED < DateADD(mi, -30, Current_TimeStamp)
      order by DATEADDED;

      end