UFN_OPPORTUNITY_DESIGNATIONSCHANGED

Checks if an opportunity's designations changed.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@OPPORTUNITYID uniqueidentifier IN
@DESIGNATIONS xml IN

Definition

Copy


            create function dbo.UFN_OPPORTUNITY_DESIGNATIONSCHANGED
            (
                @OPPORTUNITYID as uniqueidentifier, 
                @DESIGNATIONS as xml
            ) 
            returns bit
            with execute as caller
            as
            begin
                declare @DESIGNATIONSTABLE table
                (
                    ID uniqueidentifier,
                    AMOUNT money,
                    DESIGNATIONID uniqueidentifier
                );

                declare @NEWDESIGNATIONSTABLE table
                (
                    ID uniqueidentifier,
                    AMOUNT money,
                    DESIGNATIONID uniqueidentifier
                );

                declare @DESIGNATIONSCOUNT int
                declare @CHANGED as bit
                set @CHANGED = 0;

                if @CHANGED = 0
                begin
                    insert into @NEWDESIGNATIONSTABLE(ID, AMOUNT, DESIGNATIONID) 
                        select ID, AMOUNT, DESIGNATIONID from dbo.UFN_OPPORTUNITY_DESIGNATION_FROMITEMLISTXML(@DESIGNATIONS);

                    insert into @DESIGNATIONSTABLE(ID, AMOUNT, DESIGNATIONID)
                        select ID, AMOUNT, DESIGNATIONID from dbo.UFN_OPPORTUNITY_DESIGNATION(@OPPORTUNITYID);

                    select @DESIGNATIONSCOUNT = count(ID) from @DESIGNATIONSTABLE;

                    if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE
                        set @CHANGED = 1;

                    if @CHANGED = 0
                    begin
                        select @DESIGNATIONSCOUNT = count([NEW].ID)
                        from @NEWDESIGNATIONSTABLE as [NEW
                        inner join @DESIGNATIONSTABLE as [OLD
                            on [NEW].AMOUNT = [OLD].AMOUNT 
                            and ([NEW].DESIGNATIONID = [OLD].DESIGNATIONID or ([NEW].DESIGNATIONID is null and [OLD].DESIGNATIONID is null));

                        if @DESIGNATIONSCOUNT <> (select count(*) from @NEWDESIGNATIONSTABLE)
                            set @CHANGED = 1;
                    end

                end

                return @CHANGED
            end