UFN_REVENUE_GETPROPERTYDETAILSPLITS

Generates the splits for property gain/loss and fees.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@PROPERTYDETAILID uniqueidentifier IN
@PAYMENTMETHODCODE int IN

Definition

Copy


            CREATE function dbo.UFN_REVENUE_GETPROPERTYDETAILSPLITS(@PROPERTYDETAILID uniqueidentifier, @PAYMENTMETHODCODE int)
                returns @SPLITS TABLE
                (
                    REVENUESPLITID uniqueidentifier,
                    AMOUNT    money
                )
            as
                begin
                    declare @REVENUESPLITID uniqueidentifier;
                    declare @SPLITAMOUNT decimal(20, 2);                    
                    declare @AMOUNT_TO_DISTRIBUTE decimal(20, 2);
                    declare @REVENUEAMOUNT decimal(20, 2);

                    declare @AMOUNTIDEAL decimal(20, 4);
                    declare @AMOUNT decimal(20, 2);
                    declare @AMOUNTDISTRIBUTED decimal(20, 4);
                    declare @AMOUNTDISTRIBUTEDIDEAL decimal(20, 4);

                    set @AMOUNTIDEAL = 0;
                    set @AMOUNT = 0;
                    set @AMOUNTDISTRIBUTED = 0;
                    set @AMOUNTDISTRIBUTEDIDEAL = 0;        

                    -- get Revenue amount

                    select @REVENUEAMOUNT = sum(amount) from dbo.REVENUE                        
                        where REVENUE.ID = @PROPERTYDETAILID;

                    -- get the amount to be distributed

                    select @AMOUNT_TO_DISTRIBUTE = 
                        case  
                            when @PAYMENTMETHODCODE = 21 or @PAYMENTMETHODCODE = 23 then ABS(PD.SALEAMOUNT - @REVENUEAMOUNT) -- distribute gain/loss

                            when @PAYMENTMETHODCODE = 24 then PD.BROKERFEE                                                     -- distribute broker fee

                        end 
                    from dbo.PROPERTYDETAIL as PD where PD.ID = @PROPERTYDETAILID;

                    -- get the Revenue splits

                    declare SPLITS_CURSOR cursor local fast_forward for
                        select 
                            RDS.ID as REVENUESPLITID,
                            RDS.AMOUNT
                        from dbo.REVENUE as RD
                        inner join dbo.REVENUESPLIT as RDS on RD.ID = RDS.REVENUEID
                        where
                            RD.ID = @PROPERTYDETAILID;

                    open SPLITS_CURSOR;
                    fetch next from SPLITS_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;

                    while @@FETCH_STATUS = 0 begin
                        if @REVENUEAMOUNT = 0 
                            set @AMOUNTIDEAL = 0;
                        else    
                            set @AMOUNTIDEAL =     @AMOUNT_TO_DISTRIBUTE * (@SPLITAMOUNT / @REVENUEAMOUNT);

                        set @AMOUNT = ROUND(@AMOUNTIDEAL + @AMOUNTDISTRIBUTEDIDEAL - @AMOUNTDISTRIBUTED, 2);
                        set @AMOUNTDISTRIBUTEDIDEAL = @AMOUNTDISTRIBUTEDIDEAL + @AMOUNTIDEAL;
                        set @AMOUNTDISTRIBUTED = @AMOUNTDISTRIBUTED + @AMOUNT;

                        insert into @SPLITS (REVENUESPLITID, AMOUNT) values (@REVENUESPLITID, @AMOUNT);

                        fetch next from SPLITS_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;
                    end

                    close SPLITS_CURSOR;
                    deallocate SPLITS_CURSOR;

                    return;
                end