USP_REVENUE_UPDATEPAYMENTDETAILS

Stored proc to update payment details for a given revenue record

Parameters

Parameter Parameter Type Mode Description
@PAYMENTMETHODID uniqueidentifier IN
@PAYMENTMETHODCODE tinyint IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(4) IN
@CREDITTYPECODEID uniqueidentifier IN
@AUTHORIZATIONCODE nvarchar(20) IN
@EXPIRESON UDT_FUZZYDATE IN
@ISSUER nvarchar(100) IN
@NUMBEROFUNITS decimal(20, 3) IN
@SYMBOL nvarchar(25) IN
@MEDIANPRICE decimal(19, 4) IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@SALEDATE datetime IN
@SALEAMOUNT money IN
@BROKERFEE money IN
@SALEPOSTDATE datetime IN
@SALEPOSTSTATUSCODE tinyint IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@KEYALREADYOPEN bit IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@DIRECTDEBITRESULTCODE nvarchar(10) IN
@LOWPRICE decimal(19, 4) IN
@HIGHPRICE decimal(19, 4) IN
@REVENUEAMOUNT money IN
@GIFTINKINDITEMNAME nvarchar(100) IN
@GIFTINKINDDISPOSITIONCODE tinyint IN
@GIFTINKINDNUMBEROFUNITS int IN
@GIFTINKINDFAIRMARKETVALUE money IN
@DIRECTDEBITISREJECTED bit IN
@BASECURRENCYID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN
@ORIGINALPAYMENTMETHODCODE tinyint IN
@VENDORID nvarchar(50) IN
@BBPSTRANSACTIONID uniqueidentifier IN
@SEPAMANDATEID uniqueidentifier IN
@OVERRIDESAVEDVENDORID bit IN
@OVERRIDESAVEDBBPSTRANSACTIONID bit IN
@OVERRIDESAVEDSEPAMANDATEID bit IN

Definition

Copy


      CREATE procedure dbo.USP_REVENUE_UPDATEPAYMENTDETAILS
      (
        @PAYMENTMETHODID uniqueidentifier,
        @PAYMENTMETHODCODE tinyint
        @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
        @CHECKNUMBER nvarchar(20) = '',
        @CONSTITUENTACCOUNTID uniqueidentifier = null,
        @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
        @REFERENCENUMBER nvarchar(20) = '',
        @CARDHOLDERNAME nvarchar(255) = '',
        @CREDITCARDNUMBER nvarchar(4) = '',
        @CREDITTYPECODEID uniqueidentifier = null,
        @AUTHORIZATIONCODE nvarchar(20) = '',
        @EXPIRESON dbo.UDT_FUZZYDATE = '00000000',
        @ISSUER nvarchar(100) = '',
        @NUMBEROFUNITS decimal(20,3) = 0,
        @SYMBOL nvarchar(25) = '',
        @MEDIANPRICE decimal(19,4) = 0,
        @PROPERTYSUBTYPECODEID uniqueidentifier = null,
        @GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
        @SALEDATE datetime = null,
        @SALEAMOUNT money = 0,
        @BROKERFEE money = 0,
        @SALEPOSTDATE datetime = null,
        @SALEPOSTSTATUSCODE tinyint = 0,
        @CHANGEAGENTID uniqueidentifier,
        @CHANGEDATE datetime,
        @KEYALREADYOPEN bit = 0,
        @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
        @DIRECTDEBITRESULTCODE nvarchar(10) = '',
        @LOWPRICE decimal(19,4) = 0,
        @HIGHPRICE decimal(19,4) = 0,
        @REVENUEAMOUNT money = 0,
        @GIFTINKINDITEMNAME nvarchar(100) = '',
        @GIFTINKINDDISPOSITIONCODE tinyint = 0,
        @GIFTINKINDNUMBEROFUNITS int = 0,
        @GIFTINKINDFAIRMARKETVALUE money = 0,
        @DIRECTDEBITISREJECTED bit = 0,
        @BASECURRENCYID uniqueidentifier = null,
        @TRANSACTIONCURRENCYID uniqueidentifier = null,
        @BASEEXCHANGERATEID uniqueidentifier = null,
        @ORIGINALPAYMENTMETHODCODE tinyint = null,
        @VENDORID nvarchar(50) = '', --Set @OVERRIDESAVEDVENDORID = 1 as well, otherwise null will be interpreted as no change for binary compatibility

        @BBPSTRANSACTIONID uniqueidentifier = null, --Set @OVERRIDESAVEDBBPSTRANSACTIONID = 1 as well, otherwise null will be interpreted as no change for binary compatibility

        @SEPAMANDATEID uniqueidentifier = null, --Set @OVERRIDESAVEDSEPAMANDATEID = 1 as well, otherwise null will be interpreted as no change for binary compatibility

        @OVERRIDESAVEDVENDORID bit = 0,
        @OVERRIDESAVEDBBPSTRANSACTIONID bit= 0,
        @OVERRIDESAVEDSEPAMANDATEID bit = 0
      )
      as 
      set nocount on;

      begin try

        --Set currency parameters for backwards compatibility

        if @TRANSACTIONCURRENCYID is null
          set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

        if @BASECURRENCYID is null
          set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

        declare @REVENUEID uniqueidentifier;
        select @REVENUEID = REVENUEID from dbo.REVENUEPAYMENTMETHOD where ID = @PAYMENTMETHODID;

        declare @BASELOWPRICE decimal(19,4);
        declare @BASEMEDIANPRICE decimal(19,4);
        declare @BASEHIGHPRICE decimal(19,4);
        declare @BASESALEAMOUNT money;
        declare @BASEBROKERFEE money;
        declare @BASEGIFTINKINDFAIRMARKETVALUE money;
        declare @ORGANIZATIONLOWPRICE decimal(19,4);
        declare @ORGANIZATIONMEDIANPRICE decimal(19,4);
        declare @ORGANIZATIONHIGHPRICE decimal(19,4);    
        declare @ORGANIZATIONSALEAMOUNT money;
        declare @ORGANIZATIONBROKERFEE money;
        declare @ORGANIZATIONGIFTINKINDFAIRMARKETVALUE money;

        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

        if @PAYMENTMETHODCODE = 0 --Cash

        begin
          update dbo.CASHPAYMENTMETHODDETAIL
            set
              REFERENCEDATE = @REFERENCEDATE,
              REFERENCENUMBER = @REFERENCENUMBER,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.CASHPAYMENTMETHODDETAIL
              (ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 0 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_CASHPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 1 --Check

        begin
          update dbo.CHECKPAYMENTMETHODDETAIL
            set 
              CHECKNUMBER = @CHECKNUMBER,
              CHECKDATE = @CHECKDATE,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.CHECKPAYMENTMETHODDETAIL
              (ID, CHECKNUMBER, CHECKDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @CHECKNUMBER, @CHECKDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

        end
        else if @ORIGINALPAYMENTMETHODCODE = 1 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_CHECKPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 2 --Credit Card

        begin            

          update dbo.CREDITCARDPAYMENTMETHODDETAIL
            set
              CARDHOLDERNAME = COALESCE(@CARDHOLDERNAME,''),
              CREDITCARDPARTIALNUMBER = COALESCE(@CREDITCARDNUMBER, ''),
              CREDITTYPECODEID = @CREDITTYPECODEID,
              AUTHORIZATIONCODE = @AUTHORIZATIONCODE,
              EXPIRESON = COALESCE(@EXPIRESON, '00000000'),
              VENDORID = 
                case
                  --Related to Bug 320341 Assume the caller doesn't know about the new

                  --@VENDORID parameter if they used the default values

                  --for both of these parameters, and just leave the current table

                  --value alone.

                  when @OVERRIDESAVEDVENDORID = 0 and @VENDORID is null
                    then CREDITCARDPAYMENTMETHODDETAIL.VENDORID
                  else
                    isnull(@VENDORID, '')
                end,
              TRANSACTIONID = 
                case
                  --Bug 320341 Assume the caller doesn't know about the new

                  --@BBPSTRANSACTIONID parameter if they used the default values

                  --for both of these parameters, and just leave the current table

                  --value alone.

                  when @OVERRIDESAVEDBBPSTRANSACTIONID = 0 and @BBPSTRANSACTIONID is null
                    then CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID
                  else
                    @BBPSTRANSACTIONID
                end,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

            if @@ROWCOUNT = 0
              insert into dbo.CREDITCARDPAYMENTMETHODDETAIL
                (ID, CARDHOLDERNAME, CREDITCARDPARTIALNUMBER, CREDITTYPECODEID, AUTHORIZATIONCODE, EXPIRESON, VENDORID, TRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                values (@PAYMENTMETHODID, COALESCE(@CARDHOLDERNAME,''), COALESCE(@CREDITCARDNUMBER,''), @CREDITTYPECODEID, @AUTHORIZATIONCODE,COALESCE(@EXPIRESON, '00000000'), isnull(@VENDORID, ''), @BBPSTRANSACTIONID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

        end 
        else if @ORIGINALPAYMENTMETHODCODE = 2 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_CREDITCARDPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 3 --Direct debit

        begin
          if (@DIRECTDEBITISREJECTED = 1) and (@REVENUEAMOUNT > 0)
          begin
            raiserror('BBERR_REVENUEAMOUNTABOVEZERODIRECTDEBITISREJECTED', 13, 1);
            return 1;
          end

          if @OVERRIDESAVEDSEPAMANDATEID = 0 and @SEPAMANDATEID is null
          begin
            --Related to Bug 320341. Assume the caller doesn't know about the new

            --@SEPAMANDATEID parameter if they used the default values for both of

            --these parameters, and just leave the current table value alone.

            select
              @SEPAMANDATEID = DIRECTDEBITPAYMENTMETHODDETAIL.SEPAMANDATEID
            from
              dbo.DIRECTDEBITPAYMENTMETHODDETAIL
            where
              DIRECTDEBITPAYMENTMETHODDETAIL.ID = @PAYMENTMETHODID;
          end

          --Run this before we update the payment method details, because we need to see if the SEPA Mandate has changed

          exec dbo.USP_SEPAMANDATE_PAYMENTMADE 
            @SEPAMANDATEID
            null, --BATCHROWID

            @REVENUEID
            @CHANGEAGENTID;

         declare @ORIGINALDIRECTDEBITREJECTED bit = 0;
         select
            @ORIGINALDIRECTDEBITREJECTED = DIRECTDEBITPAYMENTMETHODDETAIL.ISREJECTED
         from
            dbo.DIRECTDEBITPAYMENTMETHODDETAIL
         where
            DIRECTDEBITPAYMENTMETHODDETAIL.ID = @PAYMENTMETHODID;

         if @ORIGINALDIRECTDEBITREJECTED = 0  and @DIRECTDEBITISREJECTED = 1 and @SEPAMANDATEID is not null
         begin
           update dbo.SEPAMANDATE
            set
                PAYMENTCOUNT = PAYMENTCOUNT - 1,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE
            where
                SEPAMANDATE.ID =  @SEPAMANDATEID
                and PAYMENTCOUNT > 0;
         end

         if @ORIGINALDIRECTDEBITREJECTED = 1  and @DIRECTDEBITISREJECTED = 0 and @SEPAMANDATEID is not null
         begin
           update dbo.SEPAMANDATE
            set 
              PAYMENTCOUNT = PAYMENTCOUNT + 1,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where 
              SEPAMANDATE.ID = @SEPAMANDATEID;
         end

          update dbo.DIRECTDEBITPAYMENTMETHODDETAIL
            set 
              REFERENCEDATE = @REFERENCEDATE,
              REFERENCENUMBER = @REFERENCENUMBER,
              CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
              DIRECTDEBITRESULTCODE = @DIRECTDEBITRESULTCODE,
              ISREJECTED = @DIRECTDEBITISREJECTED,
              SEPAMANDATEID = @SEPAMANDATEID,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.DIRECTDEBITPAYMENTMETHODDETAIL
              (ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, DIRECTDEBITRESULTCODE, ISREJECTED, SEPAMANDATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @REFERENCEDATE, @REFERENCENUMBER, @CONSTITUENTACCOUNTID, @DIRECTDEBITRESULTCODE, @DIRECTDEBITISREJECTED, @SEPAMANDATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

        end
        else if @ORIGINALPAYMENTMETHODCODE = 3 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_DIRECTDEBITPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 4 --Stock

        begin
          -- Verify none of the price per share values are negative

          if @LOWPRICE < 0
          begin
            raiserror('BBERR_LOWPRICEPERSHARENEGATIVE', 13, 1)
            return 1
          end

          if @MEDIANPRICE < 0
          begin
            raiserror('BBERR_MEDIANPRICEPERSHARENEGATIVE', 13, 1)
            return 1
          end

          if @HIGHPRICE < 0
          begin
            raiserror('BBERR_HIGHPRICEPERSHARENEGATIVE', 13, 1)
            return 1
          end

          -- Get currency rounding information.

          declare @DECIMALDIGITS tinyint;
          declare @ROUNDINGTYPECODE tinyint;
          select
            @DECIMALDIGITS = DECIMALDIGITS, 
            @ROUNDINGTYPECODE = ROUNDINGTYPECODE
          from dbo.UFN_CURRENCY_GETPROPERTIES(@TRANSACTIONCURRENCYID);

          -- Verify that the number of units isn't less than the number of units sold

          if @NUMBEROFUNITS < coalesce((select sum(NUMBEROFUNITS) from dbo.STOCKSALE where STOCKDETAILID = @PAYMENTMETHODID), 0)
          begin
            raiserror('BBERR_NUMBEROFUNITSLESSTHANNUMBEROFUNITSSOLD', 13, 1)
            return 1
          end

          -- Convert amounts to base and organization amounts.

          set @LOWPRICE = coalesce(@LOWPRICE, 0);
          set @MEDIANPRICE = coalesce(@MEDIANPRICE, 0);
          set @HIGHPRICE = coalesce(@HIGHPRICE, 0);

          --exec dbo.USP_CURRENCY_GETCURRENCYVALUES @LOWPRICE, @CHANGEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASELOWPRICE output, default, @ORGANIZATIONLOWPRICE output, @ORGANIZATIONEXCHANGERATEID output, 1;

          --exec dbo.USP_CURRENCY_GETCURRENCYVALUES @MEDIANPRICE, @CHANGEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEMEDIANPRICE output, default, @ORGANIZATIONMEDIANPRICE output, @ORGANIZATIONEXCHANGERATEID output, 1;

          --exec dbo.USP_CURRENCY_GETCURRENCYVALUES @HIGHPRICE, @CHANGEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEHIGHPRICE output, default, @ORGANIZATIONHIGHPRICE output, @ORGANIZATIONEXCHANGERATEID output, 1;


          if @BASECURRENCYID <> @TRANSACTIONCURRENCYID
          begin
            set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID, @BASECURRENCYID, @CHANGEDATE, 1, NULL); 

            declare @BASEROUNDINGTYPECODE tinyint;
            declare @BASERATE decimal(20,8);
            select
              @BASEROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
              @BASERATE = CURRENCYEXCHANGERATE.RATE
            from
              dbo.CURRENCYEXCHANGERATE
              inner join dbo.CURRENCY on CURRENCY.ID = CURRENCYEXCHANGERATE.TOCURRENCYID
            where
              CURRENCYEXCHANGERATE.ID = @BASEEXCHANGERATEID;

            set @BASELOWPRICE =  coalesce(convert(decimal(20,4),@LOWPRICE) * @BASERATE,0);
            set @BASEMEDIANPRICE = coalesce(convert(decimal(20,4),@MEDIANPRICE) * @BASERATE,0);
            set @BASEHIGHPRICE = coalesce(convert(decimal(20,4),@HIGHPRICE) * @BASERATE,0);
          end
          else
          begin
            set @BASELOWPRICE =  @LOWPRICE;
            set @BASEMEDIANPRICE = @MEDIANPRICE;
            set @BASEHIGHPRICE = @HIGHPRICE;
          end

          declare @ORGANIZATIONCURRENCYID uniqueidentifier;
          set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

          if @ORGANIZATIONCURRENCYID <> @BASECURRENCYID
            begin
              set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CHANGEDATE, null, @TRANSACTIONCURRENCYID);                    

              declare @ORGANIZATIONROUNDINGTYPECODE tinyint;
              declare @ORGANIZATIONRATE decimal(20,8);
              select
                @ORGANIZATIONROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
                @ORGANIZATIONRATE = CURRENCYEXCHANGERATE.RATE
              from
                dbo.CURRENCYEXCHANGERATE
                inner join dbo.CURRENCY on CURRENCY.ID = CURRENCYEXCHANGERATE.TOCURRENCYID
              where
                CURRENCYEXCHANGERATE.ID = @ORGANIZATIONEXCHANGERATEID;

              set @ORGANIZATIONLOWPRICE = coalesce(convert(decimal(20,4),@BASELOWPRICE) * @ORGANIZATIONRATE,0);
              set @ORGANIZATIONMEDIANPRICE = coalesce(convert(decimal(20,4),@BASEMEDIANPRICE) * @ORGANIZATIONRATE,0);
              set @ORGANIZATIONHIGHPRICE = coalesce(convert(decimal(20,4),@BASEHIGHPRICE) * @ORGANIZATIONRATE,0);
            end
          else
            begin
              set @ORGANIZATIONLOWPRICE = @BASELOWPRICE;
              set @ORGANIZATIONMEDIANPRICE = @BASEMEDIANPRICE;
              set @ORGANIZATIONHIGHPRICE = @BASEHIGHPRICE;
            end

          if @NUMBEROFUNITS is null
            set @NUMBEROFUNITS = 0;

          update dbo.STOCKDETAIL
            set
              ISSUER = @ISSUER,
              NUMBEROFUNITS = @NUMBEROFUNITS,
              SYMBOL = @SYMBOL,
              MEDIANPRICE = @BASEMEDIANPRICE,
              LOWPRICE = @BASELOWPRICE,
              HIGHPRICE = @BASEHIGHPRICE,
              TRANSACTIONLOWPRICE = @LOWPRICE,
              TRANSACTIONMEDIANPRICE = @MEDIANPRICE,
              TRANSACTIONHIGHPRICE = @HIGHPRICE,
              ORGANIZATIONLOWPRICE = @ORGANIZATIONLOWPRICE,
              ORGANIZATIONMEDIANPRICE = @ORGANIZATIONMEDIANPRICE,
              ORGANIZATIONHIGHPRICE = @ORGANIZATIONHIGHPRICE,
              BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
              ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.STOCKDETAIL
              (ID, ISSUER, NUMBEROFUNITS, SYMBOL, LOWPRICE, MEDIANPRICE, HIGHPRICE, TRANSACTIONLOWPRICE, TRANSACTIONMEDIANPRICE, TRANSACTIONHIGHPRICE, ORGANIZATIONLOWPRICE, ORGANIZATIONMEDIANPRICE, ORGANIZATIONHIGHPRICE, BASECURRENCYID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @ISSUER, @NUMBEROFUNITS, @SYMBOL, @BASELOWPRICE, @BASEMEDIANPRICE, @BASEHIGHPRICE, @LOWPRICE, @MEDIANPRICE, @HIGHPRICE, @ORGANIZATIONLOWPRICE, @ORGANIZATIONMEDIANPRICE, @ORGANIZATIONHIGHPRICE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end    
        else if @ORIGINALPAYMENTMETHODCODE = 4 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_STOCKDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 5 --Property

        begin

          update dbo.PROPERTYDETAIL_EXT
            set 
              PROPERTYSUBTYPECODEID = @PROPERTYSUBTYPECODEID,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
              where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
          begin
            -- Check if any of the sold property fields are set

            if @SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1
            begin
              exec dbo.USP_CURRENCY_GETCURRENCYVALUES @SALEAMOUNT, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASESALEAMOUNT output, default, @ORGANIZATIONSALEAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
              exec dbo.USP_CURRENCY_GETCURRENCYVALUES @BROKERFEE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEBROKERFEE output, default, @ORGANIZATIONBROKERFEE output, @ORGANIZATIONEXCHANGERATEID output, 1;

              insert into dbo.PROPERTYDETAIL
                (ID,PROPERTYSUBTYPECODEID,SALEDATE,SALEAMOUNT,BROKERFEE,SALEPOSTDATE,SALEPOSTSTATUSCODE,TRANSACTIONSALEAMOUNT, TRANSACTIONBROKERFEE, ORGANIZATIONSALEAMOUNT, ORGANIZATIONBROKERFEE, BASECURRENCYID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                values (@PAYMENTMETHODID,@PROPERTYSUBTYPECODEID,@SALEDATE,@BASESALEAMOUNT,@BASEBROKERFEE,@SALEPOSTDATE,@SALEPOSTSTATUSCODE,@SALEAMOUNT, @BROKERFEE, @ORGANIZATIONSALEAMOUNT, @ORGANIZATIONBROKERFEE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);
            end
            else
              insert into dbo.PROPERTYDETAIL
                (ID,PROPERTYSUBTYPECODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                values (@PAYMENTMETHODID,@PROPERTYSUBTYPECODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);
          end
          else
          begin
            if @SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1
            begin
              exec dbo.USP_CURRENCY_GETCURRENCYVALUES @SALEAMOUNT, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASESALEAMOUNT output, default, @ORGANIZATIONSALEAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
              exec dbo.USP_CURRENCY_GETCURRENCYVALUES @BROKERFEE, @SALEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEBROKERFEE output, default, @ORGANIZATIONBROKERFEE output, @ORGANIZATIONEXCHANGERATEID output, 1;

              update dbo.PROPERTYDETAIL set
                SALEDATE = @SALEDATE,
                SALEAMOUNT = @BASESALEAMOUNT,
                BROKERFEE = @BASEBROKERFEE,
                SALEPOSTDATE = @SALEPOSTDATE,
                SALEPOSTSTATUSCODE = @SALEPOSTSTATUSCODE,
                TRANSACTIONSALEAMOUNT = @SALEAMOUNT,
                TRANSACTIONBROKERFEE = @BROKERFEE,
                ORGANIZATIONSALEAMOUNT = @ORGANIZATIONSALEAMOUNT,
                ORGANIZATIONBROKERFEE = @ORGANIZATIONBROKERFEE,
                BASECURRENCYID = @BASECURRENCYID,
                TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CHANGEDATE
              where
                ID = @PAYMENTMETHODID
            end
          end
        end
        else if @ORIGINALPAYMENTMETHODCODE = 5 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_PROPERTYDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        else if @ORIGINALPAYMENTMETHODCODE = 5 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_PROPERTYDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 6 --Gift in Kind

        begin
          declare @GIFTINKINDVALUE as money = 0;
          -- Catch any overflows

          begin try
            set @GIFTINKINDVALUE = @GIFTINKINDNUMBEROFUNITS * @GIFTINKINDFAIRMARKETVALUE
          end try
          begin catch
            raiserror('BBERR_REVENUEAMOUNTNOTEQUALGIFTINKINDAMOUNT', 13, 1)
            return 1
          end catch
          if (@GIFTINKINDNUMBEROFUNITS <> 0 or @GIFTINKINDFAIRMARKETVALUE <> 0) and (@REVENUEAMOUNT <> @GIFTINKINDVALUE)
          begin
            raiserror('BBERR_REVENUEAMOUNTNOTEQUALGIFTINKINDAMOUNT', 13, 1)
            return 1
          end

          -- Verify that the number of units isn't less than the number of units sold

          if @GIFTINKINDNUMBEROFUNITS < coalesce((select sum(NUMBEROFUNITS) from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @PAYMENTMETHODID), 0)
          begin
            raiserror('BBERR_GIFTINKINDNUMBEROFUNITSLESSTHANNUMBEROFUNITSSOLD', 13, 1)
           return 1
          end

          exec dbo.USP_CURRENCY_GETCURRENCYVALUES @GIFTINKINDFAIRMARKETVALUE, @CHANGEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEGIFTINKINDFAIRMARKETVALUE output, default, @ORGANIZATIONGIFTINKINDFAIRMARKETVALUE output, @ORGANIZATIONEXCHANGERATEID output, 1;

          update dbo.GIFTINKINDPAYMENTMETHODDETAIL
            set 
              GIFTINKINDSUBTYPECODEID = @GIFTINKINDSUBTYPECODEID,
              ITEMNAME = @GIFTINKINDITEMNAME,
              DISPOSITIONCODE = @GIFTINKINDDISPOSITIONCODE,
              NUMBEROFUNITS = @GIFTINKINDNUMBEROFUNITS,
              FAIRMARKETVALUE = @BASEGIFTINKINDFAIRMARKETVALUE,
              TRANSACTIONFAIRMARKETVALUE = @GIFTINKINDFAIRMARKETVALUE,
              ORGANIZATIONFAIRMARKETVALUE = @ORGANIZATIONGIFTINKINDFAIRMARKETVALUE,
              BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
              ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0 
            insert into dbo.GIFTINKINDPAYMENTMETHODDETAIL
              (ID,GIFTINKINDSUBTYPECODEID,ITEMNAME,DISPOSITIONCODE,NUMBEROFUNITS,FAIRMARKETVALUE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
              values (@PAYMENTMETHODID,@GIFTINKINDSUBTYPECODEID,@GIFTINKINDITEMNAME,@GIFTINKINDDISPOSITIONCODE,@GIFTINKINDNUMBEROFUNITS,@GIFTINKINDFAIRMARKETVALUE,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 6 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_GIFTINKINDPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 10 --Other

        begin
          update dbo.OTHERPAYMENTMETHODDETAIL
            set
              OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
              REFERENCEDATE = @REFERENCEDATE,
              REFERENCENUMBER = @REFERENCENUMBER,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.OTHERPAYMENTMETHODDETAIL
              (ID, OTHERPAYMENTMETHODCODEID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @OTHERPAYMENTMETHODCODEID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 10 or @ORIGINALPAYMENTMETHODCODE is null
          exec dbo.USP_OTHERPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;

        if @PAYMENTMETHODCODE = 11 --Standing Order

        begin
          update dbo.STANDINGORDERPAYMENTMETHODDETAIL
            set 
              REFERENCEDATE = @REFERENCEDATE,
              CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.STANDINGORDERPAYMENTMETHODDETAIL
              (ID, REFERENCEDATE, CONSTITUENTACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values (@PAYMENTMETHODID, @REFERENCEDATE, @CONSTITUENTACCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

          if not exists(select ID from dbo.REVENUESTANDINGORDER where ID = @REVENUEID)
            insert into dbo.REVENUESTANDINGORDER(ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values(@REVENUEID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 11 or @ORIGINALPAYMENTMETHODCODE is null
        begin
          exec dbo.USP_REVENUESTANDINGORDER_DELETEBYID_WITHCHANGEAGENTID @REVENUEID, @CHANGEAGENTID;
          exec dbo.USP_STANDINGORDERPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;
        end

        if @PAYMENTMETHODCODE = 101 -- PayPal

        begin
          update dbo.PAYPALPAYMENTMETHODDETAIL
            set
              REFERENCEDATE = @REFERENCEDATE,
              REFERENCENUMBER = @REFERENCENUMBER,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.PAYPALPAYMENTMETHODDETAIL
            (ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values
            (@PAYMENTMETHODID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 101 or @ORIGINALPAYMENTMETHODCODE is null
        begin
          exec dbo.USP_PAYPALPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;
        end

        if @PAYMENTMETHODCODE = 102 -- Venmo

        begin
          update dbo.VENMOPAYMENTMETHODDETAIL
            set
              REFERENCEDATE = @REFERENCEDATE,
              REFERENCENUMBER = @REFERENCENUMBER,
              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CHANGEDATE
            where ID = @PAYMENTMETHODID;

          if @@ROWCOUNT = 0
            insert into dbo.VENMOPAYMENTMETHODDETAIL
            (ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values
            (@PAYMENTMETHODID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
        end
        else if @ORIGINALPAYMENTMETHODCODE = 101 or @ORIGINALPAYMENTMETHODCODE is null
        begin
          exec dbo.USP_VENMOPAYMENTMETHODDETAIL_DELETEBYID_WITHCHANGEAGENTID @PAYMENTMETHODID, @CHANGEAGENTID;
        end
      end try
      begin catch
        exec dbo.USP_RAISE_ERROR;
      end catch