USP_DATAFORMTEMPLATE_EDIT_REGISTRANTBENEFIT
The save procedure used by the edit dataform template "Registrant Benefit 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. |
@BENEFIT | xml | IN | Benefits |
@BENEFITSWAIVED | bit | IN | Waive benefits |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REGISTRANTBENEFIT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@BENEFIT xml,
@BENEFITSWAIVED bit
)
as
set nocount on;
declare @CURRENTDATE datetime;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
begin try
declare @EVENTBASECURRENCYID uniqueidentifier;
select @EVENTBASECURRENCYID = EVENT.BASECURRENCYID
from dbo.REGISTRANT
inner join dbo.EVENT on REGISTRANT.EVENTID = EVENT.ID
where REGISTRANT.ID = @ID;
--Update the organization total value, transaction total value, and exchange rates in the @BENEFITS XML.
set @BENEFIT = dbo.UFN_REGISTRANTBENEFIT_CONVERTAMOUNTSINXML(@BENEFIT,@EVENTBASECURRENCYID);
exec dbo.USP_REGISTRANT_GETREGISTRATIONBENEFITS_UPDATEFROMXML @ID, @BENEFIT;
-- delete record from dbo.REGISTRANTBENEFITEXTENSION without BENEFITID in REGISTRANTBENEFIT
declare @BENEFITID uniqueidentifier;
select @BENEFITID = BENEFITID from dbo.REGISTRANTBENEFITEXTENSION where REGISTRANTID = @ID;
if(select count(*) from dbo.REGISTRANTBENEFIT where REGISTRANTID = @ID and BENEFITID = @BENEFITID) = 0
delete from dbo.REGISTRANTBENEFITEXTENSION where REGISTRANTID = @ID and BENEFITID = @BENEFITID;
update dbo.REGISTRANT
set
BENEFITSWAIVED = @BENEFITSWAIVED,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
-- Update receipt amount
;with BENEFITS_CTE as
(
select
REGISTRATIONSFORCONSTITUENT.REGISTRANTREGISTRATIONID,
case
when REGISTRANT.BENEFITSWAIVED = 0 then coalesce(sum(REGISTRANTBENEFIT.TOTALVALUE), 0)
else 0
end as TOTALVALUE
from dbo.REGISTRANTREGISTRATIONMAP REGISTRATIONSFORCONSTITUENT
inner join dbo.REGISTRANTREGISTRATIONMAP REGISTRATIONSFOROPTION on REGISTRATIONSFORCONSTITUENT.REGISTRANTREGISTRATIONID = REGISTRATIONSFOROPTION.REGISTRANTREGISTRATIONID
inner join dbo.REGISTRANT on REGISTRATIONSFOROPTION.REGISTRANTID = REGISTRANT.ID
left join dbo.REGISTRANTBENEFIT on REGISTRATIONSFOROPTION.REGISTRANTID = REGISTRANTBENEFIT.REGISTRANTID
where
REGISTRATIONSFORCONSTITUENT.REGISTRANTID = @ID
group by REGISTRATIONSFORCONSTITUENT.REGISTRANTREGISTRATIONID, REGISTRANT.BENEFITSWAIVED
)
update dbo.REGISTRANTREGISTRATION
set
RECEIPTAMOUNT = REGISTRANTREGISTRATION.AMOUNT - (REGISTRANTREGISTRATION.QUANTITY * EVENTPRICE.COST) - coalesce(BENEFITS_CTE.TOTALVALUE, 0),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.REGISTRANTREGISTRATION
left join BENEFITS_CTE on BENEFITS_CTE.REGISTRANTREGISTRATIONID = REGISTRANTREGISTRATION.ID
left join dbo.EVENTPRICE on REGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
where
REGISTRANTREGISTRATION.ID = BENEFITS_CTE.REGISTRANTREGISTRATIONID and
REGISTRANTREGISTRATION.RECEIPTAMOUNT <> REGISTRANTREGISTRATION.AMOUNT - (REGISTRANTREGISTRATION.QUANTITY * EVENTPRICE.COST) - coalesce(BENEFITS_CTE.TOTALVALUE, 0)
-- if there is only one designation amount, update it to match the new receipt amount; other wise they will get a warning to manually update the amounts
if (select count(*) from dbo.REGISTRANTDESIGNATION where REGISTRANTID = @ID and AMOUNT > 0) = 1
begin
update dbo.REGISTRANTDESIGNATION
set
AMOUNT = (select sum(RECEIPTAMOUNT) from dbo.REGISTRANTREGISTRATION where REGISTRANTREGISTRATION.REGISTRANTID = @ID),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where REGISTRANTID = @ID and AMOUNT > 0;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0