UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_3

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@GIVENANONYMOUSLY bit IN
@CONSTITUENTID uniqueidentifier IN
@AMOUNT money IN
@DATE datetime IN
@SOURCERECURRINGGIFTREVENUEID uniqueidentifier IN
@APPLICATIONTYPE tinyint IN
@APPLICATIONID uniqueidentifier IN
@BATCHROWID uniqueidentifier IN

Definition

Copy



    CREATE function dbo.UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_3
    (
      @GIVENANONYMOUSLY bit,
        @CONSTITUENTID uniqueidentifier,
        @AMOUNT money,
        @DATE datetime,
        @SOURCERECURRINGGIFTREVENUEID uniqueidentifier,
        @APPLICATIONTYPE tinyint = null,
        @APPLICATIONID uniqueidentifier = null,
      @BATCHROWID uniqueidentifier = null
    )
    returns @RECOGNITIONS table
        (
            CONSTITUENTID uniqueidentifier,
            NAME nvarchar(500),
            AMOUNT money,
            REVENUERECOGNITIONTYPECODEID uniqueidentifier
        )
        as
        begin
            declare @DEFAULTANONYMOUSRECOGNITION bit = 0;

            if @APPLICATIONTYPE is null
                set @APPLICATIONTYPE = 0;

            --Select the value for default anonymous recognition setting

            select @DEFAULTANONYMOUSRECOGNITION = DEFAULTANONYMOUSRECOGNITION
            from dbo.RECOGNITIONDEFAULT

            declare @R table
            (
                CONSTITUENTID uniqueidentifier,
                AMOUNT money,
                REVENUERECOGNITIONTYPECODEID uniqueidentifier
            );

            if @APPLICATIONTYPE = 3 --Matching gift claim

            begin

              if @GIVENANONYMOUSLY = 0 or @DEFAULTANONYMOUSRECOGNITION = 1
              begin

                  declare @AUTOADDMGPAYMENTCREDITTODONOR bit;
                  declare @AUTOADDMGPAYMENTCREDITTOMATCHINGORG bit;
                  declare @MGPAYMENTAPPLYRECOGNITIONTYPECODE bit;
                  declare @PAYMENTDEFAULTCREDITTYPEID uniqueidentifier;
                  declare @MATCHINGORGPAYMENTREVENUERECOGNITIONTYPECODEID uniqueidentifier;

                  select
                      @AUTOADDMGPAYMENTCREDITTODONOR = ADDRECOGNITIONCREDITSONMGPAYMENTAPPLY,
                      @AUTOADDMGPAYMENTCREDITTOMATCHINGORG = ADDRECOGNITIONCREDITSTOMATCHINGORGONMGPAYMENTAPPLY,
                      @MGPAYMENTAPPLYRECOGNITIONTYPECODE = MGPAYMENTAPPLYRECOGNITIONTYPECODE,
                      @PAYMENTDEFAULTCREDITTYPEID =    PAYMENTREVENUERECOGNITIONTYPECODEID,
                      @MATCHINGORGPAYMENTREVENUERECOGNITIONTYPECODEID = MATCHINGORGPAYMENTREVENUERECOGNITIONTYPECODEID
                  from
                      dbo.MATCHINGGIFTPREFERENCEINFO;

                  if @AUTOADDMGPAYMENTCREDITTODONOR = 1
                  begin
                      declare @ORIGINALDONORID uniqueidentifier;
                      declare @ORIGINALGIFTID uniqueidentifier;

                      select
                          @ORIGINALDONORID = FINANCIALTRANSACTION.CONSTITUENTID,
                          @ORIGINALGIFTID = FINANCIALTRANSACTION.ID
                      from
                          dbo.FINANCIALTRANSACTION
                          inner join REVENUEMATCHINGGIFT on REVENUEMATCHINGGIFT.MGSOURCEREVENUEID = FINANCIALTRANSACTION.ID
                          inner join REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                      where
                          REVENUEMATCHINGGIFT.ID = @APPLICATIONID

                      if @ORIGINALDONORID is not null
                      begin
                          if @MGPAYMENTAPPLYRECOGNITIONTYPECODE = 0 --Create recognition credit for donor only when applying a payment to a matching gift claim

                          begin
                              insert into @R  
                              select
                                  @ORIGINALDONORID as [CONSTITUENTID],
                                  @AMOUNT as [AMOUNT],
                                  @PAYMENTDEFAULTCREDITTYPEID as [REVENUERECOGNITIONTYPECODEID];
                          end
                          else if @MGPAYMENTAPPLYRECOGNITIONTYPECODE = 1 --Create recognition credits based on recognition from original revenue when applying a payment to a matching gift claim

                          begin
                              declare @GIFTSPLITS xml;
                              set @GIFTSPLITS = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@ORIGINALGIFTID);
                              insert into @R
                              select
                                  REVENUERECOGNITION.CONSTITUENTID as [CONSTITUENTID],
                                  sum(coalesce((@AMOUNT * REVENUERECOGNITION.AMOUNT / Nullif(FINANCIALTRANSACTION.BASEAMOUNT, 0.00)),0.00)) as [AMOUNT],
                              REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID as [REVENUERECOGNITIONTYPECODEID]
                              from
                                  dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@GIFTSPLITS) as SPT
                                  inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = SPT.ID
                  inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID=SPT.ID
                  inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID=FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                group by FINANCIALTRANSACTION.ID,
                          REVENUERECOGNITION.CONSTITUENTID,
                          REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID,
                  FINANCIALTRANSACTION.BASEAMOUNT;    
              end
                      end
                  end

                  if @AUTOADDMGPAYMENTCREDITTOMATCHINGORG = 1 --Add recognition for matching organization when applying a payment to a matching gift claim

                  begin

                      if exists (select 1
                              from dbo.INSTALLMENTSPLITPAYMENT 
                                  inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                                  inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                                  inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
                  inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID and REVENUERECOGNITION.CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID
                              where
                                  INSTALLMENTSPLITPAYMENT.PLEDGEID = @APPLICATIONID)
                      begin
                        insert into @R
                        select
                            @CONSTITUENTID,
                            @AMOUNT as [AMOUNT],
                            @MATCHINGORGPAYMENTREVENUERECOGNITIONTYPECODEID as [REVENUERECOGNITIONTYPECODEID]
                        from 
                            dbo.INSTALLMENTSPLITPAYMENT 
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
                            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                            inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
                            inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID and REVENUERECOGNITION.CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID
                        where
                            INSTALLMENTSPLITPAYMENT.PLEDGEID = @APPLICATIONID
                            group by FINANCIALTRANSACTION.CONSTITUENTID

                      end
                      else
                      begin
                          insert into @R
                          select
                              @CONSTITUENTID,
                              (@AMOUNT * coalesce(sum(RR.AMOUNT), sum(LT.ORGAMOUNT)) / sum(LT.ORGAMOUNT)) as [AMOUNT],
                              @MATCHINGORGPAYMENTREVENUERECOGNITIONTYPECODEID as [REVENUERECOGNITIONTYPECODEID]
                          from FINANCIALTRANSACTION FT 
                              inner join FINANCIALTRANSACTIONLINEITEM LT on LT.FINANCIALTRANSACTIONID = FT.ID
                              inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = FT.ID
                              left join REVENUERECOGNITION RR on RR.REVENUESPLITID = LT.ID and RR.CONSTITUENTID = FT.CONSTITUENTID
                          where FT.ID = @APPLICATIONID
                      end

                  end

                  insert into @RECOGNITIONS 
                  select
                      [RESULTS].CONSTITUENTID,
                      NF.NAME,
                      [RESULTS].AMOUNT,
                      [RESULTS].REVENUERECOGNITIONTYPECODEID
                  from
                      @R as [RESULTS]
                      cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME([RESULTS].CONSTITUENTID) NF
                  order by
                      NF.NAME;
              end
            end
            else if @APPLICATIONTYPE <> 2             -- @APPLICATIONTYPE = 2 is for Unapplied Matching gift claim. For Unapplied matching gift recognition credits should not create.

                    Or @APPLICATIONID is not null     -- @APPLICATIONTYPE = 2 is for Recurring gifts too but revenue stream for recurring gifts have @APPLICATIONID.

            begin

                -- Default source recurring gift ID if not provided

                if @SOURCERECURRINGGIFTREVENUEID is null and 
                    @APPLICATIONID is not null and
                    @APPLICATIONTYPE = 2
                begin
                    set @SOURCERECURRINGGIFTREVENUEID = @APPLICATIONID
                end

                if @GIVENANONYMOUSLY = 0 or @DEFAULTANONYMOUSRECOGNITION = 1
                begin
                    if exists(select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID) and @SOURCERECURRINGGIFTREVENUEID is null
                    begin
                        insert into @R(CONSTITUENTID, REVENUERECOGNITIONTYPECODEID, AMOUNT)
                            select CONSTITUENTID, REVENUERECOGNITIONTYPECODEID, AMOUNT
                            from dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@GIVENANONYMOUSLY, @CONSTITUENTID, @AMOUNT, @DATE, null);

            -- BUG#584814

            -- Handle recognition credits for spouse added through 'Edit Constituent'

            declare @ISINDIVIDUAL bit = (select (case when ISORGANIZATION = 1 or ISGROUP = 1 then 0 else 1 end)
                                          from dbo.CONSTITUENT
                                          where ID = @CONSTITUENTID);

            if @ISINDIVIDUAL = 1 and @BATCHROWID is not null
            begin
              declare @ISUPDATED bit = 0,
                        @NEWSPOUSEID uniqueidentifier,
                        @NEWSPOUSENAME nvarchar(50),
                        @NEWRELATIONSHIPTYPECODEID uniqueidentifier;

              -- check if the constituent has been updated or not

              select @ISUPDATED = 1,
                         @NEWSPOUSEID = SPOUSE_ID,
                         @NEWSPOUSENAME = (case SPOUSE_FIRSTNAME when '' then '' else SPOUSE_FIRSTNAME end) + 
                                                 (case SPOUSE_MIDDLENAME when '' then '' else LEFT(SPOUSE_MIDDLENAME,1) + '.' end) + 
                                                (case SPOUSE_LASTNAME when '' then '' else SPOUSE_LASTNAME end),
                       @NEWRELATIONSHIPTYPECODEID = SPOUSE_RELATIONSHIPTYPECODEID
              from BATCHCONSTITUENTUPDATE
              where ID = @BATCHROWID
                and PRIMARYRECORDID = @CONSTITUENTID;

              if @ISUPDATED = 1
              begin
                declare @OLDSPOUSEID uniqueidentifier;      

                -- check if the constituent already has a spouse

                  select @OLDSPOUSEID = RECIPROCALCONSTITUENTID
                  from RELATIONSHIP
                  where RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
                    and ISSPOUSE = 1;

                -- if a spouse has been added, then the credits need to be added

                  if (@NEWSPOUSEID is null and len(coalesce(@NEWSPOUSENAME, '')) > 0) or (@NEWSPOUSEID is not null and (@OLDSPOUSEID is null or @NEWSPOUSEID <> @OLDSPOUSEID))
                  begin
                      -- add recognition-credits using 'default relationship recognition options' for the added spouse

                      declare @MATCHFACTOR decimal,
                                  @REVENUERECOGNITIONTYPECODEID uniqueidentifier;
                      select @MATCHFACTOR = MATCHFACTOR,
                               @REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODEID
                      from RECOGNITIONRELATIONSHIPDEFAULT
                      where RELATIONSHIPTYPECODEID = @NEWRELATIONSHIPTYPECODEID
                      and CONSTITUENTTYPECODE = 0;    -- individual


                  if @NEWSPOUSEID is null
                    set @NEWSPOUSEID = @BATCHROWID;

                      if @MATCHFACTOR is not null and @MATCHFACTOR > 0
                      begin
                          insert into @RECOGNITIONS (CONSTITUENTID, NAME, AMOUNT, REVENUERECOGNITIONTYPECODEID)
                          values (@NEWSPOUSEID, @NEWSPOUSENAME, (@MATCHFACTOR * 0.01 * @AMOUNT), @REVENUERECOGNITIONTYPECODEID)
                      end
                  end  
              end
            end
                    end    
                    else
                    begin
                        --Basically, reimplementing UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS for imaginary batch constituents

                        -- Recurring gift payments copy constituents from recurring gift recognitions

                        -- and calculate amounts by getting the ratio of the payment amount to the recurring gift amount

                        -- and then multiplying by the previous recognition amount for that constituent.

                        if @SOURCERECURRINGGIFTREVENUEID is not null
                        begin
                            -- Calculate ratio if this is a recurring gift payment


                            -- Default ratio to 1 in case it isn't calculated

                            declare @RATIO decimal(20, 10)
                            select @RATIO = 1.0

                            declare @RECURRINGGIFTAMOUNT money                    
                            select @RECURRINGGIFTAMOUNT = AMOUNT from dbo.REVENUE where ID = @SOURCERECURRINGGIFTREVENUEID

                            -- If the recurring giftamount is 0, then the payment amount will be used since 

                            -- @RATIO will remain 1.

                            if @RECURRINGGIFTAMOUNT <> 0
                            begin
                                -- Cast @AMOUNT to a decimal(20, 10) so @RATIO has its full precision.

                                select @RATIO = cast(@AMOUNT as decimal(20, 10)) / @RECURRINGGIFTAMOUNT
                            end

                            insert into @R
                            (
                                CONSTITUENTID,
                                REVENUERECOGNITIONTYPECODEID,
                                AMOUNT
                            )
                            (
                                -- Create recognitions for constituents that were on the recurring gift recognitions.

                                select 
                                    RR.CONSTITUENTID,
                                    RR.REVENUERECOGNITIONTYPECODEID,
                                    AMOUNT = sum(RR.AMOUNT) * @RATIO
                                from dbo.REVENUERECOGNITION RR
                                inner join FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = RR.REVENUESPLITID 
                                where FTLI.FINANCIALTRANSACTIONID = @SOURCERECURRINGGIFTREVENUEID
                                group by RR.CONSTITUENTID, RR.REVENUERECOGNITIONTYPECODEID
                            )
                        end
                        else
                        begin
                            declare @DATEEARLIESTTIME datetime
                            set @DATEEARLIESTTIME = dbo.UFN_DATE_GETEARLIESTTIME(@DATE)

                            insert into @R
                            (
                                CONSTITUENTID,
                                REVENUERECOGNITIONTYPECODEID,
                                AMOUNT
                            )
                            select 
                                RECIPIENTCONSTITUENTID, 
                                REVENUERECOGNITIONTYPECODEID,
                                (MATCHFACTOR * 0.01 * @AMOUNT)
                            from 
                            dbo.UFN_BATCHCONSTITUENT_GETRECOGNITIONDEFAULTSBYSOURCE(@CONSTITUENTID, 1, 1
                            where 
                                (STARTDATE is null or STARTDATE <= @DATEEARLIESTTIME) and 
                                (ENDDATE is null or ENDDATE >= @DATEEARLIESTTIME)
                        end
                    end
                end

          insert into @RECOGNITIONS 
                  select
                      [RESULTS].CONSTITUENTID,
                      NF.NAME,
                      [RESULTS].AMOUNT,
                      [RESULTS].REVENUERECOGNITIONTYPECODEID
                  from
                      @R as [RESULTS]
                      outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME([RESULTS].CONSTITUENTID) NF
                      left join dbo.BATCHREVENUECONSTITUENT on [RESULTS].CONSTITUENTID = BATCHREVENUECONSTITUENT.ID and BATCHREVENUECONSTITUENT.EXISTINGCONSTITUENTID is null
              order by
                      coalesce(NF.NAME, BATCHREVENUECONSTITUENT.NAME);
      end

        return;
        end