USP_REVENUE_GETBENEFITS_3_ADDFROMXML

Adds benefits to a revenue record.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@XML xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUE_GETBENEFITS_3_ADDFROMXML
            (
                @REVENUEID uniqueidentifier,
                @XML xml,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
            )
            as
            set nocount on;

            if @CHANGEAGENTID is null
                exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

            if @CHANGEDATE is null
                set @CHANGEDATE = getdate()

            -- build a temporary table containing the values from the XML

            declare @TempTbl table (
               [BASECURRENCYID] uniqueidentifier,
               [BASEEXCHANGERATEID] uniqueidentifier,
               [BENEFITID] uniqueidentifier,
               [DETAILS] nvarchar(255),
               [ID] uniqueidentifier,
               [ORGANIZATIONEXCHANGERATEID] uniqueidentifier,
               [ORGANIZATIONTOTALVALUE] money,
               [PERCENTAPPLICABLEAMOUNT] money,
               [QUANTITY] int,
               [REVENUESPLITID] uniqueidentifier,
               [SEQUENCE] int,
               [TRANSACTIONCURRENCYID] uniqueidentifier,
               [TRANSACTIONTOTALVALUE] money,
               [UNITVALUE] money,
               [VALUEPERCENT] decimal(20, 4),
               [TOTALVALUE] money)

            insert into @TempTbl select 
                [BASECURRENCYID],
                [BASEEXCHANGERATEID],
                [BENEFITID],
                [DETAILS],
                [ID],
                [ORGANIZATIONEXCHANGERATEID],
                [ORGANIZATIONTOTALVALUE],
                [PERCENTAPPLICABLEAMOUNT],
                [QUANTITY],
                [REVENUESPLITID],
                [SEQUENCE],
                [TRANSACTIONCURRENCYID],
                [TRANSACTIONTOTALVALUE],
                [UNITVALUE],
                [VALUEPERCENT],
                isnull(cast(isnull((QUANTITY * UNITVALUE), 0) + isnull((PERCENTAPPLICABLEAMOUNT * VALUEPERCENT/100), 0) as money),0) as TOTALVALUE 
            from dbo.UFN_REVENUE_GETBENEFITS_3_FROMITEMLISTXML(@XML)

            update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');

            if @@Error <> 0
                return 1;

            declare @REVENUEBASECURRENCYID uniqueidentifier = null;
            select @REVENUEBASECURRENCYID = REVENUE.BASECURRENCYID from dbo.REVENUE where ID = @REVENUEID;

            if (select count(*
                from @TempTbl [T] 
                inner join dbo.BENEFIT on BENEFIT.ID = [T].BENEFITID
                where BENEFIT.BASECURRENCYID <> @REVENUEBASECURRENCYID
                    and BENEFIT.USEPERCENT <> 1) > 0
            begin
                raiserror('BBERR_BENEFIT_BASECURRENCY_NOTEQUAL_REVENUE_BASECURRENCY', 13, 1);
                return 1;
            end

            declare @ORGANIZATIONCURRENCYID as uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();                                    

            insert into dbo.FINANCIALTRANSACTIONLINEITEM
            (ID, FINANCIALTRANSACTIONID, TRANSACTIONAMOUNT, QUANTITY, UNITVALUE, VISIBLE, 
             ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, DESCRIPTION, SEQUENCE,
             TYPECODE, POSTDATE, POSTSTATUSCODE, BASEAMOUNT,ORGAMOUNT)
            select 
              temp.ID, 
              @REVENUEID
              case when 
                  temp.ORGANIZATIONEXCHANGERATEID is null
                  and (temp.BASECURRENCYID is null or temp.BASECURRENCYID = @ORGANIZATIONCURRENCYID)
                  and temp.BASEEXCHANGERATEID is null
                  and (temp.TRANSACTIONCURRENCYID is null or temp.TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID)
                  and (
                    temp.ORGANIZATIONTOTALVALUE <> temp.TOTALVALUE
                    or temp.TRANSACTIONTOTALVALUE <> temp.TOTALVALUE
                    or temp.TOTALVALUE = 0
                                    or temp.TRANSACTIONTOTALVALUE is null
                  )
                then isnull(cast(isnull((QUANTITY * UNITVALUE), 0) + isnull((PERCENTAPPLICABLEAMOUNT * VALUEPERCENT/100), 0) as money),0)
                else isnull(temp.TRANSACTIONTOTALVALUE,0)
              end
              temp.QUANTITY,
              temp.UNITVALUE, 
              0
              @CHANGEAGENTID
              @CHANGEAGENTID
              @CHANGEDATE,@CHANGEDATE
              temp.DETAILS, 
              temp.SEQUENCE
              3
              FT.PostDate, 
              case FT.PostStatusCode when 3 then 3 else 1 end,      
              isnull(cast(isnull((temp.QUANTITY * temp.UNITVALUE), 0) + isnull((temp.PERCENTAPPLICABLEAMOUNT * temp.VALUEPERCENT/100), 0) as money),0) as TOTALVALUE, 
              case when 
                  temp.ORGANIZATIONEXCHANGERATEID is null
                  and (temp.BASECURRENCYID is null or temp.BASECURRENCYID = @ORGANIZATIONCURRENCYID)
                  and temp.BASEEXCHANGERATEID is null
                  and (temp.TRANSACTIONCURRENCYID is null or temp.TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID)
                  and (
                    temp.ORGANIZATIONTOTALVALUE <> temp.TOTALVALUE
                    or temp.TRANSACTIONTOTALVALUE <> temp.TOTALVALUE
                    or temp.TOTALVALUE = 0
                                    or temp.ORGANIZATIONTOTALVALUE is null
                  )
                then isnull(cast(isnull((QUANTITY * UNITVALUE), 0) + isnull((PERCENTAPPLICABLEAMOUNT * VALUEPERCENT/100), 0) as money),0)
                else isnull(temp.ORGANIZATIONTOTALVALUE,0)
              end 
            from @TempTbl as temp inner join FINANCIALTRANSACTION as FT on @REVENUEID = FT.ID;

            insert into dbo.REVENUEBENEFIT_EXT(
              ID
            , BENEFITID
            , SENDBENEFIT
            , PERCENTAPPLICABLEAMOUNT
            , VALUEPERCENT
            , REVENUESPLITID
            , ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
            select 
              ID
            , BENEFITID
            , 0 --SENDBENEFIT

            , PERCENTAPPLICABLEAMOUNT
            , VALUEPERCENT
            , REVENUESPLITID
            , @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE 
            from @TempTbl as temp


          if @@Error <> 0
            return 2;

            return 0;