USP_REVENUEBATCHCOMMIT_SPLITSWITHCHILDREN_ADDFROMXML

Adds revenue splits and associated campaigns and categories.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@SPLITS xml IN
@REVENUESPLITAPPLICATIONCODE tinyint IN
@REVENUESPLITTYPECODE tinyint IN
@OTHERTYPECODEID uniqueidentifier IN
@CATEGORYCODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@OPPORTUNITYID uniqueidentifier IN
@ADDITIONALAPPLICATIONS bit IN
@SPLITSDECLININGGIFTAID xml INOUT
@ISGIFTAIDSPONSORSHIPSPLITS xml INOUT
@TRANSACTIONCURRENCYID uniqueidentifier INOUT
@BASECURRENCYID uniqueidentifier INOUT
@BASEEXCHANGERATEID uniqueidentifier INOUT
@ORGANIZATIONEXCHANGERATEID uniqueidentifier INOUT
@REVENUESPLITSPONSORSHIPID xml INOUT

Definition

Copy


            CREATE procedure dbo.USP_REVENUEBATCHCOMMIT_SPLITSWITHCHILDREN_ADDFROMXML
            (
                @ID uniqueidentifier,
                @SPLITS xml,
                @REVENUESPLITAPPLICATIONCODE tinyint,
                @REVENUESPLITTYPECODE tinyint,
                @OTHERTYPECODEID uniqueidentifier,
                @CATEGORYCODEID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CURRENTDATE datetime,
                @OPPORTUNITYID uniqueidentifier,
                @ADDITIONALAPPLICATIONS bit,
                   @SPLITSDECLININGGIFTAID xml = null output,
                @ISGIFTAIDSPONSORSHIPSPLITS xml = null output,
                @TRANSACTIONCURRENCYID uniqueidentifier = null output,
                @BASECURRENCYID uniqueidentifier = null output,
                @BASEEXCHANGERATEID uniqueidentifier = null output,
                @ORGANIZATIONEXCHANGERATEID uniqueidentifier = null output,
            @REVENUESPLITSPONSORSHIPID xml = null output
            )
            as
                set nocount on;

                declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                if @TRANSACTIONCURRENCYID is null
                    set @TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID;

                if @BASECURRENCYID is null
                    set @BASECURRENCYID = @ORGANIZATIONCURRENCYID;

                declare @SPLITSDECLININGGIFTAIDTBL table
                (
                    REVENUESPLITID uniqueidentifier
                )

                declare @ISGIFTAIDSPONSORSHIPTBL table
                (
                  REVENUESPLITID uniqueidentifier
                )

                declare @OPPORTUNITYSPLITSTBL table
                (
                    REVENUESPLITID uniqueidentifier,
                    OPPORTUNITYID uniqueidentifier
                )  
            declare @REVENUESPLITSPONSORSHIPIDTBL table
            (
                    REVENUESPLITID uniqueidentifier,
                    SPONSORSHIPID uniqueidentifier
                )              
                -- Update the application code on the splits

                declare @PAYMENTREVENUESPLITS xml
                if @ADDITIONALAPPLICATIONS = 0
                begin
                    --JamesWill 2010-07-13 Make sure both XMLs have the same sets of columns by adding empty and unused columns as necessary

                  set @PAYMENTREVENUESPLITS = (    select
                          case when nullif(T.c.value('(ID)[1]','uniqueidentifier'), '00000000-0000-0000-0000-000000000000') is null then newid() else T.c.value('(ID)[1]','uniqueidentifier') end ID,
                          coalesce(@REVENUESPLITAPPLICATIONCODE, T.c.value('(APPLICATIONCODE)[1]','tinyint')) APPLICATIONCODE,
                          coalesce(@REVENUESPLITTYPECODE, T.c.value('(TYPECODE)[1]','tinyint')) TYPECODE,
                          T.c.value('(AMOUNT)[1]','money') as 'AMOUNT',
                          T.c.value('(DESIGNATIONID)[1]','uniqueidentifier') as 'DESIGNATIONID',
                          @CATEGORYCODEID as CATEGORYCODEID,
                          --case when T.c.exist('./CAMPAIGNS/CAMPAIGNS/ITEM') = 1 then T.c.query('(CAMPAIGNS/CAMPAIGNS/ITEM)') else null end CAMPAIGNS,

                          T.c.value('(DECLINESGIFTAID)[1]','bit') as 'DECLINESGIFTAID',
                          null as OPPORTUNITYID,
                          T.c.value('(ISGIFTAIDSPONSORSHIP)[1]','bit') as 'ISGIFTAIDSPONSORSHIP',
                          null as OTHERTYPECODEID,
                          case when T.c.exist('./CAMPAIGNS/ITEM') = 1 then T.c.query('(CAMPAIGNS/ITEM)') else null end as CAMPAIGNS,
                          null as SPONSORSHIPID
                          from @SPLITS.nodes('/SPLITS/ITEM') T(c)
                          for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64)
                end
                else
                begin
                  set @PAYMENTREVENUESPLITS = (    select
                                                      newid() ID,
                                                      T.c.value('(APPLICATIONCODE)[1]','tinyint') APPLICATIONCODE,
                                                      T.c.value('(TYPECODE)[1]','tinyint') TYPECODE,
                                                      T.c.value('(AMOUNT)[1]','money') AMOUNT,
                                                      T.c.value('(DESIGNATIONID)[1]','uniqueidentifier') DESIGNATIONID,
                                               T.c.value('(CATEGORYCODEID)[1]','uniqueidentifier') CATEGORYCODEID,
                                                      T.c.value('(OTHERTYPECODEID)[1]','uniqueidentifier') OTHERTYPECODEID,
                                                      T.c.value('(DECLINESGIFTAID)[1]','bit') DECLINESGIFTAID,
                                                      coalesce(T.c.value('(OPPORTUNITYID)[1]','uniqueidentifier'), null) OPPORTUNITYID,
                                                      T.c.value('(ISGIFTAIDSPONSORSHIP)[1]','bit') ISGIFTAIDSPONSORSHIP,
                                                      case when T.c.exist('./CAMPAIGNS/ITEM') = 1 then T.c.query('(CAMPAIGNS/ITEM)') else null end as CAMPAIGNS,
                                         T.c.value('(SPONSORSHIPID)[1]','uniqueidentifier') SPONSORSHIPID
                                         from @SPLITS.nodes('/SPLITS/ITEM') T(c)
                                                     for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64)

                end

            --Multicurrency - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.

                --JamesWill 2010-07-13 WI107559 Use a function that knows about all of the columns in @PAYMENTREVENUESPLITS

                --***IMPORTANT*** IF YOU CHANGE THE COLUMNS IN @PAYMENTREVENUESPLITS, YOU ***MUST*** UPDATE UFN_REVENUEBATCH_PAYMENTSPLIT_CONVERTAMOUNTSINXML

                if @ADDITIONALAPPLICATIONS = 1 --Couple sponsorshipid and revenuesplitid here before we lose it below.

            begin
                    insert into @REVENUESPLITSPONSORSHIPIDTBL (REVENUESPLITID, SPONSORSHIPID)
                    select
                        T.c.value('(ID)[1]','uniqueidentifier') REVENUESPLITID,
                        T.c.value('(SPONSORSHIPID)[1]','uniqueidentifier') SPONSORSHIPID
                    from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                    where
                        T.c.value('(ID)[1]','uniqueidentifier') is not null and
                        coalesce(T.c.value('(SPONSORSHIPID)[1]','uniqueidentifier'),'00000000-0000-0000-0000-000000000000') <> '00000000-0000-0000-0000-000000000000';  
            end

            set @PAYMENTREVENUESPLITS = dbo.UFN_REVENUEBATCH_PAYMENTSPLIT_CONVERTAMOUNTSINXML(@PAYMENTREVENUESPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                exec dbo.USP_REVENUE_GETSPLITS_2_CUSTOMADDFROMXML @ID, @PAYMENTREVENUESPLITS, @CHANGEAGENTID, @CURRENTDATE;

                insert into @SPLITSDECLININGGIFTAIDTBL (REVENUESPLITID)
                select
                    T.c.value('(ID)[1]','uniqueidentifier')
                from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                where T.c.value('(DECLINESGIFTAID)[1]','bit') = 1

                insert into @ISGIFTAIDSPONSORSHIPTBL (REVENUESPLITID)
                select
                  T.c.value('(ID)[1]','uniqueidentifier')
                from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                where T.c.value('(ISGIFTAIDSPONSORSHIP)[1]','bit') = 1

                -- Populate a temporary table of opportunity IDs.


                if @ADDITIONALAPPLICATIONS = 0
                begin
                    if @OPPORTUNITYID is not null and @OPPORTUNITYID <> '00000000-0000-0000-0000-000000000000'
                        insert into @OPPORTUNITYSPLITSTBL (REVENUESPLITID, OPPORTUNITYID)
                        select
                            T.c.value('(ID)[1]','uniqueidentifier') REVENUESPLITID,
                            @OPPORTUNITYID OPPORTUNITYID
                        from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                end
                else if @ADDITIONALAPPLICATIONS = 1
                begin
                    insert into @OPPORTUNITYSPLITSTBL (REVENUESPLITID, OPPORTUNITYID)
                    select
                        T.c.value('(ID)[1]','uniqueidentifier') REVENUESPLITID,
                        T.c.value('(OPPORTUNITYID)[1]','uniqueidentifier') OPPORTUNITYID
                    from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                    where
                        T.c.value('(OPPORTUNITYID)[1]','uniqueidentifier') is not null and
                        T.c.value('(OPPORTUNITYID)[1]','uniqueidentifier') <> '00000000-0000-0000-0000-000000000000';
                end

                -- Create the REVENUESPLITOTHER rows if the application type is Other

                if @REVENUESPLITAPPLICATIONCODE = 4
                begin
                    insert into dbo.REVENUESPLITOTHER 
                    (
                        ID, 
                        OTHERTYPECODEID, 
                        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                    )
                    select
                        ID,
                        @OTHERTYPECODEID,
                        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                    from dbo.REVENUESPLIT
                    where
                        REVENUEID = @ID and
                        APPLICATIONCODE = 4 -- Other application code

                end
                else if @ADDITIONALAPPLICATIONS = 1
                begin
                    insert into dbo.REVENUESPLITOTHER 
                    (
                        ID, 
                        OTHERTYPECODEID, 
                        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                    )
                    select
                        T.c.value('(ID)[1]','uniqueidentifier'),
                        T.c.value('(OTHERTYPECODEID)[1]','uniqueidentifier'),
                        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                    from @PAYMENTREVENUESPLITS.nodes('/SPLITS/ITEM') T(c)
                    where T.c.value('(APPLICATIONCODE)[1]','tinyint') = 4
               end

                if ((@CATEGORYCODEID is not null) and (@PAYMENTREVENUESPLITS.exist('(/SPLITS/ITEM/CATEGORYCODEID)') = 0))
                begin
                    insert into dbo.REVENUECATEGORY (ID, GLREVENUECATEGORYMAPPINGID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    select
                        ID,
                        @CATEGORYCODEID,
                        @CHANGEAGENTID
                        @CHANGEAGENTID
                        @CURRENTDATE
                        @CURRENTDATE
                    from dbo.UFN_REVENUE_GETSPLITS_FROMITEMLISTXML(@PAYMENTREVENUESPLITS);
                end

                --Add opportunities

                insert into dbo.REVENUEOPPORTUNITY (ID, OPPORTUNITYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select
                    REVENUESPLITID,
                    OPPORTUNITYID,
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CURRENTDATE
                    @CURRENTDATE
                from @OPPORTUNITYSPLITSTBL

                declare @REVENUEDATE datetime
                select @REVENUEDATE = DATE from dbo.REVENUE where ID = @ID

                -- Update opportunity accepted status

                update dbo.OPPORTUNITY set
                    STATUSCODE = 3,  -- Accepted

                    ASKDATE = coalesce(ASKDATE, @REVENUEDATE),
                    ACCEPTEDASKAMOUNT = ASKAMOUNT,  
                    TRANSACTIONACCEPTEDASKAMOUNT = TRANSACTIONASKAMOUNT,  
                    ORGANIZATIONACCEPTEDASKAMOUNT = ORGANIZATIONASKAMOUNT, 
                    RESPONSEDATE = @REVENUEDATE,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                from
                    dbo.OPPORTUNITY
                    inner join @OPPORTUNITYSPLITSTBL TEMPTBL on TEMPTBL.OPPORTUNITYID = OPPORTUNITY.ID
                where
                    STATUSCODE <> 3

                -- Add campaigns

                declare @REVENUESPLITID uniqueidentifier, @CAMPAIGNS xml
                declare CAMPAIGNCURSOR cursor local fast_forward for 
                select
                    ID,
                    CAMPAIGNS
                from dbo.UFN_REVENUEBATCH_SPLITSWITHCHILDREN_FROMITEMLISTXML(@PAYMENTREVENUESPLITS)

                open CAMPAIGNCURSOR

                fetch next from CAMPAIGNCURSOR into @REVENUESPLITID, @CAMPAIGNS

                while @@FETCH_STATUS = 0
                begin
                    exec dbo.USP_REVENUESPLIT_CAMPAIGNS_UPDATEFROMXML @REVENUESPLITID, @CAMPAIGNS, @CHANGEAGENTID;

                    fetch next from CAMPAIGNCURSOR into @REVENUESPLITID, @CAMPAIGNS
                end

                close CAMPAIGNCURSOR
                deallocate CAMPAIGNCURSOR

                set @SPLITSDECLININGGIFTAID = (    select
                                                    REVENUESPLITID
                                                from @SPLITSDECLININGGIFTAIDTBL 
                                                for xml raw('ITEM'),type,elements,root('SPLITSDECLININGGIFTAID'),BINARY BASE64)

        set @ISGIFTAIDSPONSORSHIPSPLITS = (    select
                                                    REVENUESPLITID
                                                from @ISGIFTAIDSPONSORSHIPTBL 
                                                for xml raw('ITEM'),type,elements,root('ISGIFTAIDSPONSORSHIPSPLITS'),BINARY BASE64)
            set @REVENUESPLITSPONSORSHIPID = (select
                                             REVENUESPLITID,
                                             SPONSORSHIPID
                                             from @REVENUESPLITSPONSORSHIPIDTBL
      for xml raw('ITEM'),type,elements,root('REVENUESPLITSPONSORSHIPID'),BINARY BASE64)