USP_DATAFORMTEMPLATE_ADD_PROGRAMCOPY

The save procedure used by the add dataform template "Program Copy".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@OLDPROGRAMID uniqueidentifier IN Input parameter indicating the context ID for the record being 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
@SINGLELOCATION uniqueidentifier IN Location
@LOCATIONS xml IN Location
@HOLDLISTID uniqueidentifier IN Holds
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@CAPACITY int IN Capacity
@PROGRAMCATEGORYCODEID uniqueidentifier IN Category

Definition

Copy


        CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_PROGRAMCOPY
        (
            @ID uniqueidentifier = null output,
            @OLDPROGRAMID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier = null,
            @NAME nvarchar(100) = '',
            @DESCRIPTION nvarchar(255) = '',
            @SINGLELOCATION uniqueidentifier = null,
            @LOCATIONS xml = null,
            @HOLDLISTID uniqueidentifier = null,
            @CURRENTAPPUSERID uniqueidentifier,
            @CAPACITY int = 0,
            @PROGRAMCATEGORYCODEID uniqueidentifier = null
        )
        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()

        declare @ISPREREGISTERED bit;
        select @ISPREREGISTERED = ISPREREGISTERED from dbo.PROGRAM where ID = @OLDPROGRAMID;

        begin try
            -- handle inserting the data

            insert into dbo.PROGRAM
            (
                ID, 
                NAME,
                DESCRIPTION,
                HOLDLISTID,
                CAPACITY,
                ISDAILYADMISSION,
                PROGRAMCATEGORYCODEID,
                ISPREREGISTERED,
                PRICELISTID,
                DEFAULTRATESCALEID,
                DEFAULTPRICINGSTRUCTURECODE,
                PUBLICDESCRIPTIONTEXT,
                PUBLICDESCRIPTIONHTML,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                @ID
                @NAME,
                @DESCRIPTION,
                @HOLDLISTID,
                @CAPACITY,
                ISDAILYADMISSION,
                @PROGRAMCATEGORYCODEID,
                ISPREREGISTERED,
                PRICELISTID,
                DEFAULTRATESCALEID,
                DEFAULTPRICINGSTRUCTURECODE,
                PUBLICDESCRIPTIONTEXT,
                PUBLICDESCRIPTIONHTML,
                @CHANGEAGENTID
                @CHANGEAGENTID
                @CURRENTDATE
                @CURRENTDATE
            from
                dbo.PROGRAM
            where
                ID = @OLDPROGRAMID;

            if @SINGLELOCATION is null
                begin
                    -- Default 0 for SEQUENCE since it is a new field and may not be passed in

                    set @LOCATIONS = (
                        select
                            T.c.value('(CAPACITY)[1]','int') as 'CAPACITY',
                            T.c.value('(EVENTLOCATIONID)[1]','uniqueidentifier') as 'EVENTLOCATIONID',
                            T.c.value('(ID)[1]','uniqueidentifier') as 'ID',
                            isnull(T.c.value('(SEQUENCE)[1]','int'), 0) as 'SEQUENCE'
                        from
                            @LOCATIONS.nodes('/LOCATIONS/ITEM') T(c)
                        for xml raw('ITEM'),type,elements,root('LOCATIONS'),binary base64
                    );

                    exec dbo.USP_PROGRAM_GETSEQUENCEDLOCATIONS_ADDFROMXML @ID, @LOCATIONS, @CHANGEAGENTID, @CURRENTDATE;
                end
            else        
                begin
                    insert into dbo.PROGRAMLOCATION 
                    (
                     ID,
                     EVENTLOCATIONID,
                     PROGRAMID,
                     ISDEFAULT,
                     SEQUENCE,
                     ADDEDBYID,
                     CHANGEDBYID,
                     DATEADDED,
                     DATECHANGED
                     )
                     values 
                     (
                     newid(),
                     @SINGLELOCATION,
                     @ID,
                     1,
                     1,
                     @CHANGEAGENTID
                     @CHANGEAGENTID
                     @CURRENTDATE
                     @CURRENTDATE
                     );
                end

            --populate the sales type with the same sales types as the previous program

            insert into dbo.PROGRAMSALESMETHOD
            (
                ID,
                PROGRAMID,
                SALESMETHODID,
                ONSALETYPECODE,
                ONSALEDATE,
                ONSALETIME,
                ONSALETIMEBEFORE,
                ONSALEENDTYPECODE,
                ONSALEENDINTERVAL,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                newid(),
                @ID,
                SALESMETHODID,
                case
                    when ONSALETYPECODE = 1 and ONSALEDATE < dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE) then 0
                    else ONSALETYPECODE
                end,
                ONSALEDATE,
                ONSALETIME,
                ONSALETIMEBEFORE,
                ONSALEENDTYPECODE,
                ONSALEENDINTERVAL,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from
                dbo.PROGRAMSALESMETHOD
            where
                PROGRAMID = @OLDPROGRAMID;

            --populate the prices with the same prices as the previous program

            insert into dbo.PROGRAMPRICE
            (
                ID,
                PROGRAMID,
                PRICETYPECODEID,
                FACEPRICE,
                SEQUENCE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                newid(),
                @ID,
                PRICETYPECODEID,
                FACEPRICE,
                SEQUENCE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from
                dbo.PROGRAMPRICE
            where
                PROGRAMID = @OLDPROGRAMID;

            --copies the program discounts 

            exec dbo.USP_PROGRAM_COPYDISCOUNTS @OLDPROGRAMID, @ID, @CHANGEAGENTID;

            --copies the ticket templates

            insert into dbo.PROGRAMDOCUMENT
            (
                ID,
                PROGRAMID,
                DOCUMENTID,
                SEQUENCE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                newid(),
                @ID,
                DOCUMENTID,
                SEQUENCE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from
                dbo.PROGRAMDOCUMENT
            where
                PROGRAMID = @OLDPROGRAMID

            --copies the program fees 

            insert into dbo.PROGRAMFEE
            (
            ID,
            PROGRAMID,
            FEEID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
            )
            select 
                newid(),
                @ID,
                FEEID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from 
                dbo.PROGRAMFEE
            where 
                PROGRAMID=@OLDPROGRAMID;


            --copies the program taxes 

            insert into dbo.PROGRAMTAX
            (
            ID,
            PROGRAMID,
            TAXID,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
            )
            select 
                newid(),
                @ID,
                TAXID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from 
                dbo.PROGRAMTAX
            where 
                PROGRAMID=@OLDPROGRAMID;

            --insert gl mapping

            insert into dbo.PROGRAMGLMAPPING
            (
            ID,
            ACCOUNTNUMBER,
            PROJECTCODE,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
            )
            select 
                @ID,
                ACCOUNTNUMBER,
                PROJECTCODE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from 
                dbo.PROGRAMGLMAPPING
            where 
                ID=@OLDPROGRAMID;

            --insert program resources

            insert into dbo.PROGRAMRESOURCE
            (
            ID,
            PROGRAMID,
            RESOURCEID,
            QUANTITYNEEDED,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
            )
            select
                newid(),
                @ID,
                RESOURCEID,
                QUANTITYNEEDED,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from 
                dbo.PROGRAMRESOURCE
            where 
                PROGRAMID=@OLDPROGRAMID;

            --insert program staff resources

            insert into dbo.PROGRAMSTAFFRESOURCE
            (
            ID,
            PROGRAMID,
            VOLUNTEERTYPEID,
            JOBID,
            QUANTITYNEEDED,
            FILLEDBYCODE,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
            )
            select
                newid(),
                @ID,
                VOLUNTEERTYPEID,
                null,
                QUANTITYNEEDED,
                FILLEDBYCODE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from
                dbo.PROGRAMSTAFFRESOURCE
            where
                PROGRAMID = @OLDPROGRAMID;

            -- Copying preregistered programs (preferences)

            if @ISPREREGISTERED = 1
            begin
                    declare @PREFERENCESGROUPTABLE table (OLDID uniqueidentifier, NEWID uniqueidentifier, NAME nvarchar(100));

                    insert into @PREFERENCESGROUPTABLE
                    select ID,
                        newid(),
                        NAME
                    from dbo.PROGRAMPREFERENCEGROUP
                    where PROGRAMID = @OLDPROGRAMID

                    insert into dbo.PROGRAMPREFERENCEGROUP
                    (
                        ID, 
                        PROGRAMID, 
                        NAME, 
                        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                    )
                    select
                        NEWID,
                        @ID,
                        NAME,
                        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                    from @PREFERENCESGROUPTABLE

                    insert into dbo.PROGRAMPREFERENCE
                    (
                        ID, 
                        NAME, 
                        SEQUENCE,
                        PROGRAMPREFERENCEGROUPID,
                        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED                        
                    )
                    select newid(),
                        PP.NAME,
                        PP.SEQUENCE,                        
                        PGT.NEWID,
                        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE                            
                    from dbo.PROGRAMPREFERENCE PP
                    inner join @PREFERENCESGROUPTABLE PGT
                        on PGT.OLDID = PP.PROGRAMPREFERENCEGROUPID    

                    declare @REGISTRATIONSECTIONS table (OLDID uniqueidentifier, NEWID uniqueidentifier, REGISTRATIONSECTIONCODEID uniqueidentifier, SEQUENCE int);

                    insert into @REGISTRATIONSECTIONS (OLDID, NEWID, REGISTRATIONSECTIONCODEID, SEQUENCE)
                        select
                            ID,
                            newID(),
                            REGISTRATIONSECTIONCODEID,
                            SEQUENCE
                        from dbo.PROGRAMEVENTREGISTRATIONSECTION
                        where PROGRAMID = @OLDPROGRAMID;

                    insert into dbo.PROGRAMEVENTREGISTRATIONSECTION (ID, PROGRAMID, EVENTID, REGISTRATIONSECTIONCODEID, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)                    
                        select 
                            NEWID,
                            @ID,
                            null,
                            REGISTRATIONSECTIONCODEID,
                            SEQUENCE,
                            @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE                            
                        from @REGISTRATIONSECTIONS;

                    insert into dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION (ID, PROGRAMEVENTREGISTRATIONSECTIONID, REGISTRATIONINFORMATIONID, SEQUENCE, REQUIRED, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        select
                            newID(),
                            REGISTRATIONSECTIONS.NEWID,
                            PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.REGISTRATIONINFORMATIONID,
                            PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.SEQUENCE,
                            PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.REQUIRED,
                            @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                        from @REGISTRATIONSECTIONS REGISTRATIONSECTIONS
                        inner join dbo.PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION
                            on REGISTRATIONSECTIONS.OLDID = PROGRAMEVENTREGISTRATIONSECTIONREGISTRATIONINFORMATION.PROGRAMEVENTREGISTRATIONSECTIONID;
            end

        end try

        begin catch
            exec dbo.USP_RAISE_ERROR
            return 1
        end catch

        return 0