USP_DATAFORMTEMPLATE_EDIT_EVENTBASECURRENCY
The save procedure used by the edit dataform template "Event Base Currency Edit Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@BASECURRENCYID | uniqueidentifier | IN | Base currency |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_EVENTBASECURRENCY
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if exists (select 1 from dbo.EVENTPRICE where EVENTID = @ID)
raiserror('ERR_EVENTBASECURRENCYEDIT_EVENTPRICESEXIST',13,1);
if exists (select top 1 1 from dbo.JOBOCCURRENCE where EVENTID = @ID)
raiserror('ERR_EVENTBASECURRENCYEDIT_JOBOCCURRENCESEXIST',13,1);
if exists (select top 1 1 from dbo.AUCTIONITEM where AUCTIONITEM.EVENTAUCTIONID = @ID)
raiserror('BBERR_AUCTIONITEM_EVENT_BASECURRENCY', 13, 1);
if exists (select top 1 1 from dbo.EVENTAPPEAL where EVENTAPPEAL.EVENTID = @ID)
raiserror('ERR_EVENTBASECURRENCYEDIT_EVENTAPPEALEXIST', 13, 1);
if exists (select top 1 1 from dbo.EVENT where EVENT.ID = @ID and EVENT.APPEALID is not null)
raiserror('ERR_EVENTBASECURRENCYEDIT_TEAMFUNDRAISINGAPPEALEXIST', 13, 1);
begin try
declare @OLDBASECURRENCYID uniqueidentifier;
select
@OLDBASECURRENCYID = EVENT.BASECURRENCYID
from
dbo.EVENT
where
EVENT.ID = @ID;
update dbo.EVENT set
EVENT.BASECURRENCYID = @BASECURRENCYID,
EVENT.CHANGEDBYID = @CHANGEAGENTID,
EVENT.DATECHANGED = @CURRENTDATE
where
EVENT.ID = @ID;
--If the user saves without changing the base currency, don't update org amounts.
if @OLDBASECURRENCYID <> @BASECURRENCYID
begin
declare @ORGCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
declare @DATEADDED datetime;
select @DATEADDED = EVENT.DATEADDED from dbo.EVENT where EVENT.ID = @ID;
--If the new base currency is the org currency, org amount equals amount, so don't bother getting
-- an exchange rate or doing a conversion.
if @BASECURRENCYID = @ORGCURRENCYID
begin
update dbo.EVENTPRICE
set
EVENTPRICE.ORGANIZATIONAMOUNT = EVENTPRICE.AMOUNT,
EVENTPRICE.ORGANIZATIONCOST = EVENTPRICE.COST,
EVENTPRICE.ORGANIZATIONEXCHANGERATEID = null,
EVENTPRICE.CHANGEDBYID = @CHANGEAGENTID,
EVENTPRICE.DATECHANGED = @CURRENTDATE
where
EVENTPRICE.EVENTID = @ID;
update dbo.REGISTRANTREGISTRATION
set
REGISTRANTREGISTRATION.ORGANIZATIONAMOUNT = REGISTRANTREGISTRATION.AMOUNT,
REGISTRANTREGISTRATION.ORGANIZATIONEXCHANGERATEID = null,
REGISTRANTREGISTRATION.CHANGEDBYID = @CHANGEAGENTID,
REGISTRANTREGISTRATION.DATECHANGED = @CURRENTDATE
from
dbo.REGISTRANTREGISTRATION
inner join dbo.REGISTRANT on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
where
REGISTRANT.EVENTID = @ID;
update dbo.EVENTEXPENSE
set
EVENTEXPENSE.ORGANIZATIONBUDGETEDAMOUNT = EVENTEXPENSE.BUDGETEDAMOUNT,
EVENTEXPENSE.ORGANIZATIONACTUALAMOUNT = EVENTEXPENSE.ACTUALAMOUNT,
EVENTEXPENSE.ORGANIZATIONAMOUNTPAID = EVENTEXPENSE.AMOUNTPAID,
EVENTEXPENSE.ORGANIZATIONEXCHANGERATEID = null,
EVENTEXPENSE.BASECURRENCYID = @BASECURRENCYID,
EVENTEXPENSE.CHANGEDBYID = @CHANGEAGENTID,
EVENTEXPENSE.DATECHANGED = @CURRENTDATE
where EVENTEXPENSE.EVENTID = @ID;
end
else --Base currency has changed and isn't the org currency
begin
declare @CURRENCYEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, @DATEADDED, 0, null);
update dbo.EVENTPRICE
set
EVENTPRICE.ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(EVENTPRICE.AMOUNT, @CURRENCYEXCHANGERATEID),
EVENTPRICE.ORGANIZATIONCOST = dbo.UFN_CURRENCY_CONVERT(EVENTPRICE.COST, @CURRENCYEXCHANGERATEID),
EVENTPRICE.ORGANIZATIONEXCHANGERATEID = @CURRENCYEXCHANGERATEID,
EVENTPRICE.CHANGEDBYID = @CHANGEAGENTID,
EVENTPRICE.DATECHANGED = @CURRENTDATE
where
EVENTPRICE.EVENTID = @ID;
update dbo.REGISTRANTREGISTRATION
set
REGISTRANTREGISTRATION.ORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(REGISTRANTREGISTRATION.AMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, REGISTRANTREGISTRATION.DATEPURCHASED, 0, null)),
REGISTRANTREGISTRATION.ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, REGISTRANTREGISTRATION.DATEPURCHASED, 0, null),
REGISTRANTREGISTRATION.CHANGEDBYID = @CHANGEAGENTID,
REGISTRANTREGISTRATION.DATECHANGED = @CURRENTDATE
from
dbo.REGISTRANTREGISTRATION
inner join dbo.REGISTRANT on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
where
REGISTRANT.EVENTID = @ID;
update dbo.EVENTEXPENSE
set
EVENTEXPENSE.ORGANIZATIONBUDGETEDAMOUNT = dbo.UFN_CURRENCY_CONVERT(EVENTEXPENSE.BUDGETEDAMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, EVENTEXPENSE.DATEADDED, 0, null)),
EVENTEXPENSE.ORGANIZATIONACTUALAMOUNT = dbo.UFN_CURRENCY_CONVERT(EVENTEXPENSE.ACTUALAMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, EVENTEXPENSE.DATEADDED, 0, null)),
EVENTEXPENSE.ORGANIZATIONAMOUNTPAID = dbo.UFN_CURRENCY_CONVERT(EVENTEXPENSE.AMOUNTPAID, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, EVENTEXPENSE.DATEADDED, 0, null)),
EVENTEXPENSE.ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGCURRENCYID, EVENTEXPENSE.DATEADDED, 0, null),
EVENTEXPENSE.BASECURRENCYID = @BASECURRENCYID,
EVENTEXPENSE.CHANGEDBYID = @CHANGEAGENTID,
EVENTEXPENSE.DATECHANGED = @CURRENTDATE
where EVENTEXPENSE.EVENTID = @ID;
end
-- Update the base exchange rate and event base currency total value on event price benefits
update dbo.EVENTPRICEBENEFIT
set
EVENTPRICEBENEFIT.BASEEXCHANGERATEID =
case when @BASECURRENCYID = EVENTPRICEBENEFIT.BASECURRENCYID
then null
else dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @BASECURRENCYID, @DATEADDED, 1, null)
end,
EVENTPRICEBENEFIT.EVENTBASECURRENCYTOTALVALUE =
case when @BASECURRENCYID = EVENTPRICEBENEFIT.BASECURRENCYID
then EVENTPRICEBENEFIT.TOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(EVENTPRICEBENEFIT.TOTALVALUE,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENTPRICEBENEFIT.BASECURRENCYID, @BASECURRENCYID, @DATEADDED, 1, null))
end,
EVENTPRICEBENEFIT.CHANGEDBYID = @CHANGEAGENTID,
EVENTPRICEBENEFIT.DATECHANGED = @CURRENTDATE
from
dbo.EVENTPRICEBENEFIT
inner join dbo.EVENTPRICE on EVENTPRICEBENEFIT.EVENTPRICEID = EVENTPRICE.ID
where
EVENTPRICE.EVENTID = @ID;
-- Update the base exchange rate and event base currency total value on registrant benefits
update dbo.REGISTRANTBENEFIT
set
REGISTRANTBENEFIT.BASEEXCHANGERATEID =
case when @BASECURRENCYID = REGISTRANTBENEFIT.BASECURRENCYID
then null
else dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(REGISTRANTBENEFIT.BASECURRENCYID, @BASECURRENCYID, @DATEADDED, 1, null)
end,
REGISTRANTBENEFIT.EVENTBASECURRENCYTOTALVALUE =
case when @BASECURRENCYID = REGISTRANTBENEFIT.BASECURRENCYID
then REGISTRANTBENEFIT.TOTALVALUE
else dbo.UFN_CURRENCY_CONVERT(REGISTRANTBENEFIT.TOTALVALUE,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(REGISTRANTBENEFIT.BASECURRENCYID, @BASECURRENCYID, @DATEADDED, 1, null))
end,
REGISTRANTBENEFIT.CHANGEDBYID = @CHANGEAGENTID,
REGISTRANTBENEFIT.DATECHANGED = @CURRENTDATE
from
dbo.REGISTRANTBENEFIT
inner join dbo.REGISTRANT on REGISTRANTBENEFIT.REGISTRANTID = REGISTRANT.ID
where
REGISTRANT.EVENTID = @ID;
--The receipt amount needs to take into account the benefits in the new currency of the event.
update dbo.EVENTPRICE
set
RECEIPTAMOUNT = (EVENTPRICE.AMOUNT - (EVENTPRICE.COST + (select coalesce(sum(EVENTPRICEBENEFIT.EVENTBASECURRENCYTOTALVALUE),0) from dbo.EVENTPRICEBENEFIT where EVENTPRICEID = EVENTPRICE.ID))),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.EVENTPRICE
where
EVENTPRICE.EVENTID = @ID;
--The receipt amount needs to take into account the benefits in the new currency of the event.
update dbo.REGISTRANTREGISTRATION
set
REGISTRANTREGISTRATION.RECEIPTAMOUNT =
case when REGISTRANT.BENEFITSWAIVED = 1
then (EVENTPRICE.AMOUNT - EVENTPRICE.COST)
else EVENTPRICE.RECEIPTAMOUNT
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.REGISTRANTREGISTRATION
inner join dbo.EVENTPRICE on REGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
left join dbo.REGISTRANTREGISTRATIONMAP on REGISTRANTREGISTRATION.ID = REGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID
left join dbo.REGISTRANT on REGISTRANTREGISTRATIONMAP.REGISTRANTID = REGISTRANT.ID
where
EVENTPRICE.EVENTID = @ID
and REGISTRANTREGISTRATION.AMOUNT <> 0; --Registration fee waived.
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;