USP_DATAFORMTEMPLATE_EDIT_PROGRAMGROUP

The save procedure used by the edit dataform template "Program Group Edit Data 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.
@NAME nvarchar(100) IN Name
@DESCRIPTION nvarchar(255) IN Description
@USESELECTION bit IN Get programs from selection
@IDSETREGISTERID uniqueidentifier IN Selection
@PROGRAMS xml IN Programs
@PRICES xml IN Prices

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PROGRAMGROUP (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @NAME nvarchar(100),
    @DESCRIPTION nvarchar(255),
    @USESELECTION bit,
    @IDSETREGISTERID uniqueidentifier,
    @PROGRAMS xml,
    @PRICES xml
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime = getdate();

    declare @COMBINATIONID uniqueidentifier;
    select @COMBINATIONID = COMBINATIONID from dbo.PROGRAMGROUP where ID = @ID;

    begin try
        if dbo.UFN_COMBINATION_HASONLINEAVAILABILITY(@COMBINATIONID) = 1 and (
                @USESELECTION = 1
                or (select count(*) from dbo.UFN_PROGRAMGROUP_GETPROGRAMS_FROMITEMLISTXML(@PROGRAMS)) > 1
        ) begin
            raiserror('BBERR_PROGRAMGROUP_ONLYONEPROGRAMALLOWED', 13, 1);
        end

        update dbo.PROGRAMGROUP set
            NAME = @NAME,
            DESCRIPTION = @DESCRIPTION,
            IDSETREGISTERID = case @USESELECTION when 1 then @IDSETREGISTERID else null end,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID = @ID;

        -- Update into program group programs
        if @USESELECTION = 1 and @IDSETREGISTERID is not null begin
            -- User choose the selection, so delete any manually input programs in the program group
            declare @contextCache varbinary(128) = CONTEXT_INFO();

            set CONTEXT_INFO @CHANGEAGENTID;

            delete from dbo.PROGRAMGROUPPROGRAM
            where PROGRAMGROUPID = @ID;

            /* reset CONTEXT_INFO to previous value */
            if not @contextCache is null begin
                set CONTEXT_INFO @contextCache;
            end
        end else begin
            -- Update the programs in the program group
            exec dbo.USP_PROGRAMGROUP_GETPROGRAMS_UPDATEFROMXML @ID, @PROGRAMS, @CHANGEAGENTID, @CURRENTDATE;
        end

        -- Update into program group price
        exec dbo.USP_PROGRAMGROUP_GETPRICES_UPDATEFROMXML @ID, @PRICES, @CHANGEAGENTID, @CURRENTDATE;
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;