USP_DATAFORMTEMPLATE_ADD_RATESCALE

The save procedure used by the add dataform template "Rate Scale Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(255) IN Description
@ISDEFAULT bit IN Set as default rate scale
@ISSINGLEPRICE bit IN
@AMOUNT money IN Group of any size pays
@PRICES xml IN Prices
@APPLICATIONS xml IN Applications
@GROUPSALESGROUPTYPECODEID uniqueidentifier IN Group type
@USEPERTICKETAFTERMAX bit IN Group over size pays

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_RATESCALE
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @NAME nvarchar(100) = '',
    @DESCRIPTION nvarchar(255) = '',
    @ISDEFAULT bit = 0,
    @ISSINGLEPRICE bit = 0,
    @AMOUNT money = null,
    @PRICES xml = null,
    @APPLICATIONS xml = null,
    @GROUPSALESGROUPTYPECODEID uniqueidentifier = null,
    @USEPERTICKETAFTERMAX bit = 0
)
as

set nocount on;

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

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

declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()

begin try
    --Check to ensure nothing bad happens!

    if @ISSINGLEPRICE = 1
        set @USEPERTICKETAFTERMAX = 0;

    if exists (
        select    1
        from @APPLICATIONS.nodes('/APPLICATIONS/ITEM') T(c)
        where T.c.value('(TYPECODE)[1]','tinyint') = 0  -- PROGRAM

            and dbo.UFN_PROGRAM_ISPREREGISTERED(T.c.value('(PROGRAMID)[1]', 'uniqueidentifier')) = 1
        )
        raiserror('BBERR_INVALIDPROGRAM', 13, 1);

    if @ISDEFAULT = 1 and exists (select 1 from dbo.RATESCALE where ISDEFAULT = 1)
    begin
        update dbo.RATESCALE set
            ISDEFAULT = 0,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where
            ID <> @ID
    end

    insert into dbo.RATESCALE
    (
        ID, 
        NAME, 
        DESCRIPTION, 
        ISDEFAULT, 
        INCLUDEALLPROGRAMS,
        INCLUDEALLFEES,
        INCLUDEALLRESOURCES,
        INCLUDEALLSTAFFRESOURCES,
        GROUPSALESGROUPTYPECODEID,
        USEPERTICKETAFTERMAX,
        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
    )
    values
    (
        @ID
        @NAME
        @DESCRIPTION
        @ISDEFAULT
        1,
        1,
        1,
        1,
        @GROUPSALESGROUPTYPECODEID,
        @USEPERTICKETAFTERMAX,
        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
    )

    declare @PRICETABLE table
    (
        ID uniqueidentifier,
        GROUPMINIMUM smallint,
        GROUPMAXIMUM smallint,
        AMOUNT money
    )

    if @ISSINGLEPRICE = 0
    begin


        insert into @PRICETABLE
        ( ID, GROUPMINIMUM, GROUPMAXIMUM, AMOUNT )
        select
            newid(),
            null,
            T.c.value('(SIZE)[1]','smallint'),
            T.c.value('(AMOUNT)[1]','money')
        from
            @PRICES.nodes('/PRICES/ITEM') T(c)
        order by T.c.value('(SIZE)[1]','smallint')

        if exists (select 1 from @PRICETABLE where GROUPMAXIMUM <= 0)
        begin
            raiserror('BBERR_GROUPSIZE', 13, 1);
            return 1;
        end
        if exists (select 1 from @PRICETABLE where AMOUNT < 0)
        begin
            raiserror('BBERR_MINPRICE', 13, 1);
            return 1;
        end


        if @AMOUNT < 0
        begin
            raiserror('BBERR_MINOVERAMOUNT', 13, 1);
            return 1;
        end

        update @PRICETABLE set
            GROUPMINIMUM = isnull((
                            select max(GROUPMAXIMUM)
                            from @PRICETABLE PT2
                            where PT2.GROUPMAXIMUM < [@PRICETABLE].GROUPMAXIMUM),0)

        update @PRICETABLE set
            GROUPMINIMUM = GROUPMINIMUM + 1
        where GROUPMINIMUM <> 0

        delete from @PRICETABLE
        where GROUPMAXIMUM = 0
    end
    else
    begin
        if @AMOUNT < 0
        begin
            raiserror('BBERR_MINAMOUNT', 13, 1);
            return 1;
        end
    end

    insert into @PRICETABLE
    ( ID, GROUPMINIMUM,    GROUPMAXIMUM, AMOUNT )
    select
        newid(),
        isnull(GROUPMAX + 1,0),
        -1,
        @AMOUNT
    from (select max(GROUPMAXIMUM) as GROUPMAX from @PRICETABLE) PT        


    insert into dbo.RATESCALEPRICE
    (
        ID,
        RATESCALEID,
        AMOUNT,
        GROUPMINIMUM,
        GROUPMAXIMUM,
        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
    )
    select
        ID,
        @ID,
        AMOUNT,
        GROUPMINIMUM,
        GROUPMAXIMUM,
        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
    from @PRICETABLE

    -- If this includes per ticket pricing, ensure the max price has the proper value

    if @USEPERTICKETAFTERMAX = 1 and @ISSINGLEPRICE = 0
    begin
        declare @MAXPRICE money;
        select top(1) @MAXPRICE = AMOUNT
        from dbo.RATESCALEPRICE
        where RATESCALEID = @ID
        order by GROUPMAXIMUM desc

        update dbo.RATESCALEPRICE
        set AMOUNT = @MAXPRICE,
            DATECHANGED = @CURRENTDATE,
            CHANGEDBYID = @CHANGEAGENTID                            
        where RATESCALEID = @ID and GROUPMAXIMUM = -1
    end

    declare @MAXPERCENT decimal(5,2) = 0.0
    select
        @MAXPERCENT = isnull(sum(T.c.value('(PERCENT)[1]','decimal(5,2)')),0)
    from
        @APPLICATIONS.nodes('/APPLICATIONS/ITEM') T(c)

    if @MAXPERCENT <> 100.0
    begin
        raiserror('BBERR_TOTALPERCENT', 13, 1);
        return 1;
    end

    exec dbo.USP_RATESCALE_GETRATESCALEAPPLICATIONS_ADDFROMXML @ID, @APPLICATIONS, @CHANGEAGENTID, @CURRENTDATE;

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0