UFN_CHECKDETAIL_INSTALLMENTSCHANGED

Determines if an installment has changed.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@installments xml IN

Definition

Copy


      CREATE function dbo.UFN_CHECKDETAIL_INSTALLMENTSCHANGED(@REVENUEID as uniqueidentifier, @installments as xml)
            returns bit
            with execute as caller
            as
            begin

                declare @INSTALLMENTSTABLE table
                (
                    ID uniqueidentifier,
                    SEQUENCE int,
                    AMOUNT money,
                    DATE datetime
                );

                declare @NEWINSTALLMENTSTABLE table
                (
                    ID uniqueidentifier,
                    SEQUENCE int,
                    AMOUNT money,
                    DATE datetime
                );

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

                insert into @NEWINSTALLMENTSTABLE(ID, SEQUENCE, AMOUNT, DATE
                    select ID, ROW_NUMBER() OVER (order by DATE, AMOUNT), AMOUNT, DATE from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS);

                insert into @INSTALLMENTSTABLE(ID, SEQUENCE, AMOUNT, DATE)
                    select ID, ROW_NUMBER() OVER (order by DATE, AMOUNT), TRANSACTIONAMOUNT, DATE from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2(@REVENUEID);

                select @INSTALLMENTSCOUNT = count(ID) from @INSTALLMENTSTABLE;

                if @INSTALLMENTSCOUNT <> (select count(*) from @NEWINSTALLMENTSTABLE
                    set @CHANGED = 1;

                if @CHANGED = 0
                begin
                    if exists(
                        select 1
                        from @NEWINSTALLMENTSTABLE
                        where ID is null
                    ) 
                        set @CHANGED = 1;

                    if @CHANGED = 0
                    begin
                        select @INSTALLMENTSCOUNT = count(*)
                        from @NEWINSTALLMENTSTABLE as [NEW
                         inner join @INSTALLMENTSTABLE as [OLD
                            on [NEW].SEQUENCE = [OLD].SEQUENCE 
                                and [NEW].AMOUNT = [OLD].AMOUNT 
                                and [NEW].DATE = [OLD].DATE;

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

                return @CHANGED;
            end