USP_DATAFORMTEMPLATE_EDIT_DISCOUNTGROUPDETAILQUALIFIEDMERCHANDISE
The save procedure used by the edit dataform template "Discount Group Detail Qualified Merchandise Edit Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@APPLIESTOMERCHANDISECODE | tinyint | IN | Applies to |
@DISCOUNTMERCHANDISEDEPARTMENTS | xml | IN | Departments |
@DISCOUNTMERCHANDISEITEMS | xml | IN | Items |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_DISCOUNTGROUPDETAILQUALIFIEDMERCHANDISE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@APPLIESTOMERCHANDISECODE tinyint,
@DISCOUNTMERCHANDISEDEPARTMENTS xml,
@DISCOUNTMERCHANDISEITEMS xml
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @contextCache varbinary(128);
-- Clone the discount and only edit the new one, for historical salesorder calculations.
declare @CLONEID uniqueidentifier;
exec dbo.USP_DISCOUNT_CLONE @ID, @CLONEID output;
-- Update all xml with new ID's so the originals do not get overwritten (and the changes lost).
if @DISCOUNTMERCHANDISEDEPARTMENTS is not null
begin
set @DISCOUNTMERCHANDISEDEPARTMENTS = (
select
newid() as ID,
newid() as DISCOUNTGROUPID,
T.c.value('(MERCHANDISEDEPARTMENTID)[1]','uniqueidentifier') as MERCHANDISEDEPARTMENTID,
T.c.value('(SEQUENCE)[1]','integer') as SEQUENCE
from @DISCOUNTMERCHANDISEDEPARTMENTS.nodes('/DISCOUNTMERCHANDISEDEPARTMENTS/ITEM') T(c)
for xml path('ITEM'),type,elements,root('DISCOUNTMERCHANDISEDEPARTMENTS'),BINARY BASE64
)
end
if @DISCOUNTMERCHANDISEITEMS is not null
begin
set @DISCOUNTMERCHANDISEITEMS = (
select
newid() as ID,
newid() as DISCOUNTGROUPID,
T.c.value('(MERCHANDISEITEMID)[1]','uniqueidentifier') as MERCHANDISEITEMID,
T.c.value('(SEQUENCE)[1]','integer') as SEQUENCE
from @DISCOUNTMERCHANDISEITEMS.nodes('/DISCOUNTMERCHANDISEITEMS/ITEM') T(c)
for xml path('ITEM'),type,elements,root('DISCOUNTMERCHANDISEITEMS'),BINARY BASE64
)
end
if @APPLIESTOMERCHANDISECODE = 4 -- Any merchandise
begin
/* cache current context information */
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID
if (select top 1 DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE
from dbo.DISCOUNTGROUPDETAIL
inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
where DISCOUNTGROUP.DISCOUNTID = @CLONEID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0) <> 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
where DISCOUNTGROUPDETAIL.DISCOUNTGROUPDETAILAPPLICATIONCODE in (1, 2)
and DISCOUNTGROUP.DISCOUNTID = @CLONEID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
declare @DISCOUNTGROUPID uniqueidentifier;
set @DISCOUNTGROUPID = newid();
-- insert new items
insert into dbo.[DISCOUNTGROUP]
(
DISCOUNTID,
ID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@CLONEID,
@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 -- Merchandise department
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);
-- get rid of all qualifying discount groups, because the relevant existing ones won't be found for update.
delete from dbo.DISCOUNTGROUP
where DISCOUNTGROUP.ID in
(
select DISCOUNTGROUP.ID
from dbo.DISCOUNTGROUPDETAIL
inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
where DISCOUNTGROUP.DISCOUNTID = @CLONEID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
exec dbo.USP_DISCOUNT_MERCHANDISEDEPARTMENTS_UPDATEFROMXML @CLONEID, @DISCOUNTMERCHANDISEDEPARTMENTS, @CHANGEAGENTID, @CURRENTDATE, 0
end
else if @APPLIESTOMERCHANDISECODE = 2 -- Merchandise items
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);
-- get rid of all qualifying discount groups, because the relevant existing ones won't be found for update.
delete from dbo.DISCOUNTGROUP
where DISCOUNTGROUP.ID in
(
select DISCOUNTGROUP.ID
from dbo.DISCOUNTGROUPDETAIL
inner join dbo.DISCOUNTGROUP on DISCOUNTGROUP.ID = DISCOUNTGROUPDETAIL.DISCOUNTGROUPID
where DISCOUNTGROUP.DISCOUNTID = @CLONEID
and DISCOUNTGROUPDETAIL.DISCOUNTEDITEM = 0
)
exec dbo.USP_DISCOUNT_MERCHANDISEITEMS_UPDATEFROMXML @CLONEID, @DISCOUNTMERCHANDISEITEMS, @CHANGEAGENTID, @CURRENTDATE, 0
end
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache
-- Update the DISCOUNT record to invalidate the cache for sales.
update dbo.DISCOUNT
set CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = getdate()
where ID = @ID;
return 0;