USP_REVENUE_ADDPAYMENTDETAILS

Stored proc to apply add payment details for a given revenue record

Parameters

Parameter Parameter Type Mode Description
@ID 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
@SALEDATE datetime IN
@SALEAMOUNT money IN
@BROKERFEE money IN
@SALEPOSTSTATUSCODE tinyint IN
@SALEPOSTDATE datetime IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@KEYALREADYOPEN bit IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@DIRECTDEBITRESULTCODE nvarchar(10) IN
@LOWPRICE decimal(19, 4) IN
@HIGHPRICE decimal(19, 4) IN
@NUMBEROFUNITSSOLD decimal(20, 3) IN
@USERMODIFIEDNUMBEROFUNITSSOLD bit IN
@TRANSACTIONID uniqueidentifier 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
@MERCHANTACCOUNTID uniqueidentifier IN
@SALE_LOWPRICE decimal(19, 4) IN
@SALE_MEDIANPRICE decimal(19, 4) IN
@SALE_HIGHPRICE decimal(19, 4) IN
@VENDORID nvarchar(50) IN
@SEPAMANDATEID uniqueidentifier IN

Definition

Copy


      CREATE procedure dbo.USP_REVENUE_ADDPAYMENTDETAILS
      (
        @ID 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,
        @SALEDATE datetime = null,
        @SALEAMOUNT money = null,
        @BROKERFEE money = null,
        @SALEPOSTSTATUSCODE tinyint = null,
        @SALEPOSTDATE datetime = null,
        @PROPERTYSUBTYPECODEID uniqueidentifier = null,
        @GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
        @CHANGEAGENTID uniqueidentifier,
        @CURRENTDATE datetime,
        @KEYALREADYOPEN bit = 0,
        @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
        @DIRECTDEBITRESULTCODE nvarchar(10) = '',
        @LOWPRICE decimal(19,4) = null,
        @HIGHPRICE decimal(19,4) = null,
        @NUMBEROFUNITSSOLD decimal(20,3) = null,
        @USERMODIFIEDNUMBEROFUNITSSOLD bit = null,
        @TRANSACTIONID uniqueidentifier = null,
        @REVENUEAMOUNT money = 0, -- Note that this and all other amounts should be passed in as transaction amounts.

        @GIFTINKINDITEMNAME nvarchar(100) = '',
        @GIFTINKINDDISPOSITIONCODE tinyint = 0,
        @GIFTINKINDNUMBEROFUNITS int = 0,
        @GIFTINKINDFAIRMARKETVALUE money = 0,
        @DIRECTDEBITISREJECTED bit = 0,
        @BASECURRENCYID uniqueidentifier = null,
        @TRANSACTIONCURRENCYID uniqueidentifier = null,
        @BASEEXCHANGERATEID uniqueidentifier = null,
        @MERCHANTACCOUNTID uniqueidentifier = null,
        @SALE_LOWPRICE decimal(19,4) = 0,
        @SALE_MEDIANPRICE decimal(19,4) = 0,
        @SALE_HIGHPRICE decimal(19,4) = 0,
        @VENDORID nvarchar(50) = '',
        @SEPAMANDATEID uniqueidentifier = null
      )
      as 
      set nocount on;

      --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 = @ID

      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 @BASE_SALELOWPRICE decimal(19,4);
      declare @BASE_SALEMEDIANPRICE decimal(19,4);
      declare @BASE_SALEHIGHPRICE decimal(19,4);            
      declare @ORGANIZATION_SALELOWPRICE decimal(19,4);
      declare @ORGANIZATION_SALEMEDIANPRICE decimal(19,4);
      declare @ORGANIZATION_SALEHIGHPRICE decimal(19,4);    

      declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

      begin try
        if @PAYMENTMETHODCODE = 0 -- Cash

        insert into dbo.CASHPAYMENTMETHODDETAIL(ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        if @PAYMENTMETHODCODE = 1 -- Check

        insert into dbo.CHECKPAYMENTMETHODDETAIL(ID, CHECKDATE, CHECKNUMBER, CONSTITUENTACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values (@ID, @CHECKDATE, @CHECKNUMBER, @CONSTITUENTACCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        if @PAYMENTMETHODCODE = 2 -- Credit Card

        begin
          insert into dbo.CREDITCARDPAYMENTMETHODDETAIL(ID, CARDHOLDERNAME, CREDITTYPECODEID, CREDITCARDPARTIALNUMBER, EXPIRESON, AUTHORIZATIONCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONID, MERCHANTACCOUNTID, VENDORID)
          values (@ID, coalesce(@CARDHOLDERNAME, ''), @CREDITTYPECODEID, coalesce(@CREDITCARDNUMBER, ''), coalesce(@EXPIRESON, '00000000'), coalesce(@AUTHORIZATIONCODE, ''), @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @TRANSACTIONID, @MERCHANTACCOUNTID, isnull(@VENDORID, ''));
        end

        if @PAYMENTMETHODCODE = 3 -- Direct Debit

        insert into dbo.DIRECTDEBITPAYMENTMETHODDETAIL(ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, DIRECTDEBITRESULTCODE, ISREJECTED, SEPAMANDATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CONSTITUENTACCOUNTID, @DIRECTDEBITRESULTCODE,  coalesce(@DIRECTDEBITISREJECTED, 0), @SEPAMANDATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        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;
          select
            @DECIMALDIGITS = DECIMALDIGITS
          from dbo.UFN_CURRENCY_GETPROPERTIES(@TRANSACTIONCURRENCYID);

          -- Convert amounts to base and organization amounts.

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

          set @SALE_LOWPRICE = coalesce(@SALE_LOWPRICE, 0);
          set @SALE_MEDIANPRICE = coalesce(@SALE_MEDIANPRICE, 0);
          set @SALE_HIGHPRICE = coalesce(@SALE_HIGHPRICE, 0);

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

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

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


          if @BASECURRENCYID <> @TRANSACTIONCURRENCYID
          begin
            if @BASEEXCHANGERATEID is null
              set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID, @BASECURRENCYID, @CURRENTDATE, 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);

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

            set @BASE_SALELOWPRICE =  @SALE_LOWPRICE;
            set @BASE_SALEMEDIANPRICE = @SALE_MEDIANPRICE;
            set @BASE_SALEHIGHPRICE = @SALE_HIGHPRICE;
          end

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

          if @ORGANIZATIONCURRENCYID <> @BASECURRENCYID
            begin
              set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 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);

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

              set @ORGANIZATION_SALELOWPRICE = @BASE_SALELOWPRICE;
              set @ORGANIZATION_SALEMEDIANPRICE =  @BASE_SALEMEDIANPRICE;
              set @ORGANIZATION_SALEHIGHPRICE =  @BASE_SALEHIGHPRICE;
            end

          -- Add the stock detail record.


          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 (@ID, @ISSUER,coalesce(@NUMBEROFUNITS, 0),@SYMBOL, @BASELOWPRICE, @BASEMEDIANPRICE, @BASEHIGHPRICE, @LOWPRICE, @MEDIANPRICE, @HIGHPRICE, @ORGANIZATIONLOWPRICE, @ORGANIZATIONMEDIANPRICE, @ORGANIZATIONHIGHPRICE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

          -- Default units sold to the full amount if the sold amount isn't set

          if @NUMBEROFUNITSSOLD = 0 and @USERMODIFIEDNUMBEROFUNITSSOLD = 0
            set @NUMBEROFUNITSSOLD = @NUMBEROFUNITS

          -- Create a stock sale record if needed

          if (@SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1 or (@NUMBEROFUNITSSOLD > 0 and @NUMBEROFUNITSSOLD <> @NUMBEROFUNITS)) and @NUMBEROFUNITS > 0
          begin
            declare @STOCKSALEID uniqueidentifier = newid()

            -- Convert amounts to base and organization, then add the stock sale record.


            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.STOCKSALE (ID, STOCKDETAILID, NUMBEROFUNITS, SALEDATE, SALEAMOUNT, FEE, LOWPRICE, MEDIANPRICE, HIGHPRICE, SALEPOSTDATE, SALEPOSTSTATUSCODE, TRANSACTIONSALEAMOUNT, TRANSACTIONFEE, TRANSACTIONLOWPRICE, TRANSACTIONMEDIANPRICE, TRANSACTIONHIGHPRICE, ORGANIZATIONSALEAMOUNT, ORGANIZATIONFEE, ORGANIZATIONLOWPRICE, ORGANIZATIONMEDIANPRICE, ORGANIZATIONHIGHPRICE, BASECURRENCYID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values (@STOCKSALEID, @ID, @NUMBEROFUNITSSOLD, @SALEDATE, @BASESALEAMOUNT, @BASEBROKERFEE, @BASE_SALELOWPRICE, @BASE_SALEMEDIANPRICE, @BASE_SALEHIGHPRICE, @SALEPOSTDATE, @SALEPOSTSTATUSCODE, @SALEAMOUNT, @BROKERFEE, @SALE_LOWPRICE, @SALE_MEDIANPRICE, @SALE_HIGHPRICE, @ORGANIZATIONSALEAMOUNT, @ORGANIZATIONBROKERFEE, @ORGANIZATION_SALELOWPRICE, @ORGANIZATION_SALEMEDIANPRICE, @ORGANIZATION_SALEHIGHPRICE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)

            -- Generate the GL distributions for the stock sale

            if @SALEPOSTSTATUSCODE <> 2
            begin
              exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE, @STOCKSALEID;
            end
          end
        end

        if @PAYMENTMETHODCODE = 5 --Property

        begin
          -- Check if any of the sold property values are set

          if @SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1
          begin
            -- Convert amounts to base and organization, then add the property detail record.


            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 (@ID, @PROPERTYSUBTYPECODEID, @SALEDATE, @BASESALEAMOUNT, @BASEBROKERFEE, @SALEPOSTDATE, @SALEPOSTSTATUSCODE, @SALEAMOUNT, @BROKERFEE, @ORGANIZATIONSALEAMOUNT, @ORGANIZATIONBROKERFEE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

            -- Generate the GL distributions for the property sale

            if @SALEPOSTSTATUSCODE <> 2
              exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
          end
          else
            insert into dbo.PROPERTYDETAIL (ID, PROPERTYSUBTYPECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASECURRENCYID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
            values (@ID, @PROPERTYSUBTYPECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID);
        end

        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

          -- Convert amounts to base and organization, then add the GIK payment method detail record.

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

          insert into dbo.GIFTINKINDPAYMENTMETHODDETAIL(ID, GIFTINKINDSUBTYPECODEID, ITEMNAME, DISPOSITIONCODE, NUMBEROFUNITS, FAIRMARKETVALUE, TRANSACTIONFAIRMARKETVALUE, ORGANIZATIONFAIRMARKETVALUE, TRANSACTIONCURRENCYID, BASECURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
          values (@ID, @GIFTINKINDSUBTYPECODEID, @GIFTINKINDITEMNAME, @GIFTINKINDDISPOSITIONCODE, @GIFTINKINDNUMBEROFUNITS, @BASEGIFTINKINDFAIRMARKETVALUE, @GIFTINKINDFAIRMARKETVALUE, @ORGANIZATIONGIFTINKINDFAIRMARKETVALUE, @TRANSACTIONCURRENCYID, @BASECURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
        end

        if @PAYMENTMETHODCODE = 10 -- Other

        insert into dbo.OTHERPAYMENTMETHODDETAIL(ID, OTHERPAYMENTMETHODCODEID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values (@ID, @OTHERPAYMENTMETHODCODEID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

        if @PAYMENTMETHODCODE = 11 -- Standing Order

        begin
          insert into dbo.STANDINGORDERPAYMENTMETHODDETAIL(ID, REFERENCEDATE, CONSTITUENTACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            values (@ID, @REFERENCEDATE, @CONSTITUENTACCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

          insert into dbo.REVENUESTANDINGORDER(ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              values(@REVENUEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
        end

        if @PAYMENTMETHODCODE = 101 -- PayPal

        begin
          insert into dbo.PAYPALPAYMENTMETHODDETAIL(ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
          values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
        end

        if @PAYMENTMETHODCODE = 102 -- Venmo

        begin
          insert into dbo.VENMOPAYMENTMETHODDETAIL(ID, REFERENCEDATE, REFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
          values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
        end
      end try
      begin catch
        exec dbo.USP_RAISE_ERROR;

        if @KEYALREADYOPEN = 0 
          close symmetric key sym_BBInfinity;
      end catch