spAddUpdate_SiteSurveys

Parameters

Parameter Parameter Type Mode Description
@PKID int INOUT
@CurrentUsersID int IN
@ClientSitesID int IN
@SiteContentsID int IN
@Title nvarchar(256) IN
@TitleVisible bit IN
@SubTitle nvarchar(1024) IN
@SubTitleVisible bit IN
@State int IN
@SubmitButtonText nvarchar(40) IN
@NextButtonText nvarchar(40) IN
@PrevButtonText nvarchar(40) IN
@PrevButtonVisible bit IN
@ExitButtonText nvarchar(40) IN
@ExitButtonVisible bit IN
@AllowMultipleSubmit bit IN
@AllowViewResults bit IN
@OnSubmitMsg nvarchar(1024) IN
@ClosedMsg nvarchar(1024) IN
@QuestionsXml ntext IN
@AnswersXml ntext IN
@ColumnsXml ntext IN
@ColumnDataXml ntext IN

Definition

Copy


CREATE  procedure [dbo].spAddUpdate_SiteSurveys (
        @PKID                    int OUTPUT,
        @CurrentUsersID            int,
        @ClientSitesID          int,
        @SiteContentsID         int,
        @Title                    nvarchar(256),
        @TitleVisible            bit,
        @SubTitle                nvarchar(1024),
        @SubTitleVisible        bit,
        @State                    integer,
        @SubmitButtonText        nvarchar(40),
        @NextButtonText         nvarchar(40),
        @PrevButtonText            nvarchar(40),
        @PrevButtonVisible        bit,
        @ExitButtonText            nvarchar(40),
        @ExitButtonVisible        bit,
        @AllowMultipleSubmit    bit,
        @AllowViewResults        bit,
        @OnSubmitMsg            nvarchar(1024),
        @ClosedMsg                nvarchar(1024),
        @QuestionsXml            ntext,
        @AnswersXml                ntext,
        @ColumnsXml                ntext,
        @ColumnDataXml            ntext
    )
    as
    begin
        set nocount on
        begin tran T1

        declare @sql_error        int
        declare @hasResponses     bit

        if (@PKID<=0
        begin

            insert into SiteSurveys(ID, ClientSitesID, Title, TitleVisible, SubTitle, SubTitleVisible, State
            SubmitButtonText, NextButtonText, PrevButtonText, PrevButtonVisible, ExitButtonText, ExitButtonVisible,
            AllowMultipleSubmit, AllowViewResults, OnSubmitMsg, ClosedMsg)
            VALUES (@SiteContentsID, @ClientSitesID, @Title, @TitleVisible, @SubTitle, @SubTitleVisible, @State
            @SubmitButtonText, @NextButtonText, @PrevButtonText, @PrevButtonVisible, @ExitButtonText, @ExitButtonVisible,
            @AllowMultipleSubmit, @AllowViewResults, @OnSubmitMsg, @ClosedMsg)

            select @sql_error = @@error
            select @PKID = @SiteContentsID
        end 
        else begin
            update SiteSurveys  
            set Title = @Title, TitleVisible = @TitleVisible, SubTitle = @SubTitle, SubTitleVisible = @SubTitleVisible
            State = @State, SubmitButtonText = @SubmitButtonText, NextButtonText = @NextButtonText
            PrevButtonText = @PrevButtonText, PrevButtonVisible = @PrevButtonVisible, ExitButtonText = @ExitButtonText
            ExitButtonVisible = @ExitButtonVisible, AllowMultipleSubmit = @AllowMultipleSubmit
            AllowViewResults = @AllowViewResults, OnSubmitMsg = @OnSubmitMsg, ClosedMsg = @ClosedMsg
            where ID = @PKID

            select @sql_error = @@error
        end

        if exists (select * from SiteSurveyResponses where SiteSurveysId = @PKID)
            set @hasResponses = 1
        else
            set @hasResponses = 0

        if (@sql_error = 0
        begin
            if (@hasResponses = 1)
                commit tran T1            
            else
            begin
                delete from SiteSurveyQuestions where SiteSurveysId = @PKID
                -- cascade delete constraint on SiteSurveyAnswers will take care
                -- of deleting the corresponding answers for the questions above

                if @@error <> 0 rollback tran T1

                declare @iDoc int
                declare @questions table (ID                         int,
                                        OriginalId                    int,
                                        SiteSurveysId                int,
                                        SiteSurveyQuestionTypesId    int,
                                        Sequence                    int,
                                        Page                        int,
                                        LinkText                     nvarchar(256),
                                        Question                     nvarchar(1540),
                                        SubTitle                     nvarchar(1540),
                                        RandomizeAnswers             bit,
                                        Mandatory                     bit,
                                        MaxAnswerLen                int,
                                        ConstantSumValue            int,
                                        SkipAutoNbr                    bit)

                -- Survey Questions
                exec sp_xml_preparedocument @idoc output, @QuestionsXml

                insert into @questions(OriginalId, SiteSurveysId, SiteSurveyQuestionTypesId, Sequence, Page, LinkText, 
                Question, SubTitle, RandomizeAnswers, Mandatory, MaxAnswerLen, ConstantSumValue, SkipAutoNbr)
                select ID, @PKID, SiteSurveyQuestionTypesId, Sequence, Page, LinkText, 
                Question, SubTitle, RandomizeAnswers, Mandatory, MaxAnswerLen, ConstantSumValue, SkipAutoNbr
                from OPENXML(@idoc, '/Survey/Question', 1
                with (ID int, SiteSurveyQuestionTypesId int, Sequence int, Page int, LinkText nvarchar(256), 
                Question nvarchar(1540), SubTitle nvarchar(1540), RandomizeAnswers bit, Mandatory bit, MaxAnswerLen int
                ConstantSumValue int, SkipAutoNbr bit)

                exec sp_xml_removedocument @idoc

                -- decode the question
                update @questions set Question = dbo.fnXmlDecode(Question)

                insert into SiteSurveyQuestions(SiteSurveysId, SiteSurveyQuestionTypesId, Sequence, Page, LinkText, 
                Question, SubTitle, RandomizeAnswers, Mandatory, MaxAnswerLen, ConstantSumValue, SkipAutoNbr)
                select SiteSurveysId, SiteSurveyQuestionTypesId, Sequence, Page, LinkText, 
                Question, SubTitle, RandomizeAnswers, Mandatory, MaxAnswerLen, ConstantSumValue, SkipAutoNbr
                from @questions

                if @@error = 0
                begin
                    update @questions
                    set ID = a.id
                    from SiteSurveyQuestions a
                    inner join @questions b
                    on b.Sequence = a.Sequence
                    and b.SiteSurveysId = a.SiteSurveysId
                    and b.SiteSurveyQuestionTypesId = a.SiteSurveyQuestionTypesId
                    and b.Page = a.Page

                    declare @answers table (SiteSurveyQuestionsId    int,
                                            Sequence                 int,
                                            Answer                     nvarchar(1540),
                                            NextQuestionId            int)

                    declare @columns table (Id                        int,
                                            OriginalId                int,
                                            SiteSurveyQuestionsId    int,
                                            Sequence                 int,
                                            ColumnName                nvarchar(256))

                    -- survey Answers
                    exec sp_xml_preparedocument @idoc output, @AnswersXml

                    insert into @answers(SiteSurveyQuestionsId, Sequence, Answer, NextQuestionId)
                    select SiteSurveyQuestionsId, Sequence, Answer, NextQuestionId
                    from openxml (@idoc, '/Survey/Answer', 1
                    with (SiteSurveyQuestionsId int, Sequence int, Answer nvarchar(1540), NextQuestionId int

                    exec sp_xml_removedocument @idoc

                    -- decode the answer
                    update @answers set Answer = dbo.fnXmlDecode(Answer)

                    update @answers set SiteSurveyQuestionsId = a.ID
                    from @questions a
                    where a.OriginalId = SiteSurveyQuestionsId

                    update @answers set NextQuestionId = null
                    where NextQuestionId < 1

                    -- survey Answer Columns
                    exec sp_xml_preparedocument @idoc output, @ColumnsXml

                    insert into @columns(OriginalId, SiteSurveyQuestionsId, Sequence, ColumnName)
                    select ID, SiteSurveyQuestionsId, Sequence, Answer
                    from openxml (@idoc, '/Survey/Answer', 1
                    with (ID int, SiteSurveyQuestionsId int, Sequence int, Answer nvarchar(256)) 

                    exec sp_xml_removedocument @idoc

                    -- decode the answer column
                    update @columns set ColumnName = dbo.fnXmlDecode(ColumnName)

                    update @columns set SiteSurveyQuestionsId = a.ID
                    from @questions a
                    where a.OriginalId = SiteSurveyQuestionsId

                    insert into SiteSurveyAnswers(SiteSurveyQuestionsId, Sequence, Answer, NextQuestionId)
                    select SiteSurveyQuestionsId, Sequence, Answer, NextQuestionId
                    from @answers

                    if @@error = 0
                    begin
                        insert into SiteSurveyAnswerColumns(SiteSurveyQuestionsId, Sequence, ColumnName)
                        select SiteSurveyQuestionsId, Sequence, ColumnName
                        from @columns

                        if @@error = 0
                        begin
                            update @columns
                            set ID = a.ID
                            from SiteSurveyAnswerColumns a
                            inner join @columns b
                            on a.SiteSurveyQuestionsId = b.SiteSurveyQuestionsId
                            and a.Sequence = b.Sequence

                            declare @columnData table (SiteSurveyAnswerColumnsId    int,
                                                        Sequence                     int,
                                                        Data                        nvarchar(256))

                            exec sp_xml_preparedocument @idoc output, @ColumnDataXml

                            insert into @columnData(SiteSurveyAnswerColumnsId, Sequence, Data)
                            select SiteSurveyAnswerColumnsId, Sequence, Data
                            from openxml (@idoc, '/Survey/AnswerColData', 1
                            with (SiteSurveyAnswerColumnsId int, Sequence int, Data nvarchar(256)) 

                            exec sp_xml_removedocument @idoc

                            -- decode Column Data
                            update @columndata set Data = dbo.fnXmlDecode(Data)

                            update @columnData set SiteSurveyAnswerColumnsId = a.ID
                            from @columns a
                            where a.OriginalId = SiteSurveyAnswerColumnsId

                            insert into SiteSurveyAnswerColumnData(SiteSurveyAnswerColumnsId, Sequence, Data)
                            select SiteSurveyAnswerColumnsId, Sequence, Data
                            from @columnData

                            if @@error = 0                    
                                commit tran T1
                            else
                                rollback tran T1
                        end
                        else
                            rollback tran T1
                    end
                    else
                        rollback tran T1
                end
                else
                    rollback tran T1
            end
        end
        else begin
            rollback tran T1
        end
    end