USP_DISCOUNT_QUALIFYINGMERCHANDISEITEMS_UPDATEFROMXML

Updates the DISCOUNTGROUPDETAILMERCHANDISEITEM table with the values passed in by xml.

Parameters

Parameter Parameter Type Mode Description
@DISCOUNTID uniqueidentifier IN
@XML xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


create procedure dbo.USP_DISCOUNT_QUALIFYINGMERCHANDISEITEMS_UPDATEFROMXML
(
    @DISCOUNTID uniqueidentifier,
    @XML xml,
    @CHANGEAGENTID uniqueidentifier,
    @CHANGEDATE datetime
)
as
begin
    set nocount on;

    if @CHANGEAGENTID is null
        exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    if @CHANGEDATE is null 
        set @CHANGEDATE = getdate()    

    -- build a temporary table containing the values from the XML

    declare @TempTbl table (
       [DISCOUNTGROUPID] uniqueidentifier,
       [ID] uniqueidentifier,
       [MERCHANDISEITEMID] uniqueidentifier,
       [SEQUENCE] integer)

    insert into @TempTbl 
    select
        T.c.value('(DISCOUNTGROUPID)[1]', 'uniqueidentifier') as DISCOUNTGROUPID,
        T.c.value('(ID)[1]','uniqueidentifier') as ID,            
        T.c.value('(MERCHANDISEITEMID)[1]','uniqueidentifier') as MERCHANDISEITEMID,
        T.c.value('(SEQUENCE)[1]','integer') as SEQUENCE
    from @XML.nodes('/QUALIFYINGDISCOUNTMERCHANDISEITEMS/ITEM') T(c)

    update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
    update @TempTbl set DISCOUNTGROUPID = newid() where (DISCOUNTGROUPID is null) or (DISCOUNTGROUPID = '00000000-0000-0000-0000-000000000000');

    if @@Error <> 0
        return 1;

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

    -- cache current context information 

    set @contextCache = CONTEXT_INFO();

    -- set CONTEXT_INFO to @CHANGEAGENTID 

    if not @CHANGEAGENTID is null
        set CONTEXT_INFO @CHANGEAGENTID;

    delete from dbo.[DISCOUNTGROUPDETAIL] where [DISCOUNTGROUPDETAIL].ID in 
        (select DISCOUNTGROUPDETAIL.ID 
        from dbo.DISCOUNTGROUPDETAIL
        inner join dbo.DISCOUNTGROUP 
            on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
        inner join dbo.DISCOUNT
            on DISCOUNT.ID = DISCOUNTGROUP.DISCOUNTID
        where DISCOUNT.ID = @DISCOUNTID
            and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
        EXCEPT select ID from @TempTbl)

    select @e=@@error;

    -- reset CONTEXT_INFO to previous value 

    if not @contextCache is null
        set CONTEXT_INFO @contextCache;

    if @e <> 0
        return 2;

    update dbo.DISCOUNTGROUPDETAILMERCHANDISEITEM
        set DISCOUNTGROUPDETAILMERCHANDISEITEM.MERCHANDISEITEMID = TEMP.MERCHANDISEITEMID,
            DISCOUNTGROUPDETAILMERCHANDISEITEM.SEQUENCE = TEMP.SEQUENCE
        from dbo.DISCOUNTGROUPDETAILMERCHANDISEITEM
        inner join @TempTbl as TEMP on TEMP.ID = DISCOUNTGROUPDETAILMERCHANDISEITEM.ID

    insert into dbo.[DISCOUNTGROUP] 
        ([DISCOUNTID], 
        [ID],    
        ADDEDBYID, 
        CHANGEDBYID, 
        DATEADDED, 
        DATECHANGED)
    select 
        @DISCOUNTID
        [DISCOUNTGROUPID],
        @CHANGEAGENTID
        @CHANGEAGENTID
        @CHANGEDATE
        @CHANGEDATE                
    from @TempTbl as [temp]
    where not exists (select ID from dbo.[DISCOUNTGROUPDETAILMERCHANDISEITEM] as data where data.ID = [temp].ID)

    insert into dbo.[DISCOUNTGROUPDETAIL]
        ([DISCOUNTGROUPID], 
        [ID],
        DISCOUNTEDITEM,
        DISCOUNTGROUPDETAILAPPLICATIONCODE,
        ADDEDBYID, 
        CHANGEDBYID, 
        DATEADDED, 
        DATECHANGED)
    select 
        [DISCOUNTGROUPID], 
        [ID],
        0,
        2, -- Merchandise item

        @CHANGEAGENTID
        @CHANGEAGENTID
        @CHANGEDATE
        @CHANGEDATE
    from @TempTbl as [temp]
    where not exists (select ID from dbo.[DISCOUNTGROUPDETAILMERCHANDISEITEM] as data where data.ID = [temp].ID)

    if @@Error <> 0
        return 2;

    insert into dbo.[DISCOUNTGROUPDETAILMERCHANDISEITEM]
        ([ID],
        MERCHANDISEITEMID,
        SEQUENCE,
        ADDEDBYID, 
        CHANGEDBYID, 
        DATEADDED, 
        DATECHANGED)
    select 
        [ID],
        MERCHANDISEITEMID,
        SEQUENCE,
        @CHANGEAGENTID
        @CHANGEAGENTID
        @CHANGEDATE
        @CHANGEDATE
    from @TempTbl as [temp]
    where not exists (select ID from dbo.[DISCOUNTGROUPDETAILMERCHANDISEITEM] as data where data.ID = [temp].ID)

end

if @@Error <> 0
    return 4;

return 0;