USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATE

Adds or updates entries in the REVENUETRIBUTETAXCLAIMAMOUNT table.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


        CREATE procedure dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATE
        (
          @REVENUEID uniqueidentifier,
          @CHANGEAGENTID uniqueidentifier,
          @CURRENTDATE datetime
        )
        as
        begin
            declare @REVENUETRIBUTETOTAL money;
            declare @REVENUETRANSACTIONTYPECODE smallint;
            declare @REVENUETAXCLAIMAMOUNT money;
            declare @REVENUETOTAL money;
            declare @REVENUETRIBUTES table(ID uniqueidentifier, AMOUNT money, TAXCLAIMAMOUNT money);
            declare @TAXCLAIMDIFFERENCE money = 0;

            --get the total for all revenue tributes for the given revenue ID

            select @REVENUETRIBUTETOTAL = sum(AMOUNT)
            from dbo.REVENUETRIBUTE
            where REVENUEID = @REVENUEID;

            select @REVENUETOTAL = AMOUNT
            from dbo.REVENUE
            where ID = @REVENUEID;

            --get the transaction type code for the revenue record, which will decide how the tax claim amount for the revenue

            --  record will get calculated

            select @REVENUETRANSACTIONTYPECODE = TRANSACTIONTYPECODE
            from dbo.REVENUE
            where ID = @REVENUEID;

            --insert initial data into the temp table

            insert into @REVENUETRIBUTES
                select 
                    ID,
                    AMOUNT,
                    round(dbo.UFN_REVENUETRIBUTE_CALCULATEGROSSAMOUNT(TRIBUTEID, REVENUEID, AMOUNT),2) - AMOUNT as TAXCLAIMAMOUNT
                from
                    dbo.REVENUETRIBUTE
                where
                    REVENUEID = @REVENUEID;

            if @REVENUETRANSACTIONTYPECODE = 1
            begin
                select @REVENUETAXCLAIMAMOUNT = (sum(coalesce(TAXCLAIM.BASETAXCLAIMAMOUNT + TAXCLAIM.TRANSITIONALTAXCLAIMAMOUNT, 0)))
                from dbo.REVENUESPLIT
                    cross apply dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT(REVENUESPLIT.ID) as TAXCLAIM
                where REVENUESPLIT.REVENUEID = @REVENUEID
            end
            else
            begin
                set @REVENUETAXCLAIMAMOUNT = dbo.UFN_GIFTAIDREVENUESPLIT_GETTAXCLAIMAMOUNT(@REVENUEID, 1);
            end

            --If the totals are the same, check if there is any difference in the tax claim amounts.

            if @REVENUETRIBUTETOTAL = @REVENUETOTAL
            begin
                select @TAXCLAIMDIFFERENCE = @REVENUETAXCLAIMAMOUNT - sum(TAXCLAIMAMOUNT)
                from @REVENUETRIBUTES;
            end

            --If the difference is greater than 0, then add the difference to the tribute with the

            --    least amount of Gift Aid. If it is less than 0, then remove the difference from the

            --    tribute with the most Gift Aid. If there is no difference, do nothing.

            if @TAXCLAIMDIFFERENCE > 0
            begin
                declare @LEAST uniqueidentifier;
                select top 1 @LEAST = ID
                from @REVENUETRIBUTES
                order by TAXCLAIMAMOUNT asc;

                update @REVENUETRIBUTES
                set TAXCLAIMAMOUNT += @TAXCLAIMDIFFERENCE
                where ID = @LEAST;
            end
            else 
            begin
                if @TAXCLAIMDIFFERENCE < 0
                begin
                    declare @MOST uniqueidentifier;
                    select top 1 @MOST = ID
                    from @REVENUETRIBUTES
                    order by TAXCLAIMAMOUNT desc;

                    update @REVENUETRIBUTES
                    set TAXCLAIMAMOUNT += @TAXCLAIMDIFFERENCE
                    where ID = @MOST;
                end
            end

            declare @BASECURRENCYID uniqueidentifier;
            declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

            select
                @BASECURRENCYID = BASECURRENCYID,
                @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
            from
                dbo.REVENUE
            where
                ID = @REVENUEID

            declare REVENUETRIBUTEGIFTAIDCURSOR cursor local fast_forward
            for select ID, TAXCLAIMAMOUNT
            from @REVENUETRIBUTES;

            open REVENUETRIBUTEGIFTAIDCURSOR;

            declare @ID uniqueidentifier;
            declare @TAXCLAIMAMOUNT money;

            fetch next from REVENUETRIBUTEGIFTAIDCURSOR into @ID, @TAXCLAIMAMOUNT;

            while @@FETCH_STATUS = 0
            begin
                if exists(select 1 from dbo.REVENUETRIBUTETAXCLAIMAMOUNT where ID = @ID)
                begin
                    update dbo.REVENUETRIBUTETAXCLAIMAMOUNT
                    set 
                        TAXCLAIMAMOUNT = @TAXCLAIMAMOUNT,
                        BASECURRENCYID = @BASECURRENCYID,
                        ORGANIZATIONTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_CONVERT(@TAXCLAIMAMOUNT, @ORGANIZATIONEXCHANGERATEID),
                        ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @ID;
                end
                else
                begin
                    insert into dbo.REVENUETRIBUTETAXCLAIMAMOUNT (ID, TAXCLAIMAMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    values (@ID, @TAXCLAIMAMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
                end

                fetch next from REVENUETRIBUTEGIFTAIDCURSOR into @ID, @TAXCLAIMAMOUNT;
            end

            close REVENUETRIBUTEGIFTAIDCURSOR;
            deallocate REVENUETRIBUTEGIFTAIDCURSOR;
        end