UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS

This function is used to adjust matching gift split amounts proportionally based on change to the matching gift amount.

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@SPLITS xml IN
@ADJUSTEDNEWMATCHINGGIFTAMOUNT money IN
@OLDMATCHINGGIFTAMOUNT money IN
@DECIMALDIGITS smallint IN
@ROUNDINGTYPECODE smallint IN

Definition

Copy


create function dbo.UFN_MATCHINGGIFTCLAIM_REPROPORTIONAMOUNTS(@SPLITS xml , @ADJUSTEDNEWMATCHINGGIFTAMOUNT money, @OLDMATCHINGGIFTAMOUNT money, @DECIMALDIGITS smallint, @ROUNDINGTYPECODE smallint)
RETURNS XML
as
begin

  declare @TOTALRATIO money;
  declare @CURRENTRATIO money;
  declare @NEWTOTAL money;
  declare @CURRENTAMOUNT money;
  declare @TEMPAMOUNT money;
  declare @COUNTER smallint;
  declare @TOTALROWS smallint;
  declare @TEMPTABLE table (ID uniqueidentifier, AMOUNT money, ROWNUMBER integer)  

  insert into @TEMPTABLE(ID,AMOUNT, ROWNUMBER)
          select
              ID, AMOUNT,ROW_NUMBER() OVER(ORDER BY ID)
          from
          dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLIT

      select @TOTALROWS = count(AMOUNT) from @TEMPTABLE;
      set @COUNTER = 1;
      set @TOTALRATIO = @OLDMATCHINGGIFTAMOUNT;
      SET @NEWTOTAL = @ADJUSTEDNEWMATCHINGGIFTAMOUNT;

    While @COUNTER <= @TOTALROWS
      begin
        select @CURRENTRATIO = AMOUNT from @TEMPTABLE where ROWNUMBER = @COUNTER;
        set @TEMPAMOUNT = (@CURRENTRATIO/@TOTALRATIO ) ;

        If @TOTALRATIO <> 0 

            set @CURRENTAMOUNT = dbo.UFN_CURRENCY_ROUND(@TEMPAMOUNT  * @NEWTOTAL,@DECIMALDIGITS, @ROUNDINGTYPECODE) ;
        Else
            set @CURRENTAMOUNT = 0;

        set @TOTALRATIO = @TOTALRATIO - @CURRENTRATIO
        set @NEWTOTAL = @NEWTOTAL-  @CURRENTAMOUNT
        update @TEMPTABLE set AMOUNT = @CURRENTAMOUNT where ROWNUMBER = @COUNTER;
        set @COUNTER = @COUNTER + 1;
      end

  return (select 
              SPLIT.ID,
              SPLIT.APPLICATIONCODE as APPLICATIONCODE, 
              SPLIT.TYPECODE as TYPECODE, 
              SPLIT.DESIGNATIONID as DESIGNATIONID,                     
              TEMP.AMOUNT  as AMOUNT, --rename AMOUNT field

              SPLIT.AMOUNT BASEAMOUNT,
              SPLIT.ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT,
              SPLIT.BASECURRENCYID BASECURRENCYID,
              SPLIT.ORGANIZATIONEXCHANGERATEID,
              SPLIT.TRANSACTIONCURRENCYID,
              SPLIT.BASEEXCHANGERATEID

      from @TEMPTABLE TEMP
      inner join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLIT on TEMP.ID = SPLIT.ID
      for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64);
end