USP_DATAFORMTEMPLATE_EDIT_MERCHANDISEPRODUCTINSTANCE_4
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@SALEPRICE | money | IN | |
@PRODUCTINSTANCEOPTIONS | xml | IN | |
@LOOKUPCODE | nvarchar(25) | IN | |
@COST | money | IN | |
@LOOKUPITEMS | xml | IN |
Definition
Copy
create procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MERCHANDISEPRODUCTINSTANCE_4 (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@SALEPRICE money,
@PRODUCTINSTANCEOPTIONS xml,
@LOOKUPCODE nvarchar(25),
@COST money,
@LOOKUPITEMS xml
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
-- handle updating the data
update dbo.MERCHANDISEPRODUCTINSTANCE
set
SALEPRICE = @SALEPRICE,
LOOKUPCODE = @LOOKUPCODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
update dbo.MERCHANDISEPRODUCTINSTANCEVENDOR
set
COST=@COST
where MERCHANDISEPRODUCTINSTANCEID=@ID
declare @OPTIONTABLE table(
OPTIONID uniqueidentifier,
OPTIONVALUEID uniqueidentifier,
PRODUCTINSTANCEOPTIONID uniqueidentifier
)
--Building table of selected option values
insert into @OPTIONTABLE
select
PRODUCTINSTANCEOPTIONS.OPTIONID,
PRODUCTINSTANCEOPTIONS.OPTIONVALUEID,
MERCHANDISEPRODUCTINSTANCEOPTIONVALUE.ID PRODUCTINSTANCEOPTIONID --Product instance's record for this option
from dbo.MERCHANDISEPRODUCTINSTANCEOPTIONVALUE
inner join dbo.MERCHANDISEPRODUCTOPTIONVALUE on
MERCHANDISEPRODUCTINSTANCEOPTIONVALUE.MERCHANDISEPRODUCTOPTIONVALUEID = MERCHANDISEPRODUCTOPTIONVALUE.ID
inner join dbo.MERCHANDISEPRODUCTOPTION on
MERCHANDISEPRODUCTOPTIONVALUE.MERCHANDISEPRODUCTOPTIONID = MERCHANDISEPRODUCTOPTION.ID
inner join (
select
T.item.value('@OPTIONID','uniqueidentifier') as OPTIONID,
T.item.value('@OPTIONVALUEID','uniqueidentifier') as OPTIONVALUEID
from @PRODUCTINSTANCEOPTIONS.nodes('PRODUCTINSTANCEOPTIONS/ITEM') T(item)
) as PRODUCTINSTANCEOPTIONS on
MERCHANDISEPRODUCTOPTION.ID = PRODUCTINSTANCEOPTIONS.OPTIONID
where MERCHANDISEPRODUCTINSTANCEOPTIONVALUE.MERCHANDISEPRODUCTINSTANCEID = @ID
--update existing product instance options
update dbo.MERCHANDISEPRODUCTINSTANCEOPTIONVALUE set
MERCHANDISEPRODUCTOPTIONVALUEID = [OPTIONS].OPTIONVALUEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.MERCHANDISEPRODUCTINSTANCEOPTIONVALUE
inner join @OPTIONTABLE [OPTIONS] on
MERCHANDISEPRODUCTINSTANCEOPTIONVALUE.ID = [OPTIONS].PRODUCTINSTANCEOPTIONID
--update existing product instance lookup codes
exec dbo.USP_MERCHANDISEPRODUCTINSTANCE_GETLOOKUPITEMS_UPDATEFROMXML @ID, @LOOKUPITEMS, @CHANGEAGENTID
if dbo.UFN_MERCHANDISEPRODUCTINSTANCE_CHECKOPTIONCOUNT(@ID) = 0
begin
raiserror('ERR_MERCHANDISEPRODUCTINSTANCE_OPTIONCOUNTNOTCORRECT', 13, 1);
end
if dbo.UFN_MERCHANDISEPRODUCTINSTANCE_OPTIONSUNIQUE(@ID) = 0
begin
raiserror('ERR_MERCHANDISEPRODUCTINSTANCE_OPTIONSNOTUNIQUE', 13, 1);
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;