USP_DESIGNATIONHYBRID_DELETE

Executes the "Designation Hybrid: Delete" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being deleted.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the delete.

Definition

Copy


CREATE procedure dbo.USP_DESIGNATIONHYBRID_DELETE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as begin
    set nocount on;

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

    declare @LEVEL1ID uniqueidentifier;
    declare @LEVEL2ID uniqueidentifier;
    declare @LEVEL3ID uniqueidentifier;
    declare @LEVEL4ID uniqueidentifier;
    declare @LEVEL5ID uniqueidentifier;
    declare @NUMREVENUERECS int;

    select 
        @LEVEL1ID = DESIGNATIONLEVEL1ID,
        @LEVEL2ID = DESIGNATIONLEVEL2ID,
        @LEVEL3ID = DESIGNATIONLEVEL3ID,
        @LEVEL4ID = DESIGNATIONLEVEL4ID,
        @LEVEL5ID = DESIGNATIONLEVEL5ID
    from 
        dbo.DESIGNATION
    where 
        ID = @ID

    -- get a list of all of the designation levels associated with this hierarchy

    declare @DESIGNATIONLEVELIDS table(DESIGNATIONLEVELID uniqueidentifier);
    insert into @DESIGNATIONLEVELIDS
    select
        case 
            when DESIGNATION.DESIGNATIONLEVEL2ID is null then DESIGNATION.DESIGNATIONLEVEL1ID
            when DESIGNATION.DESIGNATIONLEVEL3ID is null then DESIGNATION.DESIGNATIONLEVEL2ID
            when DESIGNATION.DESIGNATIONLEVEL4ID is null then DESIGNATION.DESIGNATIONLEVEL3ID
            when DESIGNATION.DESIGNATIONLEVEL5ID is null then DESIGNATION.DESIGNATIONLEVEL4ID
            else DESIGNATION.DESIGNATIONLEVEL5ID
        end
    from
        dbo.DESIGNATION
    where
    (
        DESIGNATION.ID = @ID
    )
    or
    (
        (DESIGNATION.DESIGNATIONLEVEL1ID = @LEVEL1ID) and
        (DESIGNATION.DESIGNATIONLEVEL2ID = @LEVEL2ID or @LEVEL2ID is null) and
        (DESIGNATION.DESIGNATIONLEVEL3ID = @LEVEL3ID or @LEVEL3ID is null) and
        (DESIGNATION.DESIGNATIONLEVEL4ID = @LEVEL4ID or @LEVEL4ID is null) and
        (DESIGNATION.DESIGNATIONLEVEL5ID = @LEVEL5ID or @LEVEL5ID is null)
    );

    -- get the hierarchy item if root node

    declare @HIERARCHYID uniqueidentifier;
    select
        @HIERARCHYID = DESIGNATIONLEVELTYPEHIERARCHYITEM.DESIGNATIONLEVELTYPEHIERARCHYID
    from
        dbo.DESIGNATION
    inner join
        dbo.DESIGNATIONLEVELTYPEHIERARCHYITEM on DESIGNATIONLEVELTYPEHIERARCHYITEM.ID = DESIGNATION.DESIGNATIONLEVELTYPEHIERARCHYITEMID
    where
        DESIGNATION.ID = @ID
        and DESIGNATION.DESIGNATIONLEVEL2ID is null;

    declare @CONTEXTCACHE varbinary(128);
    begin try
        -- delete the designation hierarchy

        exec dbo.USP_DESIGNATION_DELETE @ID, @CHANGEAGENTID;

        -- if the designation is root delete hierarchy instance

        exec dbo.USP_DESIGNATIONLEVELTYPEHIERARCHY_DELETEBYID_WITHCHANGEAGENTID @HIERARCHYID, @CHANGEAGENTID;

        -- only delete designation levels which belong exclusively to this hierarchy

        delete from 
            @DESIGNATIONLEVELIDS
        where 
            DESIGNATIONLEVELID in
            (
                select coalesce(DESIGNATIONLEVEL5ID, DESIGNATIONLEVEL4ID, DESIGNATIONLEVEL3ID, DESIGNATIONLEVEL2ID, DESIGNATIONLEVEL1ID) from dbo.DESIGNATION
            );

        set @CONTEXTCACHE = CONTEXT_INFO();
        set CONTEXT_INFO @CHANGEAGENTID;

        -- delete the designation levels

        delete from
            dbo.DESIGNATIONLEVEL
        where
            DESIGNATIONLEVEL.ID in
            (
                select DESIGNATIONLEVELID from @DESIGNATIONLEVELIDS
            );

        if @CONTEXTCACHE is not null
            set CONTEXT_INFO @CONTEXTCACHE;

    end try

    begin catch
        if @CONTEXTCACHE is not null
            set CONTEXT_INFO @CONTEXTCACHE;

        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;
end