USP_DISCOUNT_UPDATEQUALIFYINGMERCHANDISE
Updates qualifying merchandise info for a discount.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@APPLIESTOMERCHANDISECODE | tinyint | IN | |
@QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS | xml | IN | |
@QUALIFYINGDISCOUNTMERCHANDISEITEMS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DISCOUNT_UPDATEQUALIFYINGMERCHANDISE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@APPLIESTOMERCHANDISECODE tinyint,
@QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS xml,
@QUALIFYINGDISCOUNTMERCHANDISEITEMS xml
)
as
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 = 4
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 is null or @PREVIOUSAPPLICATIONCODE <> 4
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)
and DISCOUNT.ID = @ID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
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(),
0,
@APPLIESTOMERCHANDISECODE, -- any item
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
end
end
else if @APPLIESTOMERCHANDISECODE = 1
begin
if (select count(T.qualifyingdiscountmerchandisedepartments.value('(MERCHANDISEDEPARTMENTID)[1]', 'uniqueidentifier'))
from @QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS.nodes('/QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS/ITEM') T(qualifyingdiscountmerchandisedepartments)) = 0
raiserror('BBERR_DEPARTMENTSREQUIRED', 13, 1);
if exists
(select count(MERCHANDISEDEPARTMENTID)
from
(
select T.qualifyingdiscountmerchandisedepartments.value('(MERCHANDISEDEPARTMENTID)[1]', 'uniqueidentifier') MERCHANDISEDEPARTMENTID
from @QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS.nodes('/QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS/ITEM') T(qualifyingdiscountmerchandisedepartments)
) Result
group by MERCHANDISEDEPARTMENTID
having count(*) > 1
)
raiserror('BBERR_DUPLICATEDEPARTMENTS', 13, 1);
-- 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 (4, 2)
and DISCOUNT.ID = @ID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
exec dbo.USP_DISCOUNT_QUALIFYINGMERCHANDISEDEPARTMENTS_UPDATEFROMXML @ID, @QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS, @CHANGEAGENTID, @CURRENTDATE
end
else if @APPLIESTOMERCHANDISECODE = 2
begin
if (select count(T.qualifyingdiscountmerchandiseitems.value('(MERCHANDISEITEMID)[1]', 'uniqueidentifier'))
from @QUALIFYINGDISCOUNTMERCHANDISEITEMS.nodes('/QUALIFYINGDISCOUNTMERCHANDISEITEMS/ITEM') T(qualifyingdiscountmerchandiseitems)) = 0
raiserror('BBERR_ITEMSREQUIRED', 13, 1);
if exists
(select count(MERCHANDISEITEMID)
from
(
select T.qualifyingdiscountmerchandiseitems.value('(MERCHANDISEITEMID)[1]', 'uniqueidentifier') MERCHANDISEITEMID
from @QUALIFYINGDISCOUNTMERCHANDISEITEMS.nodes('/QUALIFYINGDISCOUNTMERCHANDISEITEMS/ITEM') T(qualifyingdiscountmerchandiseitems)
) Result
group by MERCHANDISEITEMID
having count(*) > 1
)
raiserror('BBERR_DUPLICATEITEMS', 13, 1);
-- 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 (4, 1)
and DISCOUNT.ID = @ID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
exec dbo.USP_DISCOUNT_QUALIFYINGMERCHANDISEITEMS_UPDATEFROMXML @ID, @QUALIFYINGDISCOUNTMERCHANDISEITEMS, @CHANGEAGENTID, @CURRENTDATE
end
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache
return 0;