UFN_BATCHCONSTITUENT_GETRECOGNITIONDEFAULTSBYSOURCE

Returns the recognition defaults for a constituent created by a revenue batch.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@SOURCECONSTITUENTID uniqueidentifier IN
@INCLUDESELFMATCHING bit IN
@INCLUDEHOUSEHOLDSETTINGSGENERATEDDEFAULTS bit IN

Definition

Copy


            CREATE function dbo.UFN_BATCHCONSTITUENT_GETRECOGNITIONDEFAULTSBYSOURCE
            (
                @SOURCECONSTITUENTID uniqueidentifier,
                @INCLUDESELFMATCHING bit = 1,
                @INCLUDEHOUSEHOLDSETTINGSGENERATEDDEFAULTS bit = 1
            )
            returns @RECOGNITIONDEFAULTS table
            (
                ID uniqueidentifier default '00000000-0000-0000-0000-000000000000',
                RECIPIENTCONSTITUENTID uniqueidentifier,
                MATCHFACTOR decimal(5, 2),
                REVENUERECOGNITIONTYPECODEID uniqueidentifier,
                HOUSEHOLDSETTINGSGENERATED bit default 0,
                STARTDATE datetime,
                ENDDATE datetime
            )
            as
            begin
                declare @CURRENTDATEEARLIEST datetime = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
                declare @ISHOUSEHOLDMEMBER bit = 0;
                declare @ISHOUSEHOLD bit = 0;
                declare @ISNEWCONSTITUENT bit = 0;

                if exists (select ID from dbo.BATCHREVENUECONSTITUENT where ID = @SOURCECONSTITUENTID)
                begin
                    set @ISNEWCONSTITUENT = 1;
                end

                if @INCLUDEHOUSEHOLDSETTINGSGENERATEDDEFAULTS = 1
                begin
                    declare @MEMBERSHOUSEHOLDID uniqueidentifier
                    select
                        @MEMBERSHOUSEHOLDID = GROUPID
                    from 
                        dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                    where 
                        MEMBERID = @SOURCECONSTITUENTID;

                    if @MEMBERSHOUSEHOLDID is not null
                    begin
                        set @ISHOUSEHOLDMEMBER = 1

                        declare @MEMBERRECOGNIZEHOUSEHOLD bit;
                        declare @MEMBERRECOGNIZEMEMBER bit;
                        declare @MEMBERRECOGNIZEOTHERMEMBERSCODE tinyint;
                        declare @MEMBERREVENUERECOGNITIONTYPECODEID uniqueidentifier;
                        declare @MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID uniqueidentifier;

                        -- since @MEMBERHOUSEHOLDID isn't an actually household yet, this will use the defaults

                        select
                            @MEMBERRECOGNIZEHOUSEHOLD = MEMBERRECOGNIZEHOUSEHOLD,
                            @MEMBERRECOGNIZEMEMBER = MEMBERRECOGNIZEMEMBER,
                            @MEMBERRECOGNIZEOTHERMEMBERSCODE = MEMBERRECOGNIZEOTHERMEMBERSCODE,
                            @MEMBERREVENUERECOGNITIONTYPECODEID = MEMBERREVENUERECOGNITIONTYPECODEID,
                            @MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID = MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID
                        from 
                            dbo.UFN_HOUSEHOLD_GETRECOGNITIONSETTINGS(@MEMBERSHOUSEHOLDID);

                        if @MEMBERRECOGNIZEHOUSEHOLD = 1
                        begin
                            insert into @RECOGNITIONDEFAULTS
                            (
                                RECIPIENTCONSTITUENTID,
                                HOUSEHOLDSETTINGSGENERATED,
                                REVENUERECOGNITIONTYPECODEID,
                                MATCHFACTOR
                            )
                            values
                            (
                                @MEMBERSHOUSEHOLDID,
                                1,
                                @MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID,
                                100
                            )
                        end

                        if @MEMBERRECOGNIZEOTHERMEMBERSCODE = 1 -- all other members

                        begin
                            insert into @RECOGNITIONDEFAULTS
                            (
                                RECIPIENTCONSTITUENTID,
                                HOUSEHOLDSETTINGSGENERATED,
                                REVENUERECOGNITIONTYPECODEID,
                                MATCHFACTOR
                            )
                            select
                                coalesce(BATCHREVENUECONSTITUENT.EXISTINGCONSTITUENTID, BATCHREVENUECONSTITUENTGROUPMEMBER.MEMBERID),
                                1,
                                @MEMBERREVENUERECOGNITIONTYPECODEID,
                                100
                            from 
                                dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                                inner join dbo.BATCHREVENUECONSTITUENT on BATCHREVENUECONSTITUENTGROUPMEMBER.MEMBERID = BATCHREVENUECONSTITUENT.ID
                            where
                                BATCHREVENUECONSTITUENTGROUPMEMBER.GROUPID = @MEMBERSHOUSEHOLDID 
                                and BATCHREVENUECONSTITUENTGROUPMEMBER.MEMBERID <> @SOURCECONSTITUENTID
                        end
                    end
                    else
                    begin

                        select 
                            @ISHOUSEHOLD = case when GROUPTYPECODE = 0 and ISGROUP = 1 then 1 else 0 end
                        from 
                            dbo.BATCHREVENUECONSTITUENT 
                        where 
                            ID = @SOURCECONSTITUENTID

                        set @ISHOUSEHOLD = coalesce(@ISHOUSEHOLD, 0)

                        if @ISHOUSEHOLD = 1
                        begin                            
                            declare @HOUSEHOLDRECOGNIZEHOUSEHOLD bit;
                            declare @HOUSEHOLDRECOGNIZEMEMBERSCODE tinyint;
                            declare @HOUSEHOLDREVENUERECOGNITIONTYPECODEID uniqueidentifier;

                            -- since @SOURCECONSTITUENTID isn't an actual household/constituent yet, this will use the defaults

                            select
                                @HOUSEHOLDRECOGNIZEHOUSEHOLD = HOUSEHOLDRECOGNIZEHOUSEHOLD,
                                @HOUSEHOLDRECOGNIZEMEMBERSCODE = HOUSEHOLDRECOGNIZEMEMBERSCODE,
                                @HOUSEHOLDREVENUERECOGNITIONTYPECODEID = HOUSEHOLDREVENUERECOGNITIONTYPECODEID
                            from 
                                dbo.UFN_HOUSEHOLD_GETRECOGNITIONSETTINGS(@SOURCECONSTITUENTID);

                            if @HOUSEHOLDRECOGNIZEMEMBERSCODE = 1 -- all members

                            begin
                                insert into @RECOGNITIONDEFAULTS
                                (
                                    RECIPIENTCONSTITUENTID,
                                    HOUSEHOLDSETTINGSGENERATED,
                                    REVENUERECOGNITIONTYPECODEID,
                                    MATCHFACTOR
                                )
                                select
                                    coalesce(BATCHREVENUECONSTITUENT.EXISTINGCONSTITUENTID, BATCHREVENUECONSTITUENTGROUPMEMBER.MEMBERID),
                                    1,
                                    @HOUSEHOLDREVENUERECOGNITIONTYPECODEID,
                                    100
                                from 
                                    dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                                    inner join dbo.BATCHREVENUECONSTITUENT on BATCHREVENUECONSTITUENTGROUPMEMBER.MEMBERID = BATCHREVENUECONSTITUENT.ID
                                where
                                    BATCHREVENUECONSTITUENTGROUPMEMBER.GROUPID = @SOURCECONSTITUENTID 
                            end

                        -- @HOUSEHOLDRECOGNIZEMEMBERSCODE = 2 will be handled later, when the insert from REVENUERECOGNITIONDEFAULT occurs

                        end
                    end
                end

                -- always recognize themselves as long as @INCLUDESELFMATCHING is true

                if (
                    (@INCLUDESELFMATCHING = 1)
                    -- sanity check that this is a newly created constituent in batch

                    and @ISNEWCONSTITUENT = 1
                )
                begin
                    declare @DONORDEFAULTIDID uniqueidentifier;
                    select @DONORDEFAULTIDID = DONORREVENUERECOGNITIONTYPECODEID from dbo.RECOGNITIONDEFAULT;

                    insert into @RECOGNITIONDEFAULTS
                    (
                        RECIPIENTCONSTITUENTID, 
                        MATCHFACTOR,
                        REVENUERECOGNITIONTYPECODEID
                    )
                    select 
                        @SOURCECONSTITUENTID,
                        100,
                        @DONORDEFAULTIDID;
                end

        -- WI 676912

        -- Only use BATCHREVENUECONSTITUENTRELATION for defaults if not a new constituent

        -- Constituents created in batch should use recognition settings for defaulting

        -- New constituents will need to use BATCHREVENUECONSTITUENTRELATION defaulting data if default relationship recognition options are set

                if @ISNEWCONSTITUENT = 0 or exists (select top 1 ID from RECOGNITIONRELATIONSHIPDEFAULT)
                begin
                  -- insert what would be generated via REVENUERECOGNITIONDEFAULT

                  insert into @RECOGNITIONDEFAULTS
                  (
                      RECIPIENTCONSTITUENTID,
                      REVENUERECOGNITIONTYPECODEID,
                      MATCHFACTOR,
                      STARTDATE
                  )
                  select
                      COALESCE(BATCHREVENUECONSTITUENT.EXISTINGCONSTITUENTID, BATCHREVENUECONSTITUENTRELATION.RELATIONID),
                      BATCHREVENUECONSTITUENTRELATION.RECIPROCALRECOGNITIONTYPECODEID,
                      BATCHREVENUECONSTITUENTRELATION.RECIPROCALMATCHFACTOR,
                      BATCHREVENUECONSTITUENTRELATION.STARTDATE
                  from
                      dbo.BATCHREVENUECONSTITUENTRELATION
                      left join dbo.BATCHREVENUECONSTITUENT on BATCHREVENUECONSTITUENT.ID = BATCHREVENUECONSTITUENTRELATION.RELATIONID
                  where
                      BATCHREVENUECONSTITUENTRELATION.CONSTITUENTID = @SOURCECONSTITUENTID;
                end

                -- Remove duplicates - there should only be dupes if a default was added

                -- both by a household setting and a relationship recognition entry.

                -- Priority is given to the relationship record since that means a user overrode

                -- the household setting.

                delete 
                    @RECOGNITIONDEFAULTS
                from 
                    @RECOGNITIONDEFAULTS as [BASETABLE]
                where
                    (
                        (BASETABLE.HOUSEHOLDSETTINGSGENERATED = 1)
                        and exists (
                            select 
                                1 
                            from 
                                @RECOGNITIONDEFAULTS as [SUBTABLE]
                            where
                                [SUBTABLE].HOUSEHOLDSETTINGSGENERATED = 0 
                                and [BASETABLE].RECIPIENTCONSTITUENTID = [SUBTABLE].RECIPIENTCONSTITUENTID
                        )
                    );

                return;
            end