USP_EVENTLODGINGROOMINSTANCE_ADDORUPDATE

Updates the room type if an instance exists with the given number at the given lodging, else adds the info. Returns the Id of the affected record.

Parameters

Parameter Parameter Type Mode Description
@ROOMNUMBER nvarchar(10) IN
@EVENTLODGINGID uniqueidentifier IN
@EVENTLODGINGROOMID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE date IN
@ID uniqueidentifier INOUT
@REGISTRANTLODGINGID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_EVENTLODGINGROOMINSTANCE_ADDORUPDATE
(
    @ROOMNUMBER nvarchar(10),
    @EVENTLODGINGID uniqueidentifier,
    @EVENTLODGINGROOMID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTDATE date = null,
    @ID uniqueidentifier output,
    @REGISTRANTLODGINGID uniqueidentifier = null
)
as

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

    if @CURRENTDATE is null
        set @CURRENTDATE = getdate();

    -- 6/24/13 Don't put all people with no room number in the same room!

    if @ROOMNUMBER = N''
        select
            @ID = EVENTLODGINGROOMINSTANCEID
        from
            dbo.REGISTRANTLODGING
        where
            ID = @REGISTRANTLODGINGID;
    else
    begin

        declare @EXISTINGEVENTLODGINGROOMID uniqueidentifier;

        select
            @EXISTINGEVENTLODGINGROOMID = EVENTLODGINGROOMID
        from
            dbo.EVENTLODGINGROOMINSTANCE
        where
            EVENTLODGINGROOMINSTANCE.ROOMNUMBER = @ROOMNUMBER
            and EVENTLODGINGROOMINSTANCE.EVENTLODGINGID = @EVENTLODGINGID;

        declare @EXISTINGEVENTLODGINGROOMINSTANCEID uniqueidentifier;
        select
            @EXISTINGEVENTLODGINGROOMINSTANCEID = EVENTLODGINGROOMINSTANCEID
        from
            dbo.REGISTRANTLODGING
        where
            ID = @REGISTRANTLODGINGID;

        select
            @ID = EVENTLODGINGROOMINSTANCE.ID
        from
            dbo.EVENTLODGINGROOMINSTANCE
        where
            EVENTLODGINGROOMINSTANCE.ROOMNUMBER = @ROOMNUMBER
            and EVENTLODGINGROOMINSTANCE.EVENTLODGINGID = @EVENTLODGINGID;

        if @EXISTINGEVENTLODGINGROOMID <> @EVENTLODGINGROOMID --Someone is already in this room number with a different room type

            and (
                @EXISTINGEVENTLODGINGROOMINSTANCEID is null and @ID is not null
                or @EXISTINGEVENTLODGINGROOMINSTANCEID <> @ID -- We aren't changing the room type

            )
        begin
            raiserror('BBERR_EVENTLODGING_ROOMNUMBEREXISTSASOTHERTYPE',13,1);
        end

    end

    if @ID is null
    begin
        set @ID = newid();
        insert into EVENTLODGINGROOMINSTANCE (
            ID,
            ROOMNUMBER,
            EVENTLODGINGID,
            EVENTLODGINGROOMID,
            [ADDEDBYID],
            [CHANGEDBYID],
            [DATEADDED],
            [DATECHANGED]
            )
        values (
            @ID,
            @ROOMNUMBER,
            @EVENTLODGINGID,
            @EVENTLODGINGROOMID,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
            )
    end
    else
    begin
        declare @EMPTYGUID uniqueidentifier = cast(cast(0 as binary) as uniqueidentifier);
        update 
            EVENTLODGINGROOMINSTANCE
        set
            EVENTLODGINGROOMINSTANCE.EVENTLODGINGROOMID = @EVENTLODGINGROOMID,
            EVENTLODGINGROOMINSTANCE.ROOMNUMBER = @ROOMNUMBER
        where
            EVENTLODGINGROOMINSTANCE.ID = @ID
            and
            -- Don't rewrite if we don't have to.

            (
                coalesce(EVENTLODGINGROOMINSTANCE.EVENTLODGINGROOMID, @EMPTYGUID) <> coalesce(@EVENTLODGINGROOMID, @EMPTYGUID)
                or EVENTLODGINGROOMINSTANCE.ROOMNUMBER <> @ROOMNUMBER
            );
    end