USP_MERGETASK_CONSTITUENT_VENDOR

Parameters

Parameter Parameter Type Mode Description
@SOURCEID uniqueidentifier IN
@TARGETID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_MERGETASK_CONSTITUENT_VENDOR
(
    @SOURCEID uniqueidentifier,
    @TARGETID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as
    set nocount on;

    -- WI 168786, if this is a group merge then skip the vendor merge task because groups cannot be vendors

    if dbo.UFN_CONSTITUENT_ISGROUP(@TARGETID) = 0
        begin

            declare @CURRENTDATE datetime = getdate();

            declare @PRODUCTSFORVENDOR table(ID uniqueidentifier);
            insert into @PRODUCTSFORVENDOR
            select
                PRODUCTID
            from dbo.PRODUCTVENDOR
            where VENDORID = @SOURCEID;

            declare @SERVICETYPESFORVENDOR table ([SERVICETYPECODE] tinyint);
            insert into @SERVICETYPESFORVENDOR
            select
                SERVICETYPECODE
            from dbo.MKTVENDORSERVICETYPE
            where VENDORID = @SOURCEID;

            declare @SERVICESFORVENDOR table ([SERVICEID] uniqueidentifier);
            insert into @SERVICESFORVENDOR
            select
                SERVICEID
            from MKTVENDORSERVICE
            where VENDORID = @SOURCEID;

            declare @e int;
            declare @contextCache varbinary(128);

            set @contextCache = CONTEXT_INFO();

            if not @CHANGEAGENTID is null
                set CONTEXT_INFO @CHANGEAGENTID

            delete from dbo.PRODUCTVENDOR where VENDORID=@SOURCEID;
            delete from dbo.MKTVENDORSERVICETYPE where VENDORID = @SOURCEID;
            delete from dbo.MKTVENDORSERVICE where VENDORID = @SOURCEID;

            if not @contextCache is null
                set CONTEXT_INFO @contextCache

            select @e=@@error;

            if @e<>0 return -456; --always return non-zero sp result if an error occurs


            -- if target constituent is not already a vendor

            if not exists(select 1 from dbo.VENDOR where ID = @TARGETID)
            begin
                update dbo.VENDOR 
                set 
                    ID = @TARGETID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @SOURCEID;
            end

            insert into dbo.PRODUCTVENDOR
            (
                VENDORID, 
                PRODUCTID,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                @TARGETID,
                ID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from @PRODUCTSFORVENDOR;

            insert into dbo.MKTVENDORSERVICETYPE
            (
                VENDORID,
                SERVICETYPECODE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                @TARGETID,
                SERVICETYPECODE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from @SERVICETYPESFORVENDOR as T
            where not exists (select top 1 1 from dbo.MKTVENDORSERVICETYPE where VENDORID = @TARGETID and SERVICETYPECODE = T.SERVICETYPECODE);

            insert into dbo.MKTVENDORSERVICE
            (
                VENDORID,
                SERVICEID,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                @TARGETID,
                SERVICEID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from @SERVICESFORVENDOR as T
            where not exists (select top 1 1 from dbo.MKTVENDORSERVICE where VENDORID = @TARGETID and SERVICEID = T.SERVICEID);

        end

    return 0;