USP_DATAFORMTEMPLATE_EDIT_DESIGNATIONHYBRID_2

The save procedure used by the edit dataform template "Designation Hybrid 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.
@DESIGNATIONLEVELTYPEID uniqueidentifier IN Type
@NAME nvarchar(100) IN Name
@VANITYNAME nvarchar(512) IN Public name
@DESCRIPTION nvarchar(255) IN Description
@DESIGNATIONLEVELCATEGORYCODEID uniqueidentifier IN Category
@LOOKUPID nvarchar(100) IN Lookup ID
@DESIGNATIONREPORT1CODEID uniqueidentifier IN Report code 1
@DESIGNATIONREPORT2CODEID uniqueidentifier IN Report code 2
@STARTDATE datetime IN Start date
@ENDDATE datetime IN End date
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SITEID uniqueidentifier IN Site

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_DESIGNATIONHYBRID_2
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @DESIGNATIONLEVELTYPEID uniqueidentifier,
    @NAME nvarchar(100),
    @VANITYNAME nvarchar(512),
    @DESCRIPTION nvarchar(255),
    @DESIGNATIONLEVELCATEGORYCODEID uniqueidentifier,
    @LOOKUPID nvarchar(100),
    @DESIGNATIONREPORT1CODEID uniqueidentifier,
    @DESIGNATIONREPORT2CODEID uniqueidentifier,
    @STARTDATE datetime,
    @ENDDATE datetime,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @SITEID uniqueidentifier
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    begin try

    if (@SITEID is not null
        begin
            if dbo.UFN_SITEALLOWEDFORUSER(@CURRENTAPPUSERID, @SITEID) = 0 begin
                raiserror ('ERR_SITE_NOACCESS',13,1);
                return 1;
            end
        end

        declare @DESIGNATIONLEVELID uniqueidentifier;

        declare @DESIGNATIONLOOKUPIDOLD nvarchar(512);
        declare @DESIGNATIONLOOKUPID nvarchar(512);

        declare @PARENTID uniqueidentifier;
        declare @PARENTLOOKUPID nvarchar(512);
        declare @PARENTHIERARCHYITEMID uniqueidentifier;

        select
            @DESIGNATIONLEVELID = case 
                when DESIGNATIONLEVEL2ID is null then DESIGNATIONLEVEL1ID
                when DESIGNATIONLEVEL3ID is null then DESIGNATIONLEVEL2ID
                when DESIGNATIONLEVEL4ID is null then DESIGNATIONLEVEL3ID
                when DESIGNATIONLEVEL5ID is null then DESIGNATIONLEVEL4ID
                else DESIGNATIONLEVEL5ID
            end,
            @DESIGNATIONLOOKUPIDOLD = USERID
        from
            dbo.DESIGNATION
        where
            ID = @ID;

        -- get the parent designation's id and template id to perform validation
        select 
            @PARENTID = PARENTDESIGNATION.ID,
            @PARENTLOOKUPID = PARENTDESIGNATION.USERID,
            @PARENTHIERARCHYITEMID = PARENTDESIGNATION.DESIGNATIONLEVELTYPEHIERARCHYITEMID
        from
            dbo.DESIGNATION
        left outer join
            dbo.DESIGNATION [PARENTDESIGNATION] on DESIGNATION.DESIGNATIONLEVEL1ID = PARENTDESIGNATION.DESIGNATIONLEVEL1ID
                and (DESIGNATION.DESIGNATIONLEVEL2ID = PARENTDESIGNATION.DESIGNATIONLEVEL2ID or (PARENTDESIGNATION.DESIGNATIONLEVEL2ID is null and DESIGNATION.DESIGNATIONLEVEL3ID is null))
                and (DESIGNATION.DESIGNATIONLEVEL3ID = PARENTDESIGNATION.DESIGNATIONLEVEL3ID or (PARENTDESIGNATION.DESIGNATIONLEVEL3ID is null and DESIGNATION.DESIGNATIONLEVEL4ID is null))
                and (DESIGNATION.DESIGNATIONLEVEL4ID = PARENTDESIGNATION.DESIGNATIONLEVEL4ID or (PARENTDESIGNATION.DESIGNATIONLEVEL4ID is null and DESIGNATION.DESIGNATIONLEVEL5ID is null))
        where
            DESIGNATION.ID = @ID
        and
            DESIGNATION.ID <> PARENTDESIGNATION.ID;

        -- build the designation lookup id by combining the parent designation's lookup ID with the fundraising purpose's lookup ID
        if @PARENTLOOKUPID is null
            set @DESIGNATIONLOOKUPID = @LOOKUPID
        else
            set @DESIGNATIONLOOKUPID = @PARENTLOOKUPID + '-' + @LOOKUPID;

        declare @HIERARCHYITEMID uniqueidentifier;
        select
            @HIERARCHYITEMID = ID
        from
            dbo.DESIGNATIONLEVELTYPEHIERARCHYITEM
        where
        (
            (PARENTID = @PARENTHIERARCHYITEMID)
            or
            (PARENTID is null and @PARENTHIERARCHYITEMID is null and @PARENTID is null)
        )
        and
            DESIGNATIONLEVELTYPEID = @DESIGNATIONLEVELTYPEID;

        -- validate that the designation level type is supported at this level in the hierarchy template
        if (@PARENTHIERARCHYITEMID is not null) and (@HIERARCHYITEMID is null)
            raiserror('The specified fundraising purpose type cannot be added to this level of the hierarchy.', 13, 1);

        -- update the fundraising purpose
        update
            dbo.DESIGNATIONLEVEL
        set
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE,
            NAME = @NAME,
            DESCRIPTION = @DESCRIPTION,
            USERID = @LOOKUPID,
            DESIGNATIONLEVELCATEGORYCODEID = @DESIGNATIONLEVELCATEGORYCODEID,
            DESIGNATIONLEVELTYPEID = @DESIGNATIONLEVELTYPEID,
            DESIGNATIONREPORT1CODEID = @DESIGNATIONREPORT1CODEID,
            DESIGNATIONREPORT2CODEID = @DESIGNATIONREPORT2CODEID,
            SITEID = @SITEID
        where
            DESIGNATIONLEVEL.ID = @DESIGNATIONLEVELID;

        -- update the designation
        update 
            dbo.DESIGNATION
        set
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE,
            VANITYNAME = @VANITYNAME,
            USERID = @DESIGNATIONLOOKUPID,
            DESIGNATIONREPORT1CODEID = @DESIGNATIONREPORT1CODEID,
            DESIGNATIONREPORT2CODEID = @DESIGNATIONREPORT2CODEID,
            DESIGNATIONLEVELTYPEHIERARCHYITEMID = @HIERARCHYITEMID,
            STARTDATE = @STARTDATE,
            ENDDATE = @ENDDATE
        where 
            DESIGNATION.ID = @ID;

        -- todo bwj 8/10/09 actually chase down the children instead of depending on uniqueness
        -- update child designation lookup ID's
        update
            dbo.DESIGNATION
        set
            USERID = @DESIGNATIONLOOKUPID + right(USERID, len(USERID) - len(@DESIGNATIONLOOKUPIDOLD))
        where
            left(USERID, len(@DESIGNATIONLOOKUPIDOLD)) = @DESIGNATIONLOOKUPIDOLD
        and
            ID <> @ID;

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

return 0;