USP_DISCOUNT_UPDATEMERCHANDISE

Updates merchandise info for a with required purchase discount.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@APPLIESTOMERCHANDISECODE tinyint IN
@DISCOUNTMERCHANDISEDEPARTMENTS xml IN
@DISCOUNTMERCHANDISEITEMS xml IN

Definition

Copy


CREATE procedure dbo.USP_DISCOUNT_UPDATEMERCHANDISE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTDATE datetime = null,
    @APPLIESTOMERCHANDISECODE tinyint,
    @DISCOUNTMERCHANDISEDEPARTMENTS xml,
    @DISCOUNTMERCHANDISEITEMS xml
)
as
begin
    set nocount on;

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

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

    declare @contextCache varbinary(128);

    if @APPLIESTOMERCHANDISECODE in (0, 5, 6)
    begin
        /* cache current context information */
        set @contextCache = CONTEXT_INFO();

        /* set CONTEXT_INFO to @CHANGEAGENTID */
        if not @CHANGEAGENTID is null
            set CONTEXT_INFO @CHANGEAGENTID

        declare @PREVIOUSAPPLICATIONCODE tinyint;
        select top 1 
            @PREVIOUSAPPLICATIONCODE = DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE
        from dbo.DISCOUNTGROUPDETAIL
        inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
        inner join dbo.DISCOUNT on DISCOUNTGROUP.DISCOUNTID = DISCOUNT.ID
        where DISCOUNT.ID = @ID
            and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 1

        if @PREVIOUSAPPLICATIONCODE <> 0 or @PREVIOUSAPPLICATIONCODE is null
        begin        
            -- get rid of all merchandisedepartments and merchandiseitems

            delete from dbo.DISCOUNTGROUP
            where DISCOUNTGROUP.ID in
                (
                    select DISCOUNTGROUP.ID
                    from dbo.DISCOUNTGROUPDETAIL
                    inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
                    inner join dbo.DISCOUNT on DISCOUNTGROUP.DISCOUNTID = DISCOUNT.ID
                    where DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE in (1, 2, 5, 6)
                        and DISCOUNT.ID = @ID
                        and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 1
                )

            declare @DISCOUNTGROUPID uniqueidentifier;
            set @DISCOUNTGROUPID = newid();

            -- insert new items            

            insert into dbo.[DISCOUNTGROUP] 
            (
                DISCOUNTID, 
                ID,    
                ADDEDBYID, 
                CHANGEDBYID, 
                DATEADDED, 
                DATECHANGED
            )
            values
            (
                @ID
                @DISCOUNTGROUPID,
                @CHANGEAGENTID
                @CHANGEAGENTID
                @CURRENTDATE
                @CURRENTDATE                
            )

            insert into dbo.[DISCOUNTGROUPDETAIL]
            (
                DISCOUNTGROUPID, 
                ID,
                DISCOUNTEDITEM,
                DISCOUNTGROUPDETAILAPPLICATIONCODE,
                ADDEDBYID, 
                CHANGEDBYID, 
                DATEADDED, 
                DATECHANGED
            )
            values
            (
                @DISCOUNTGROUPID
                newid(),
                1,
                @APPLIESTOMERCHANDISECODE
                @CHANGEAGENTID
                @CHANGEAGENTID
                @CURRENTDATE
                @CURRENTDATE
            )    
        end
    end
    else if @APPLIESTOMERCHANDISECODE = 1
    begin
        if (select count(T.discountmerchandisedepartments.value('(MERCHANDISEDEPARTMENTID)[1]', 'uniqueidentifier'))
            from @DISCOUNTMERCHANDISEDEPARTMENTS.nodes('/DISCOUNTMERCHANDISEDEPARTMENTS/ITEM') T(discountmerchandisedepartments)) = 0
            raiserror('BBERR_DEPARTMENTSREQUIRED', 13, 1);            

        if exists
            (select count(MERCHANDISEDEPARTMENTID)
                from
                (
                    select T.discountmerchandisedepartments.value('(MERCHANDISEDEPARTMENTID)[1]', 'uniqueidentifier') MERCHANDISEDEPARTMENTID
                    from @DISCOUNTMERCHANDISEDEPARTMENTS.nodes('/DISCOUNTMERCHANDISEDEPARTMENTS/ITEM') T(discountmerchandisedepartments)
                ) Result
                group by MERCHANDISEDEPARTMENTID
                having count(*) > 1
            )
            raiserror('BBERR_DUPLICATEDEPARTMENTS', 13, 1);        

        delete from dbo.DISCOUNTGROUP
        where DISCOUNTGROUP.ID in
            (
                select DISCOUNTGROUP.ID
                from dbo.DISCOUNTGROUPDETAIL
                inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
                inner join dbo.DISCOUNT on DISCOUNTGROUP.DISCOUNTID = DISCOUNT.ID
                where DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE in (0, 2)
                    and DISCOUNT.ID = @ID
                    and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 1
            )        
        exec dbo.USP_DISCOUNT_MERCHANDISEDEPARTMENTS_UPDATEFROMXML @ID, @DISCOUNTMERCHANDISEDEPARTMENTS, @CHANGEAGENTID, @CURRENTDATE
    end
    else if @APPLIESTOMERCHANDISECODE = 2
    begin
        if (select count(T.discountmerchandiseitems.value('(MERCHANDISEITEMID)[1]', 'uniqueidentifier'))
            from @DISCOUNTMERCHANDISEITEMS.nodes('/DISCOUNTMERCHANDISEITEMS/ITEM') T(discountmerchandiseitems)) = 0
            raiserror('BBERR_ITEMSREQUIRED', 13, 1);        

        if exists
            (select count(MERCHANDISEITEMID)
                from
                (
                    select T.discountmerchandiseitems.value('(MERCHANDISEITEMID)[1]', 'uniqueidentifier') MERCHANDISEITEMID
                    from @DISCOUNTMERCHANDISEITEMS.nodes('/DISCOUNTMERCHANDISEITEMS/ITEM') T(discountmerchandiseitems)
                ) Result
                group by MERCHANDISEITEMID
                having count(*) > 1
            )
            raiserror('BBERR_DUPLICATEITEMS', 13, 1);            

        delete from dbo.DISCOUNTGROUP
        where DISCOUNTGROUP.ID in
            (
                select DISCOUNTGROUP.ID
                from dbo.DISCOUNTGROUPDETAIL
                inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
                inner join dbo.DISCOUNT on DISCOUNTGROUP.DISCOUNTID = DISCOUNT.ID
                where DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE in (0, 1)
                    and DISCOUNT.ID = @ID
                    and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 1
            )    

        exec dbo.USP_DISCOUNT_MERCHANDISEITEMS_UPDATEFROMXML @ID, @DISCOUNTMERCHANDISEITEMS, @CHANGEAGENTID, @CURRENTDATE

    end

    /* reset CONTEXT_INFO to previous value */
    if not @contextCache is null
       set CONTEXT_INFO @contextCache

return 0;
end