USP_FAF_REGISTRATION

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@EVENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@DATEPURCHASED datetime IN
@SINGLEEVENTREGISTRATIONS xml IN
@WAIVEBENEFITS bit IN
@ISADD bit IN
@BYPASSSECURITY bit IN
@ISWALKIN bit IN

Definition

Copy


CREATE procedure dbo.USP_FAF_REGISTRATION
(
    @ID uniqueidentifier = null output,  
    @CURRENTAPPUSERID uniqueidentifier = null,  
    @CHANGEAGENTID uniqueidentifier = null,  
    @CURRENTDATE datetime = null,  
    @EVENTID uniqueidentifier,  
    @CONSTITUENTID uniqueidentifier,  
    @DATEPURCHASED datetime,  
    @SINGLEEVENTREGISTRATIONS xml,  
    @WAIVEBENEFITS bit,  
    @ISADD bit = 0,  
    @BYPASSSECURITY bit = 0,  
    @ISWALKIN bit = 0  

)
    with execute as caller  
    as
    set nocount on;  

    if @ID is null  
       set @ID = newid(); 

    -- check if registrant exists

    declare @REGISTRANTEXISTSWITHID bit;  
    if exists(select REGISTRANT.ID from dbo.REGISTRANT where REGISTRANT.ID = @ID)  
        set @REGISTRANTEXISTSWITHID = 1;  
    else  
        set @REGISTRANTEXISTSWITHID = 0

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

    set @CURRENTDATE = getdate();  

     --List the registrations that will be created or updated  

    declare @REGISTRATIONTOADDTABLE table  
    (  
     REGISTRATIONSCOLLECTIONID uniqueidentifier,  
     EVENTID uniqueidentifier,  
     EVENTPRICEID uniqueidentifier,  
     AMOUNT money,  
     RECEIPTAMOUNT money,  
     QUANTITY int,  
     DATEPURCHASED datetime,  
     REGISTRATIONPACKAGEID uniqueidentifier,  
     REGISTRANTREGISTRATIONID uniqueidentifier,  
     NEWREGISTRANTREGISTRATION bit  
    ); 

    insert into @REGISTRATIONTOADDTABLE  
    (  
       REGISTRATIONSCOLLECTIONID,  
       EVENTID,  
       EVENTPRICEID,  
       AMOUNT,  
       RECEIPTAMOUNT,  
       QUANTITY,  
       DATEPURCHASED,  
       REGISTRATIONPACKAGEID,  
       REGISTRANTREGISTRATIONID,  
       NEWREGISTRANTREGISTRATION  
    )  
    select  
       SELECTEDREGISTRATION.SINGLEEVENTREGISTRATIONID,  
       EVENTPRICE.EVENTID,  
       SELECTEDREGISTRATION.EVENTPRICEID,  
       SELECTEDREGISTRATION.AMOUNT,  
       SELECTEDREGISTRATION.RECEIPTAMOUNT,  
       SELECTEDREGISTRATION.QUANTITY,  
       @DATEPURCHASED,  
       null,  
       SELECTEDREGISTRATION.SINGLEEVENTREGISTRANTREGISTRATIONID,  
       0  
    from  
     (  
        --Directly selecting from collection field rather than using FROMITEMLISTXML function  

        SELECT  
        T.c.value('(SINGLEEVENTREGISTRATIONID)[1]','uniqueidentifier') AS 'SINGLEEVENTREGISTRATIONID',  
        T.c.value('(SINGLEEVENTREGISTRATIONEVENTPRICEID)[1]','uniqueidentifier') AS 'EVENTPRICEID',  
        T.c.value('(QUANTITY)[1]','int') AS 'QUANTITY',  
        T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',  
        T.c.value('(RECEIPTAMOUNT)[1]','money') AS 'RECEIPTAMOUNT',  
        T.c.value('(REGISTRATIONCOUNT)[1]','int') AS 'REGISTRATIONCOUNT',  
        T.c.value('(SINGLEEVENTREGISTRANTREGISTRATIONID)[1]','uniqueidentifier') AS 'SINGLEEVENTREGISTRANTREGISTRATIONID'  
      FROM @SINGLEEVENTREGISTRATIONS.nodes('/SINGLEEVENTREGISTRATIONS/ITEM') T(c)  
     ) SELECTEDREGISTRATION  
     inner join dbo.EVENTPRICE on SELECTEDREGISTRATION.EVENTPRICEID = EVENTPRICE.ID; 

    -- for existing registrant

    if @REGISTRANTEXISTSWITHID = 1 
        begin  
           update dbo.REGISTRANT set  
                  ATTENDED = 0,  
                  WILLNOTATTEND = 1,  
                  USERMARKEDATTENDANCE = 0,  
                  CHANGEDBYID = @CHANGEAGENTID,  
                  DATECHANGED = @CURRENTDATE  
           where  ID = @ID;  
        end
    -- new registrant

    else
       Begin
           insert into dbo.REGISTRANT  
              (  
               [ID],  
               [EVENTID],  
               [CONSTITUENTID],  
               [ATTENDED],  
               [WILLNOTATTEND],  
               [GUESTOFREGISTRANTID],  
               [BENEFITSWAIVED],  
               [ISWALKIN],  
               [ADDEDBYID],  
               [CHANGEDBYID],  
               [DATEADDED],  
               [DATECHANGED]  
              )  
           values  
              (  
               @ID,  
               @EVENTID,  
               @CONSTITUENTID,  
               @ISWALKIN, --Walk-in registrants attended by definition, pre-registrations set to not attended by default.  

               0, --Will attend  

               null,  
               @WAIVEBENEFITS,  
               @ISWALKIN,  
               @CHANGEAGENTID,  
               @CHANGEAGENTID,  
               @CURRENTDATE,  
               @CURRENTDATE  
              );  

         insert into dbo.REGISTRANTRESTRICTIONOPTION(REGISTRANTID, EVENTRESTRICTIONOPTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)  
             select  
                  @ID,  
                  CONSTITUENTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID,  
                  @CHANGEAGENTID,  
                  @CHANGEAGENTID,  
                  @CURRENTDATE,  
                  @CURRENTDATE  
             from   
                 dbo.CONSTITUENTRESTRICTIONOPTION  
                 left join dbo.REGISTRANTRESTRICTIONOPTION on REGISTRANTRESTRICTIONOPTION.REGISTRANTID = @ID and REGISTRANTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID = CONSTITUENTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID  
             where   
                 CONSTITUENTRESTRICTIONOPTION.CONSTITUENTID = @CONSTITUENTID  
              and REGISTRANTRESTRICTIONOPTION.ID is null  
              and exists(select 1 from dbo.REGISTRANT where REGISTRANT.ID = @ID)  
              and @ISADD = 1;  

         --default registrant restriction options from the constituent record  

          insert into dbo.REGISTRANTRESTRICTIONOPTION(REGISTRANTID, EVENTRESTRICTIONOPTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)  
           select  
                @ID,  
                CONSTITUENTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID,  
                @CHANGEAGENTID,  
                @CHANGEAGENTID,  
                @CURRENTDATE,  
                @CURRENTDATE  
           from   
               dbo.CONSTITUENTRESTRICTIONOPTION  
               left join dbo.REGISTRANTRESTRICTIONOPTION on REGISTRANTRESTRICTIONOPTION.REGISTRANTID = @ID 
               and REGISTRANTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID = CONSTITUENTRESTRICTIONOPTION.EVENTRESTRICTIONOPTIONID  
           where   
                CONSTITUENTRESTRICTIONOPTION.CONSTITUENTID = @CONSTITUENTID  
                and REGISTRANTRESTRICTIONOPTION.ID is null  
                and exists(select 1 from dbo.REGISTRANT where REGISTRANT.ID = @ID)  
                and @ISADD = 1

          update @REGISTRATIONTOADDTABLE  
              set  
                 REGISTRANTREGISTRATIONID = newid(),  
                 NEWREGISTRANTREGISTRATION = 1  
              where  
                REGISTRANTREGISTRATIONID is null;  

          --Add the registrations  

          declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(); 

          insert into dbo.REGISTRANTREGISTRATION  
          (  
               ID,  
               REGISTRANTID,  
               EVENTPRICEID,  
               QUANTITY,  
               AMOUNT,  
               RECEIPTAMOUNT,  
               DATEPURCHASED,  
               ORGANIZATIONAMOUNT,  
               ORGANIZATIONEXCHANGERATEID,  
               ADDEDBYID,  
               CHANGEDBYID,  
               DATEADDED,  
               DATECHANGED  
          )  
          select  
               SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID,  
               REGISTRANT.ID,  
               SELECTEDREGISTRATION.EVENTPRICEID,  
               SELECTEDREGISTRATION.QUANTITY,  
               SELECTEDREGISTRATION.AMOUNT,  
               SELECTEDREGISTRATION.RECEIPTAMOUNT,  
               SELECTEDREGISTRATION.DATEPURCHASED,  
               case  
                when EVENT.BASECURRENCYID = @ORGANIZATIONCURRENCYID  
                 then SELECTEDREGISTRATION.AMOUNT  
                else  
                 dbo.UFN_CURRENCY_CONVERT(SELECTEDREGISTRATION.AMOUNT, dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENT.BASECURRENCYID, @ORGANIZATIONCURRENCYID, @DATEPURCHASED, 0, null))  
               end,  
               case  
                when EVENT.BASECURRENCYID = @ORGANIZATIONCURRENCYID  
                 then null  
                else  
                 dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(EVENT.BASECURRENCYID, @ORGANIZATIONCURRENCYID, @DATEPURCHASED, 0, null)  
               end,  
               @CHANGEAGENTID,  
               @CHANGEAGENTID,  
               @CURRENTDATE,  
               @CURRENTDATE  
          from  
             dbo.REGISTRANT  
             inner join @REGISTRATIONTOADDTABLE SELECTEDREGISTRATION on  
              SELECTEDREGISTRATION.EVENTID = REGISTRANT.EVENTID  
             inner join dbo.EVENT on SELECTEDREGISTRATION.EVENTID = EVENT.ID  
          where  
             @CONSTITUENTID = REGISTRANT.CONSTITUENTID  
             and SELECTEDREGISTRATION.QUANTITY > 0  
             and SELECTEDREGISTRATION.REGISTRANTREGISTRATIONID not in  
               (select ID from dbo.REGISTRANTREGISTRATION); 

          --On an add form, the ID may be passed in, make sure a record exists.  

          if not exists(select REGISTRANT.ID from dbo.REGISTRANT where REGISTRANT.ID = @ID)  
              set @ID = null;  

          if @ID is null  
             select @ID = ID from  dbo.REGISTRANT  
             where CONSTITUENTID = @CONSTITUENTID and EVENTID = @EVENTID;  


       End