USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC
Updates the sales order to reflect changes
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ITINERARYID | uniqueidentifier | IN | |
@SALESORDERID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_ITINERARY_STAFFRESOURCES_SALESORDERSYNC
(
@ITINERARYID uniqueidentifier = null,
@SALESORDERID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null
)
as
begin
set nocount on;
-- If we aren't given anything to sync, just abort.
if @ITINERARYID is null and @SALESORDERID is null
return 0;
if @SALESORDERID is null
select @SALESORDERID = RESERVATIONID from dbo.ITINERARY where ID = @ITINERARYID;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE as datetime
set @CURRENTDATE = getdate()
-- We only need to worry about updates and deletes here as the database integrity requires that there
-- already are no sales order items which are no longer needed.
declare @ORDERITEMS table
(
ID uniqueidentifier,
ITINERARYSTAFFRESOURCEID uniqueidentifier,
DESCRIPTION nvarchar(255),
QUANTITY decimal(20,4),
PRICINGSTRUCTURECODE tinyint,
PRICE money
)
insert into @ORDERITEMS
(
ID,
ITINERARYSTAFFRESOURCEID,
DESCRIPTION,
QUANTITY,
PRICE,
PRICINGSTRUCTURECODE
)
select
SALESORDERITEM.ID as ID,
ITINERARYSTAFFRESOURCE.ID as ITINERARYSTAFFRESOURCEID,
VOLUNTEERTYPE.NAME as DESCRIPTION,
case ITINERARYSTAFFRESOURCE.PRICINGSTRUCTURECODE
when 2 then
(
coalesce
(
datediff
(
s,
dbo.UFN_ITINERARY_STARTDATETIME(ITINERARYSTAFFRESOURCE.ITINERARYID),
dbo.UFN_ITINERARY_ENDDATETIME(ITINERARYSTAFFRESOURCE.ITINERARYID)
),0
) / (3600.0)
)
* ITINERARYSTAFFRESOURCE.QUANTITYNEEDED
else ITINERARYSTAFFRESOURCE.QUANTITYNEEDED
end as QUANTITY,
case ITINERARYSTAFFRESOURCE.PRICINGSTRUCTURECODE
when 0 then 0
else ITINERARYSTAFFRESOURCE.PRICE
end as PRICE,
case RESERVATION.PRICINGCODE
when 1 then
case coalesce(RESERVATIONRATESCALE.INCLUDEALLSTAFFRESOURCES, 0)
when 1 then 1
else
case when RESERVATIONRATESCALESTAFFRESOURCE.ID is null
then 0
else 1
end
end
else
case coalesce(SALESORDERITEM.PRICINGSTRUCTURECODE, 0)
when 2 then 2
else 0
end
end as PRICINGSTRUCTURECODE
from dbo.ITINERARYSTAFFRESOURCE
inner join dbo.VOLUNTEERTYPE on ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
inner join dbo.ITINERARY on ITINERARY.ID = ITINERARYSTAFFRESOURCE.ITINERARYID
inner join dbo.RESERVATION on ITINERARY.RESERVATIONID = RESERVATION.ID
left join dbo.SALESORDERITEMITINERARYSTAFFRESOURCE on
ITINERARYSTAFFRESOURCE.ID = SALESORDERITEMITINERARYSTAFFRESOURCE.ITINERARYSTAFFRESOURCEID
left join dbo.SALESORDERITEM on
SALESORDERITEMITINERARYSTAFFRESOURCE.SALESORDERITEMID = SALESORDERITEM.ID
left join dbo.RESERVATIONRATESCALE on RESERVATION.ID = RESERVATIONRATESCALE.ID
left join dbo.RESERVATIONRATESCALESTAFFRESOURCE on
RESERVATIONRATESCALE.ID = RESERVATIONRATESCALESTAFFRESOURCE.RESERVATIONRATESCALEID and
ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = RESERVATIONRATESCALESTAFFRESOURCE.VOLUNTEERTYPEID
where
RESERVATION.ID = @SALESORDERID and
(
@ITINERARYID is null or
ITINERARYSTAFFRESOURCE.ITINERARYID = @ITINERARYID
)
update dbo.SALESORDERITEM set
SALESORDERITEM.DESCRIPTION = UPDATEVALUES.DESCRIPTION,
SALESORDERITEM.QUANTITY = UPDATEVALUES.QUANTITY,
SALESORDERITEM.PRICE = UPDATEVALUES.PRICE,
SALESORDERITEM.PRICINGSTRUCTURECODE = UPDATEVALUES.PRICINGSTRUCTURECODE,
SALESORDERITEM.CHANGEDBYID = @CHANGEAGENTID,
SALESORDERITEM.DATECHANGED = @CURRENTDATE
from @ORDERITEMS as UPDATEVALUES
where
SALESORDERITEM.ID = UPDATEVALUES.ID and
(
SALESORDERITEM.DESCRIPTION <> UPDATEVALUES.DESCRIPTION or
SALESORDERITEM.QUANTITY <> UPDATEVALUES.QUANTITY or
SALESORDERITEM.PRICE <> UPDATEVALUES.PRICE or
SALESORDERITEM.PRICINGSTRUCTURECODE <> UPDATEVALUES.PRICINGSTRUCTURECODE
)
delete from @ORDERITEMS
where ID is not null
update @ORDERITEMS set ID = newid()
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
DESCRIPTION,
QUANTITY,
PRICE,
PRICINGSTRUCTURECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ORDERITEMS.ID,
@SALESORDERID,
10, --Itinerary Staffing Resource
ORDERITEMS.DESCRIPTION,
ORDERITEMS.QUANTITY,
ORDERITEMS.PRICE,
ORDERITEMS.PRICINGSTRUCTURECODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @ORDERITEMS ORDERITEMS
insert into dbo.SALESORDERITEMITINERARYSTAFFRESOURCE
(
SALESORDERITEMID,
ITINERARYSTAFFRESOURCEID,
VOLUNTEERTYPENAME,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ORDERITEMS.ID,
ORDERITEMS.ITINERARYSTAFFRESOURCEID,
ORDERITEMS.DESCRIPTION,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @ORDERITEMS ORDERITEMS
end