spTransactions_RestoreFailedTransaction

Parameters

Parameter Parameter Type Mode Description
@TranID int IN
@TranType char(1) IN
@AuthCode varchar(255) IN
@RefNum varchar(255) IN

Definition

Copy


  CREATE PROCEDURE spTransactions_RestoreFailedTransaction(
  @TranID AS INTEGER,
  @TranType AS CHAR(1),
  @AuthCode AS VARCHAR(255)=NULL,
  @RefNum AS VARCHAR(255)=NULL
  ) AS
  BEGIN

  DECLARE @OldStatus INTEGER
  DECLARE @ExistingTran INTEGER

  DECLARE @TransactionTypeGuid NVARCHAR(100)
  DECLARE @XmlData XML
  DECLARE @XmlTextData NVARCHAR(MAX)
  DECLARE @UserID INTEGER
  DECLARE @BackOfficeID INTEGER

  SELECT @TransactionTypeGuid =
  CASE @TranType
  WHEN 'd' THEN '{5705B543-4033-4a3a-BBCD-A731403EE1E6}'
  WHEN 'e' THEN '{172A5D9A-5241-493c-A2C2-EAC164C095B0}'
  WHEN 'm' THEN '{D7D6143F-823D-4c74-AC2F-947CC96B7008}'
  ELSE NULL
  END

  IF @TransactionTypeGuid IS NULL
  BEGIN
  RAISERROR('Error - Invalid transaction type argument - Type argument must be "d", "e", or "m".',18,1)
  RETURN
  END

  SELECT @ExistingTran=COUNT(*) FROM Transactions WHERE TransactionID=@TranID AND TransactionType=@TransactionTypeGuid
  IF @ExistingTran <> 0
  BEGIN
  RAISERROR('Error - Transaction already exists in the transactions table',18,1)
  RETURN
  END

  SET @OldStatus = -1

  IF @TranType='d'
  BEGIN

  SELECT @OldStatus=[Status],
  @XmlTextData=XmlObjectData,
  @UserID = AddedByUserID
  FROM DonationTransactions WHERE DonationTransactionsID = @TranID

  IF @OldStatus = 1
  BEGIN
  RAISERROR('Error - DonationTransaction has Status=1 (Completed)',18,1)
  RETURN
  END
  IF @OldStatus = -1
  BEGIN
  RAISERROR('Error - Specified transaction ID does not exist in DonationTransactions',18,1)
  RETURN
  END

  SET @XmlData = CAST(
  REPLACE(@XmlTextData, 'encoding="utf-8"',    '')
  AS XML
  )


  -- Crack open the XML data to retrieve the BackOfficeUserID
  -- And add Reference Number & Authorization Code if specified
  SELECT @BackOfficeID =@XmlData.value(
  'declare namespace ns="urn:blackbaud.RE7.XDATA"; (/ns:ShelbyDonationTran/ns:Donor/ns:BackOfficeID)[1]',
  'int'
  )

  IF NOT @RefNum IS NULL
  BEGIN
  SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
  insert
  if ( count(/ns:ShelbyDonationTran/ns:Gift/ns:ReferenceNumber) < 1 )
                                then element ReferenceNumber {sql:variable("@RefNum")}
                                else()
                                after (/ns:ShelbyDonationTran/ns:Gift/ns:CardHolderName)[1]')
        END
        IF NOT @AuthCode IS NULL
        BEGIN
            SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
                                insert if ( count(/ns:ShelbyDonationTran/ns:Gift/ns:AuthorizationCode) < 1 )
                                then element AuthorizationCode {sql:variable("@AuthCode")}
                                else()
                                after (/ns:ShelbyDonationTran/ns:Gift/ns:CardHolderName)[1]')
        END

        -- Update the status of the transaction and write in the dirty XML data
        UPDATE dbo.DonationTransactions SET
            [Status] = 1,
            XMLObjectData = CAST(@XmlData AS NVARCHAR(MAX)) WHERE DonationTransactionsID=@TranID

    END

    ELSE IF @TranType='e'
    BEGIN

        SELECT @OldStatus=[Status],
               @XmlTextData=XmlObjectData,
               @UserID = AddedByUserID
        FROM EventTransactions WHERE EventTransactionsID = @TranID

        IF @OldStatus = 1
        BEGIN
            RAISERROR('Error - EventTransaction has Status=1 (Completed)',18,1)
            RETURN
        END
        IF @OldStatus = -1
        BEGIN
            RAISERROR('Error - Specified transaction ID does not exist in EventTransactions',18,1)
            RETURN
        END

        SET @XmlData = CAST(
                            REPLACE(@XmlTextData, 'encoding="utf-8"',    '')
                            AS XML
                          )

        -- Crack open the XML data to retrieve the BackOfficeUserID
        -- And add Reference Number & Authorization Code if specified
        SELECT @BackOfficeID =@XmlData.value(
            'declare namespace ns="urn:blackbaud.RE7.XDATA"; (/ns:ShelbyEventRegTran/ns:Donor/ns:BackOfficeID)[1]',
            'int'
        )

        IF NOT @RefNum IS NULL
        BEGIN
            SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
                                insert
                                if ( count(/ns:ShelbyEventRegTran/ns:Gift/ns:ReferenceNumber) < 1 )
                                then element ReferenceNumber {sql:variable("@RefNum")}
                                else()
                                after (/ns:ShelbyEventRegTran/ns:Gift/ns:CardHolderName)[1]')
        END
        IF NOT @AuthCode IS NULL
        BEGIN
            SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
                                insert if ( count(/ns:ShelbyEventRegTran/ns:Gift/ns:AuthorizationCode) < 1 )
                                then element AuthorizationCode {sql:variable("@AuthCode")}
                                else()
                                after (/ns:ShelbyEventRegTran/ns:Gift/ns:CardHolderName)[1]')
        END

        -- Update the status of the transaction and write in the dirty XML data
        UPDATE dbo.EventTransactions SET
            [Status] = 1,
            XMLObjectData = CAST(@XmlData AS NVARCHAR(MAX)) WHERE EventTransactionsID=@TranID

    END

    ELSE IF @TranType='m'
    BEGIN
        SELECT @OldStatus=[Status],
               @XmlTextData=XmlObjectData,
               @UserID = AddedByUserID
        FROM MembershipTransactions WHERE ID = @TranID

        IF @OldStatus = 1
        BEGIN
            RAISERROR('Error - MembershipTransaction has Status=1 (Completed)',18,1)
            RETURN
        END
        IF @OldStatus = -1
        BEGIN
            RAISERROR('Error - Specified transaction ID does not exist in MembershipTransactions',18,1)
            RETURN
        END

        SET @XmlData = CAST(
                            REPLACE(@XmlTextData, 'encoding="utf-8"',    '')
                            AS XML
                          )

        -- Crack open the XML data to retrieve the BackOfficeUserID
        -- And add Reference Number & Authorization Code if specified
        SELECT @BackOfficeID =@XmlData.value(
            'declare namespace ns="urn:blackbaud.RE7.XDATA"; (/ns:ShelbyMembershipTran/ns:Donor/ns:BackOfficeID)[1]',
            'int'
        )

        IF NOT @RefNum IS NULL
        BEGIN
            SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
                                insert
                                if ( count(/ns:ShelbyMembershipTran/ns:Gift/ns:ReferenceNumber) < 1 )
                                then element ReferenceNumber {sql:variable("@RefNum")}
                                else()
                                after (/ns:ShelbyMembershipTran/ns:Gift/ns:CardHolderName)[1]')
        END
        IF NOT @AuthCode IS NULL
        BEGIN
            SET @XmlData.modify('declare namespace ns="urn:blackbaud.RE7.XDATA";
                                insert if ( count(/ns:ShelbyMembershipTran/ns:Gift/ns:AuthorizationCode) < 1 )
                                then element AuthorizationCode {sql:variable("@AuthCode")}
                                else()
                                after (/ns:ShelbyMembershipTran/ns:Gift/ns:CardHolderName)[1]')
        END

        -- Update the status of the transaction and write in the dirty XML data
        UPDATE dbo.MembershipTransactions SET
            [Status] = 1,
            XMLObjectData = CAST(@XmlData AS NVARCHAR(MAX)) WHERE ID=@TranID
    END

    SET @XmlTextData = CAST(@XmlData AS NVARCHAR(MAX))
    EXEC spTransactions_InsertTransaction 0, @TranID, @TransactionTypeGuid, @XmlTextData, @UserID, @BackOfficeID        
END