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