USP_ITINERARYITEMS_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_ITINERARYITEMS_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,
ITINERARYITEMSTAFFRESOURCEID uniqueidentifier,
DESCRIPTION nvarchar(255),
QUANTITY decimal(20,4),
PRICE money,
PRICINGSTRUCTURECODE tinyint
);
insert into @ORDERITEMS
(
ID,
ITINERARYITEMSTAFFRESOURCEID,
DESCRIPTION,
QUANTITY,
PRICE,
PRICINGSTRUCTURECODE
)
select
SALESORDERITEM.ID as ID,
ITINERARYITEMSTAFFRESOURCE.ID as ITINERARYITEMSTAFFRESOURCEID,
ITINERARYITEM.NAME + ' - ' + VOLUNTEERTYPE.NAME as DESCRIPTION,
case ITINERARYITEMSTAFFRESOURCE.PRICINGSTRUCTURECODE
when 2 then
(
coalesce
(
datediff
(
s,
ITINERARYITEM.STARTDATETIME,
ITINERARYITEM.ENDDATETIME
),0
) / (3600.0)
)
* ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED
else
ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED
end as QUANTITY,
case ITINERARYITEMSTAFFRESOURCE.PRICINGSTRUCTURECODE
when 0 then 0
else ITINERARYITEMSTAFFRESOURCE.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.ITINERARYITEMSTAFFRESOURCE
inner join dbo.VOLUNTEERTYPE on ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
inner join dbo.ITINERARYITEM on ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
inner join dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
inner join dbo.RESERVATION on ITINERARY.RESERVATIONID = RESERVATION.ID
left join dbo.SALESORDERITEMITINERARYITEMSTAFFRESOURCE on ITINERARYITEMSTAFFRESOURCE.ID = SALESORDERITEMITINERARYITEMSTAFFRESOURCE.ITINERARYITEMSTAFFRESOURCEID
left join dbo.SALESORDERITEM on SALESORDERITEMITINERARYITEMSTAFFRESOURCE.SALESORDERITEMID = SALESORDERITEM.ID
left join dbo.RESERVATIONRATESCALE on RESERVATION.ID = RESERVATIONRATESCALE.ID
left join dbo.RESERVATIONRATESCALESTAFFRESOURCE on
RESERVATIONRATESCALE.ID = RESERVATIONRATESCALESTAFFRESOURCE.RESERVATIONRATESCALEID and
ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID = RESERVATIONRATESCALESTAFFRESOURCE.VOLUNTEERTYPEID
where
RESERVATION.ID = @SALESORDERID and
(
@ITINERARYID is null or
ITINERARYITEM.ITINERARYID = @ITINERARYID
) and
ITINERARYITEM.INVALIDREASONCODE = 0
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,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ORDERITEMS.ID,
@SALESORDERID,
11, --Itinerary Item Staffing Resource
ORDERITEMS.DESCRIPTION,
ORDERITEMS.QUANTITY,
ORDERITEMS.PRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @ORDERITEMS ORDERITEMS
insert into dbo.SALESORDERITEMITINERARYITEMSTAFFRESOURCE
(
SALESORDERITEMID,
ITINERARYITEMSTAFFRESOURCEID,
VOLUNTEERTYPENAME,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ORDERITEMS.ID,
ORDERITEMS.ITINERARYITEMSTAFFRESOURCEID,
coalesce((
select [VOLUNTEERTYPE].[NAME]
from dbo.[ITINERARYITEMSTAFFRESOURCE]
inner join dbo.[VOLUNTEERTYPE]
on [ITINERARYITEMSTAFFRESOURCE].[VOLUNTEERTYPEID] = [VOLUNTEERTYPE].[ID]
where [ITINERARYITEMSTAFFRESOURCE].[ID] = [ORDERITEMS].[ITINERARYITEMSTAFFRESOURCEID]
),''),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @ORDERITEMS ORDERITEMS
end