USP_RESOURCE_PROCESS
Process the resource xml to populate pricing fields and per-ticket quantity.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RESOURCES | xml | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CREATENEWRECORIDS | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_RESOURCE_PROCESS
(
@RESOURCES xml output,
@CHANGEAGENTID uniqueidentifier = null,
@CREATENEWRECORIDS bit = 0
)
as begin
set nocount on;
-- Setup the save information
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
-- First turn the xml into a temp table
declare @RESOURCESTABLE table
(
ID uniqueidentifier,
RESOURCEID uniqueidentifier,
QUANTITYNEEDED int,
ISPERTICKETITEM bit,
PERTICKETQUANTITY int,
PRICE money,
PRICINGSTRUCTURECODE tinyint,
ORIGINALID uniqueidentifier,
PERTICKETDIVISOR int
)
insert into @RESOURCESTABLE
(
ID,
RESOURCEID,
QUANTITYNEEDED,
ISPERTICKETITEM,
PERTICKETQUANTITY,
PRICE,
PRICINGSTRUCTURECODE,
PERTICKETDIVISOR
)
select
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T.c.value('(RESOURCEID)[1]','uniqueidentifier') AS 'RESOURCEID',
COALESCE(T.c.value('(QUANTITYNEEDED)[1]','int'), 0) AS 'QUANTITYNEEDED',
T.c.value('(ISPERTICKETITEM)[1]','bit') AS 'ISPERTICKETITEM',
0 AS 'PERTICKETQUANTITY',
T.c.value('(PRICE)[1]','money') AS 'PRICE',
T.c.value('(PRICINGSTRUCTURECODE)[1]','tinyint') AS 'PRICINGSTRUCTURECODE',
0 AS 'PERTICKETDIVISOR'
from @RESOURCES.nodes('/RESOURCES/ITEM') T(c)
-- Update any null pricing information fields with values pulled from the resource pricing tables
update @RESOURCESTABLE set
PRICE = COALESCE(RESOURCEPRICING.PRICE,0),
PRICINGSTRUCTURECODE = COALESCE(RESOURCEPRICING.PRICINGSTRUCTURECODE,0)
from @RESOURCESTABLE as RESOURCESTABLE
left join RESOURCEPRICING on RESOURCESTABLE.RESOURCEID = RESOURCEPRICING.ID
where
RESOURCESTABLE.ID = '00000000-0000-0000-0000-000000000000' or
RESOURCESTABLE.ID is null or
RESOURCESTABLE.PRICE is null or
RESOURCESTABLE.PRICINGSTRUCTURECODE is null or
(
RESOURCESTABLE.PRICINGSTRUCTURECODE = 0 and
RESOURCESTABLE.PRICINGSTRUCTURECODE <> COALESCE(RESOURCEPRICING.PRICINGSTRUCTURECODE,0)
) or
@CREATENEWRECORIDS = 1
-- Update the per-ticket quantity for per-ticket resources
update @RESOURCESTABLE set
QUANTITYNEEDED = 0,
PERTICKETQUANTITY = RESOURCE.PERTICKETQUANTITY,
PERTICKETDIVISOR = RESOURCE.PERTICKETDIVISOR
from @RESOURCESTABLE as RESOURCESTABLE
inner join RESOURCE on RESOURCESTABLE.RESOURCEID = RESOURCE.ID
where RESOURCE.ISPERTICKETITEM <> 0
if (@CREATENEWRECORIDS = 1)
begin
update @RESOURCESTABLE set ORIGINALID = ID;
update @RESOURCESTABLE set ID = newid();
end
-- Now recreate the XML from the temp table and setup the return value
set @RESOURCES =
(
select
[ID],
[RESOURCEID],
[QUANTITYNEEDED],
[ISPERTICKETITEM],
[PERTICKETQUANTITY],
[PRICE],
[PRICINGSTRUCTURECODE],
[ORIGINALID],
[PERTICKETDIVISOR]
from @RESOURCESTABLE
for xml raw('ITEM'),type,elements,root('RESOURCES'),BINARY BASE64
)
end