USP_SPONSOR_ADDPAYMENT

Adds a payment for an event sponsorship.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@APPLICATIONID uniqueidentifier IN
@APPLIEDAMOUNT money IN
@CREATIONDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN
@BASEAPPLIEDAMOUNT money IN
@ORGANIZATIONAPPLIEDAMOUNT money IN

Definition

Copy


            CREATE procedure dbo.USP_SPONSOR_ADDPAYMENT
(
     @REVENUEID        uniqueidentifier
    ,@APPLICATIONID    uniqueidentifier
    ,@APPLIEDAMOUNT    money
    ,@CREATIONDATE    datetime = null
    ,@CHANGEAGENTID    uniqueidentifier = null
    ,@BASEAPPLIEDAMOUNT money = null
    ,@ORGANIZATIONAPPLIEDAMOUNT money = null
)
as
begin

    set nocount on

    declare @EVENTID                uniqueidentifier = null;
    declare @APPLICATIONCURRENCYID    uniqueidentifier;
    declare @PAYMENTBASECURRENCYID    uniqueidentifier;
    declare @AMOUNTCONVERTED        money;
    declare @REVENUEDATE            datetime;
    declare @APPLICATIONEXCHANGERATEID        uniqueidentifier;
    declare @PAYMENTTRANSACTIONCURRENCYID    uniqueidentifier;    
    declare @PAYMENTBASEEXCHANGERATEID        uniqueidentifier;
    declare @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
    declare @POSTDATE date;
    declare @POSTSTATUSCODE tinyint;
    declare @DESIGNATIONID uniqueidentifier;

    -- pick up eventid from sponsor table

    select 
       @EVENTID = EVENTSPONSOR.EVENTID,
       @APPLICATIONCURRENCYID = EVENT.BASECURRENCYID
    from 
        dbo.EVENTSPONSOR
        inner join dbo.EVENT on EVENTSPONSOR.EVENTID = EVENT.ID
    where 
        EVENTSPONSOR.ID = @APPLICATIONID

    set @DESIGNATIONID = 
    (            SELECT A.DESIGNATIONID
                FROM dbo.EVENT E 
                INNER JOIN dbo.APPEALDESIGNATION A
                ON E.APPEALID = A.APPEALID AND A.ISDEFAULT = 1
                WHERE E.ID = @EVENTID
    )

    -- get currency values from the event registration payment

    select
        @PAYMENTTRANSACTIONCURRENCYID = FT.TRANSACTIONCURRENCYID,
        @PAYMENTBASECURRENCYID = V.BASECURRENCYID,
        @PAYMENTBASEEXCHANGERATEID = FT.BASEEXCHANGERATEID,
        @PAYMENTORGANIZATIONEXCHANGERATEID = FT.ORGEXCHANGERATEID,
        @REVENUEDATE = cast(FT.DATE as datetime),
        @POSTDATE = FT.POSTDATE,
        @POSTSTATUSCODE = case FT.POSTSTATUSCODE when 2 then 1 else FT.POSTSTATUSCODE end
    from dbo.FINANCIALTRANSACTION FT
    inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V on V.FINANCIALTRANSACTIONID = FT.ID
    where FT.ID = @REVENUEID;

    -- if the event currency does not equal the payment transaction currency, get an exchange rate from payment transaction currency 

    -- to event currency

    if @APPLICATIONCURRENCYID <> @PAYMENTTRANSACTIONCURRENCYID
    begin
        if @APPLICATIONCURRENCYID = @PAYMENTBASECURRENCYID
            set @APPLICATIONEXCHANGERATEID = @PAYMENTBASEEXCHANGERATEID;
        else
            set @APPLICATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(
                                                 @PAYMENTTRANSACTIONCURRENCYID
                                                ,@APPLICATIONCURRENCYID
                                                ,@REVENUEDATE
                                                ,1
                                                ,null);

        -- no exchange rate exists - error

        if @APPLICATIONEXCHANGERATEID is null
        begin
            raiserror('BBERR_APPLICATIONEXCHANGERATEDOESNOTEXIST : You cannot apply the payment toward this application. No exchange rate exists between the payment and application currencies.', 13, 1);
            return 1;
        end
    end

    --If the payment is not in the same currency as the event sponsorship, convert the payment amount to the event sponsor's currency

    if @APPLICATIONCURRENCYID = @PAYMENTTRANSACTIONCURRENCYID
        set @AMOUNTCONVERTED = @APPLIEDAMOUNT;
    else
        set @AMOUNTCONVERTED = dbo.UFN_CURRENCY_CONVERT(@APPLIEDAMOUNT, @APPLICATIONEXCHANGERATEID);

    declare @REVENUESPLITID uniqueidentifier;
    set        @REVENUESPLITID = newid();

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

    if @CREATIONDATE is null
        set @CREATIONDATE = getdate();

    -- Convert the applied amount into base and organization amounts if it is not provided by the caller

    if @BASEAPPLIEDAMOUNT is null or @ORGANIZATIONAPPLIEDAMOUNT is null
        exec dbo.USP_CURRENCY_GETCURRENCYVALUES 
            @APPLIEDAMOUNT
            @REVENUEDATE
            @PAYMENTBASECURRENCYID
            @PAYMENTBASEEXCHANGERATEID output
            @PAYMENTTRANSACTIONCURRENCYID output
            @BASEAPPLIEDAMOUNT output
            null
            @ORGANIZATIONAPPLIEDAMOUNT output
            @PAYMENTORGANIZATIONEXCHANGERATEID output
            0;

    begin try                            

        declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
        declare @ADJUSTMENTPOSTDATE date;
        declare @ADJUSTMENTID uniqueidentifier;
        select top 1 
            @ADJUSTMENTPOSTSTATUSCODE = case A.POSTSTATUSCODE when 2 then 3 else 1 end
            ,@ADJUSTMENTPOSTDATE = A.POSTDATE
            ,@ADJUSTMENTID = ALI.ID
        from dbo.ADJUSTMENT A
        left join dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT ALI on A.ID = ALI.ID
        where A.REVENUEID = @REVENUEID
        order by A.DATEADDED desc;

        insert into dbo.FINANCIALTRANSACTIONLINEITEM 
            (ID
            ,FINANCIALTRANSACTIONID
            ,TRANSACTIONAMOUNT
            ,VISIBLE
            ,DESCRIPTION
            ,SEQUENCE
            ,TYPECODE
            ,POSTDATE
            ,POSTSTATUSCODE
            ,BASEAMOUNT
            ,ORGAMOUNT
            ,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
            -- Boilerplate

            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        values
            (@REVENUESPLITID
            ,@REVENUEID
            ,@APPLIEDAMOUNT
            ,1
            ,''
            ,1
            ,0
            ,isnull(@ADJUSTMENTPOSTDATE, @POSTDATE)
            ,isnull(@ADJUSTMENTPOSTSTATUSCODE, @POSTSTATUSCODE)
            ,@BASEAPPLIEDAMOUNT
            ,@ORGANIZATIONAPPLIEDAMOUNT
            ,@ADJUSTMENTID
            ,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE)

        merge dbo.REVENUESPLIT_EXT as target
        using (select @REVENUESPLITID [ID]) as source      
        on (source.ID = target.ID)      
            when matched then
        update set 
            DESIGNATIONID = @DESIGNATIONID
            ,CHANGEDBYID = @CHANGEAGENTID
            ,DATECHANGED = @CREATIONDATE
        when not matched then
            insert 
            (
                ID
                ,DESIGNATIONID
                ,TYPECODE
                ,APPLICATIONCODE
                ,OVERRIDEBUSINESSUNITS
                ,REVENUESPLITBUSINESSUNITOVERRIDECODEID
                -- boilerplate

                ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
            )
            values 
            (    
                @REVENUESPLITID
                ,@DESIGNATIONID
                ,15
                ,15
                ,0
                ,null
                --  boilerplate

                ,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE);

        /* 
        We may need to add sponsor payments in a new table: EVENTSPONSORPAYMENT
        insert into dbo.EVENTSPONSORPAYMENT
        (
             ID
            ,PAYMENTID
            ,SPONSORID
            ,AMOUNT
            ,APPLICATIONCURRENCYID
            ,APPLICATIONEXCHANGERATEID
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED
        )
        values (
             newid()
            ,@REVENUESPLITID
            ,@APPLICATIONID 
            ,@AMOUNTCONVERTED
            ,@APPLICATIONCURRENCYID
            ,@APPLICATIONEXCHANGERATEID
            ,@CHANGEAGENTID
            ,@CHANGEAGENTID
            ,@CREATIONDATE
            ,@CREATIONDATE
        );
        */
    end try                
    begin catch
        exec dbo.USP_RAISE_ERROR;
    end catch

    -- create recognitions

    exec dbo.USP_REVENUEDETAIL_CREATERECOGNITIONS @REVENUESPLITID, @CHANGEAGENTID, @CREATIONDATE;
end