USP_EVENTPRICE_COPY

Copies prices from one event to another event.

Parameters

Parameter Parameter Type Mode Description
@SOURCEEVENTID uniqueidentifier IN
@DESTINATIONEVENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_EVENTPRICE_COPY
            (
                @SOURCEEVENTID uniqueidentifier,
                @DESTINATIONEVENTID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null
            )
            with execute as caller
            as
            set nocount on;

            -- Cannot copy if the source event does not exist

            if not exists (select ID from dbo.EVENT where ID = @SOURCEEVENTID)
                raiserror('The source event specified does not exist.',13,1);

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

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

            declare @EVENTPRICEMAPPINGTABLE table
            (
                SOURCEEVENTPRICEID uniqueidentifier,
                DESTINATIONEVENTPRICEID uniqueidentifier default newid()
            );

            insert into @EVENTPRICEMAPPINGTABLE
            (
                SOURCEEVENTPRICEID
            )
            select
                EVENTPRICE.ID
            from
                dbo.EVENTPRICE
                left join dbo.EVENTPRICE DESTINATIONEVENTPRICE on
                    @DESTINATIONEVENTID = DESTINATIONEVENTPRICE.EVENTID
                    and EVENTPRICE.NAME = DESTINATIONEVENTPRICE.NAME
            where
                EVENTPRICE.EVENTID = @SOURCEEVENTID
                and DESTINATIONEVENTPRICE.ID is null;


            declare @BASECURRENCYID uniqueidentifier;
            declare @ORGANIZATIONCURRENCYID uniqueidentifier;
            declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

            select @BASECURRENCYID = BASECURRENCYID from dbo.EVENT where ID = @DESTINATIONEVENTID;
            select @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(); 
            set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)

            insert into dbo.EVENTPRICE
            (
                ID,
                EVENTID,
                EVENTREGISTRATIONTYPEID,
                AMOUNT,
                COST,
                NAME,
                REGISTRATIONCOUNT,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED,
                ORGANIZATIONAMOUNT,
                ORGANIZATIONCOST,
                ORGANIZATIONEXCHANGERATEID
            )
            select
                EVENTPRICEMAPPING.DESTINATIONEVENTPRICEID,
                @DESTINATIONEVENTID,
                EVENTPRICE.EVENTREGISTRATIONTYPEID,
                EVENTPRICE.AMOUNT,
                EVENTPRICE.COST,
                EVENTPRICE.NAME,
                EVENTPRICE.REGISTRATIONCOUNT,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE,
                case when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
                    then EVENTPRICE.AMOUNT
                    else dbo.UFN_CURRENCY_CONVERT(EVENTPRICE.AMOUNT, @ORGANIZATIONEXCHANGERATEID)
                end,
                case when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
                    then EVENTPRICE.COST
                    else dbo.UFN_CURRENCY_CONVERT(EVENTPRICE.COST, @ORGANIZATIONEXCHANGERATEID)
                end,
                case when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
                    then null
                    else @ORGANIZATIONEXCHANGERATEID
                end
            from
                @EVENTPRICEMAPPINGTABLE EVENTPRICEMAPPING
                left join dbo.EVENTPRICE on EVENTPRICEMAPPING.SOURCEEVENTPRICEID = EVENTPRICE.ID;

            insert into dbo.EVENTPRICEBENEFIT
            (
                EVENTPRICEID, 
                BENEFITID,
                UNITVALUE,
                QUANTITY,
                TOTALVALUE,
                DETAILS,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED,
                BASECURRENCYID,
                EVENTBASECURRENCYTOTALVALUE,
                BASEEXCHANGERATEID,
                ORGANIZATIONTOTALVALUE,
                ORGANIZATIONEXCHANGERATEID
            )
            select 
                EVENTPRICEMAPPING.DESTINATIONEVENTPRICEID,
                EVENTPRICEBENEFIT.BENEFITID,
                EVENTPRICEBENEFIT.UNITVALUE,
                EVENTPRICEBENEFIT.QUANTITY,
                EVENTPRICEBENEFIT.TOTALVALUE,
                EVENTPRICEBENEFIT.DETAILS,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE,
                EVENTPRICEBENEFIT.BASECURRENCYID,
                case when EVENTPRICEBENEFIT.BASECURRENCYID = @BASECURRENCYID
                    then EVENTPRICEBENEFIT.TOTALVALUE
                    else dbo.UFN_CURRENCY_CONVERT(EVENTPRICEBENEFIT.TOTALVALUE, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @BASECURRENCYID, @CURRENTDATE, 1, null))
                end,
                case when EVENTPRICEBENEFIT.BASECURRENCYID = @BASECURRENCYID
                    then null
                    else dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @BASECURRENCYID, @CURRENTDATE, 1, null)
                end,
                case when EVENTPRICEBENEFIT.BASECURRENCYID = @ORGANIZATIONCURRENCYID
                    then EVENTPRICEBENEFIT.TOTALVALUE
                    else dbo.UFN_CURRENCY_CONVERT(EVENTPRICEBENEFIT.TOTALVALUE, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null))
                end,
                case when EVENTPRICEBENEFIT.BASECURRENCYID = @ORGANIZATIONCURRENCYID
                    then null
                    else dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null)
                end
            from
                @EVENTPRICEMAPPINGTABLE EVENTPRICEMAPPING
                inner join dbo.EVENTPRICEBENEFIT on EVENTPRICEMAPPING.SOURCEEVENTPRICEID = EVENTPRICEBENEFIT.EVENTPRICEID;


            --The receipt amount needs to take into account the newly created benefits in the currency of the event.

     update dbo.EVENTPRICE
            set
                RECEIPTAMOUNT = case
                        when (EVENTPRICE.AMOUNT - (EVENTPRICE.COST + (select coalesce(sum(EVENTPRICEBENEFIT.EVENTBASECURRENCYTOTALVALUE),0) from dbo.EVENTPRICEBENEFIT where EVENTPRICEID = EVENTPRICE.ID))) < 0 then 0
                        else (EVENTPRICE.AMOUNT - (EVENTPRICE.COST + (select coalesce(sum(EVENTPRICEBENEFIT.EVENTBASECURRENCYTOTALVALUE),0) from dbo.EVENTPRICEBENEFIT where EVENTPRICEID = EVENTPRICE.ID)))
                        end,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            from 
                dbo.EVENTPRICE
            where
                EVENTPRICE.EVENTID = @DESTINATIONEVENTID;

            --insert into dbo.EVENTPRICEDESIGNATION

            --(

            --    EVENTPRICEID, 

            --    DESIGNATIONID,

            --    AMOUNT,

            --    ADDEDBYID,

            --    CHANGEDBYID,

            --    DATEADDED,

            --    DATECHANGED

            --)

            --select 

            --    EVENTPRICEMAPPING.DESTINATIONEVENTPRICEID,

            --    EVENTPRICEDESIGNATION.DESIGNATIONID,

            --    EVENTPRICEDESIGNATION.AMOUNT,

            --    @CHANGEAGENTID,

            --    @CHANGEAGENTID,

            --    @CURRENTDATE,

            --    @CURRENTDATE

            --from

            --    @EVENTPRICEMAPPINGTABLE EVENTPRICEMAPPING

            --    inner join dbo.EVENTPRICEDESIGNATION on EVENTPRICEMAPPING.SOURCEEVENTPRICEID = EVENTPRICEDESIGNATION.EVENTPRICEID;


            return 0;