USP_DATAFORMTEMPLATE_ADD_OPPORTUNITYREVENUE

The save procedure used by the add dataform template "Opportunity Associate Revenue Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@OPPORTUNITYID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@RECORDID uniqueidentifier IN Revenue

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_OPPORTUNITYREVENUE (
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @OPPORTUNITYID uniqueidentifier,
    @RECORDID uniqueidentifier = null
)
as
    set nocount on;

    -- since multiple records can get generated, the ID returned will just be the opportunity's ID
    set @ID = @OPPORTUNITYID;

    if @CHANGEAGENTID is null  
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    begin try

        declare @EARLIESTREVENUEDATE datetime;
        declare @REVENUETOAPPLY table
        (
            REVENUESPLITID uniqueidentifier
        );

    -- WI 1270999- Add matching gift payment on selecting existing MG from opportunity. 
    -- Adding matching gift from existing revenue on opportunity and then add a payment on selected MG does same thing.
    -- Insert matching gift payments
     -- WI 1125275 
    -- Adding pledge payment from existing revenue on opportunity --applicationcode=2
    insert into @REVENUETOAPPLY
    (
       REVENUESPLITID
    )
    select RSE.ID from dbo.REVENUESPLIT RS
    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.SOURCELINEITEMID = RS.ID 
    inner join dbo.FINANCIALTRANSACTION FT on FT.ID = FTLI.FINANCIALTRANSACTIONID
    inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = FTLI.ID
    where 
    RS.REVENUEID  = @RECORDID and
    FT.DELETEDON is null and
    FT.TYPECODE = 0 and
    RSE.APPLICATIONCODE in(7,2);        

        -- First, grab all of the revenue splits attached to pledges
        insert into @REVENUETOAPPLY 
        (
            REVENUESPLITID
        )
        select 
            REVENUESPLIT.ID
        from
            dbo.REVENUE
        inner join
            dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
        where
            REVENUE.ID = @RECORDID;

        -- Second, grab all of the revenue splits for gifts
        insert into @REVENUETOAPPLY
        (
            REVENUESPLITID
        )
        select
            REVENUESPLIT.ID
        from
            dbo.REVENUESPLIT
        where
            REVENUESPLIT.ID = @RECORDID;

        select
            @EARLIESTREVENUEDATE = min(REVENUE.DATE)
        from
            @REVENUETOAPPLY [REVENUETOAPPLY]
        inner join
            dbo.REVENUESPLIT on REVENUESPLIT.ID = [REVENUETOAPPLY].REVENUESPLITID
        inner join
            dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID;

        declare @REVENUESPLITID uniqueidentifier;
        declare SPLITCURSOR cursor local fast_forward for
            select
                REVENUESPLITID
            from
                @REVENUETOAPPLY

            Union all

            select
                FINANCIALTRANSACTIONLINEITEM.ID
            from dbo.FINANCIALTRANSACTIONLINEITEM
                left join dbo.FINANCIALTRANSACTIONLINEITEM SOURCE on SOURCE.ID = FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID  
            where FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID = SOURCE.ID  
                and SOURCE.FINANCIALTRANSACTIONID = @RECORDID and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null

        open SPLITCURSOR;
        fetch next from SPLITCURSOR into @REVENUESPLITID;
        while @@FETCH_STATUS = 0
        begin
            exec dbo.USP_REVENUESPLIT_PULLSOLICITORSFROMOPPORTUNITY @REVENUESPLITID, @OPPORTUNITYID, @CHANGEAGENTID, @CURRENTDATE;    

            fetch next from SPLITCURSOR into @REVENUESPLITID;
        end
        --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
        close SPLITCURSOR;
        deallocate SPLITCURSOR;

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

        exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID, @EARLIESTREVENUEDATE, @CHANGEAGENTID, @CURRENTDATE;        

    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

    return 0;