UFN_PROPERTYDETAIL_TRANSACTIONDISTRIBUTIONCHANGED

Determines is a distribution has changed for a transaction.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@TRANSACTIONID uniqueidentifier IN
@DISTRIBUTION xml IN

Definition

Copy


            CREATE function dbo.UFN_PROPERTYDETAIL_TRANSACTIONDISTRIBUTIONCHANGED(@TRANSACTIONID as uniqueidentifier, @DISTRIBUTION as xml) 
            returns bit
            with execute as caller
            as
            begin
                declare @DISTRIBUTIONTABLE table
                (
                    ID uniqueidentifier,
                    PROPERTYDETAILID uniqueidentifier,
                    AMOUNT money,
                    DEBITACCOUNT nvarchar(100),
                    CREDITACCOUNT nvarchar(100),
                    PROJECT nvarchar(100)
                );

                declare @NEWDISTRIBUTIONTABLE table
                (
                    ID uniqueidentifier,
                    PROPERTYDETAILID uniqueidentifier,
                    AMOUNT money,
                    DEBITACCOUNT nvarchar(100),
                    CREDITACCOUNT nvarchar(100),
                    PROJECT nvarchar(100)
                );

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

                if @CHANGED = 0
                begin
                    insert into @NEWDISTRIBUTIONTABLE(ID, PROPERTYDETAILID, AMOUNT, DEBITACCOUNT, CREDITACCOUNT, PROJECT) 
                        select ID, PROPERTYDETAILID, AMOUNT, DEBITACCOUNT, CREDITACCOUNT, PROJECT from dbo.UFN_REVENUETRANSACTION_GETPROPERTYDETAILGLDISTRIBUTION_FROMITEMLISTXML(@DISTRIBUTION);

                    insert into @DISTRIBUTIONTABLE(ID, PROPERTYDETAILID, AMOUNT, DEBITACCOUNT, CREDITACCOUNT, PROJECT)
                        select ID, PROPERTYDETAILID, AMOUNT, DEBITACCOUNT, CREDITACCOUNT, PROJECT from dbo.PROPERTYDETAILGLDISTRIBUTION where PROPERTYDETAILID in (select ID from dbo.REVENUEPAYMENTMETHOD where REVENUEID = @TRANSACTIONID);

                    select @DISTCOUNT = count(ID) from @DISTRIBUTIONTABLE;

                    if @DISTCOUNT <> (select count(ID) from @NEWDISTRIBUTIONTABLE
                        set @CHANGED = 1;

                    if @CHANGED = 0
                    begin
                        select @DISTCOUNT = count([NEW].ID)
                        from @NEWDISTRIBUTIONTABLE as [NEW
                        inner join @DISTRIBUTIONTABLE as [OLD
                            on [NEW].AMOUNT = [OLD].AMOUNT 
                                and ([NEW].ID = [OLD].ID or ([NEW].ID is null and [OLD].ID is null)) 
                                and ([NEW].PROPERTYDETAILID = [OLD].PROPERTYDETAILID or ([NEW].PROPERTYDETAILID is null and [OLD].PROPERTYDETAILID is null)) 
                                and ([NEW].DEBITACCOUNT = [OLD].DEBITACCOUNT or ([NEW].DEBITACCOUNT is null and [OLD].DEBITACCOUNT is null)) 
                                and ([NEW].CREDITACCOUNT = [OLD].CREDITACCOUNT or ([NEW].CREDITACCOUNT is null and [OLD].CREDITACCOUNT is null))
                                and ([NEW].PROJECT = [OLD].PROJECT or ([NEW].PROJECT is null and [OLD].PROJECT is null));

                        if @DISTCOUNT <> (select count(ID) from @NEWDISTRIBUTIONTABLE)
                            set @CHANGED = 1;
                    end

                end

                return @CHANGED
            end